0x5446 / api4sensevoice

API and websocket server for sensevoice. It has inherited some enhanced features, such as VAD detection, real-time streaming recognition, and speaker verification.
218 stars 32 forks source link

real-time streaming sensevoice with speaker verification

It has inherited some enhanced features for sensevoice:

Update Log

2024-09-30

  1. Optimized speaker verification processing by accumulating audio data to improve recognition accuracy.
  2. Added logprob to the recognition results to represent the confidence of the recognition, for use by upper-level applications.

Installation

First, clone this repository to your local machine:

git clone https://github.com/0x5446/api4sensevoice.git
cd api4sensevoice

Then, install the required dependencies using the following command: 

conda create -n api4sensevoice python=3.10
conda activate api4sensevoice

conda install -c conda-forge ffmpeg

pip install -r requirements.txt

Running

Single Sentence Recognition API Server

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Run the FastAPI app with a specified port.")
    parser.add_argument('--port', type=int, default=7000, help='Port number to run the FastAPI app on.')
    parser.add_argument('--certfile', type=str, default='path_to_your_certfile', help='SSL certificate file')
    parser.add_argument('--keyfile', type=str, default='path_to_your_keyfile', help='SSL key file')
    args = parser.parse_args()

    uvicorn.run(app, host="0.0.0.0", port=args.port, ssl_certfile=args.certfile, ssl_keyfile=args.keyfile)

The above code is from the end of server.py. You can modify it to define the port, certfile, and keyfile, then directly run python server.py to start the API service.

You can also set these through command-line arguments, for example:

python server.py --port 8888 --certfile path_to_your_certfile --keyfile path_to_your_key

API Description

Transcribe Audio
curl -X 'POST'  
  'http://yourapiaddress/transcribe'  
  -H 'accept: application/json'  
  -H 'Content-Type: multipart/form-data'  
  -F 'file=@path_to_your_audio_file'
{
  "code": 0,
  "msg": "Success",
  "data": {
    // Transcription result
  }
}

Streaming Real-time Recognition WebSocket Server

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Run the FastAPI app with a specified port.")
    parser.add_argument('--port', type=int, default=27000, help='Port number to run the FastAPI app on.')
    parser.add_argument('--certfile', type=str, default='path_to_your_certfile', help='SSL certificate file')
    parser.add_argument('--keyfile', type=str, default='path_to_your_keyfile', help='SSL key file')
    args = parser.parse_args()

    uvicorn.run(app, host="0.0.0.0", port=args.port, ssl_certfile=args.certfile, ssl_keyfile=args.keyfile)

The above code is from the end of server_wss.py. You can modify it to define the port, certfile, and keyfile, then directly run python server_wss.py to start the WebSocket service.

You can also set these through command-line arguments, for example:

python server_wss.py --port 8888 --certfile path_to_your_certfile --keyfile path_to_your_key

If you want to enable speaker verification:

  1. Prepare the voice audio files of the speakers to be verified: 16000 sampling rate, single channel, 16-bit width, WAV format, and place them in the speaker directory.
  2. Modify the following part of server_wss.py to replace the file paths in the list with your own (you can add multiple, any match will be considered as verification passed, and ASR inference will proceed).
    reg_spks_files = [
    "speaker/speaker1_a_cn_16k.wav"
    ]

WebSocket Parameters

Client Testing Page

Roadmap

Contribution

All forms of contributions are welcome, including but not limited to:

License

This project is licensed under the MIT License. See the LICENSE file for details.

Dependencies