FunASR/runtime/funasr_api
zhaomingwork 99ecaca869
Add python funasr api support for websocket srv (#1777)
* add python funasr_api supoort

* change little to README.md

* add core tools stream

* modified a little

* fix bug for timeout

* support for buffer decode

* add ffmpeg decode for buffer
2024-06-03 10:44:55 +08:00
..
asr_example.mp3 Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
asr_example.wav Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
example.py Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
funasr_api.py Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
funasr_core.py Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
funasr_stream.py Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
funasr_tools.py Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00
README.md Add python funasr api support for websocket srv (#1777) 2024-06-03 10:44:55 +08:00

python funasr_api

This is the api for python to use funasr engine, only support 2pass server.

For install

Install websocket-client and ffmpeg

pip install websocket-client
apt install ffmpeg -y

recognizer examples

support many audio type as ffmpeg support, detail see FunASR/runtime/funasr_api/example.py

    # create an recognizer
    rcg = FunasrApi(
        uri="wss://www.funasr.com:10096/"
    )
    # recognizer by filepath
    text=rcg.rec_file("asr_example.mp3")
    print("recognizer by filepath result=",text)
    
    
    # recognizer by buffer
	# rec_buf(audio_buf,ffmpeg_decode=False),set ffmpeg_decode=True if audio is not PCM or WAV type
    with open("asr_example.wav", "rb") as f:
        audio_bytes = f.read()
    text=rcg.rec_buf(audio_bytes)
    print("recognizer by buffer result=",text)

streaming recognizer examples,use FunasrApi.audio2wav to covert to WAV type if need

    rcg = FunasrApi(
        uri="wss://www.funasr.com:10096/"
    )
    #define call_back function for msg 
    def on_msg(msg):
       print("stream msg=",msg)
    stream=rcg.create_stream(msg_callback=on_msg)
    
    wav_path = "asr_example.wav"

    with open(wav_path, "rb") as f:
        audio_bytes = f.read()
        
    # use FunasrApi's audio2wav to covert other audio to PCM if needed
    #import os
    #from funasr_tools import FunasrTools
    #file_ext=os.path.splitext(wav_path)[-1].upper()
    #if not file_ext =="PCM" and not file_ext =="WAV":
    #       audio_bytes=FunasrTools.audio2wav(audio_bytes)
    
    stride = int(60 * 10 / 10 / 1000 * 16000 * 2)
    chunk_num = (len(audio_bytes) - 1) // stride + 1

    for i in range(chunk_num):
        beg = i * stride
        data = audio_bytes[beg : beg + stride]
        stream.feed_chunk(data)
    final_result=stream.wait_for_end()
    print("asr_example.wav stream_result=",final_result)

Acknowledge

  1. This project is maintained by FunASR community.
  2. We acknowledge zhaoming for contributing the websocket service.
  3. We acknowledge cgisky1980 for contributing the websocket service of offline model.