| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import uvicorn
- import requests
- import os
- from fastapi import FastAPI
- from funasr import AutoModel
- from funasr.utils.postprocess_utils import rich_transcription_postprocess
- from pydantic import BaseModel
- model = AutoModel(
- model="iic/SenseVoiceSmall",
- trust_remote_code=True,
- remote_code="./model.py",
- vad_model="fsmn-vad",
- vad_kwargs={"max_single_segment_time": 30000},
- device="cuda:0",
- )
- # 定义asr数据模型,用于接收POST请求中的数据
- class ASRItem(BaseModel):
- url: str # 输入音频的远程URL
- app = FastAPI()
- @app.post("/asr")
- async def asr(item: ASRItem):
- try:
- # 下载远程音频文件
- response = requests.get(item.url)
- if response.status_code != 200:
- raise Exception(f"Failed to download audio from {item.url}. Status code: {response.status_code}")
- with open("test.wav", "wb") as f:
- f.write(response.content)
- # 进行语音识别
- res = model.generate("test.wav",
- language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech"
- use_itn=True,
- batch_size_s=60,
- merge_vad=True, #
- merge_length_s=15, )
- text = rich_transcription_postprocess(res[0]["text"])
- print(text)
- result_dict = {"code": 0, "msg": "ok", "res": text}
- except Exception as e:
- result_dict = {"code": 1, "msg": str(e)}
- finally:
- # 删除临时下载的文件
- if os.path.exists("test.wav"):
- os.remove("test.wav")
- return result_dict
- if __name__ == '__main__':
- uvicorn.run(app, host='0.0.0.0', port=2003)
|