diff --git a/main/manager-api/src/main/resources/db/changelog/202505091552.sql b/main/manager-api/src/main/resources/db/changelog/202505091552.sql deleted file mode 100644 index 7d6a40b7..00000000 --- a/main/manager-api/src/main/resources/db/changelog/202505091552.sql +++ /dev/null @@ -1,5 +0,0 @@ --- 更新模型供应器表 -UPDATE `ai_model_provider` SET fields = '[{"key": "host", "type": "string", "label": "服务地址"}, {"key": "port", "type": "number", "label": "端口号"}, {"key": "api_key", "type": "string", "label": "API密钥"}]' WHERE id = 'SYSTEM_ASR_FunASRServer'; - --- 更新模型配置表 -UPDATE `ai_model_config` SET config_json = '{"host": "127.0.0.1", "port": 10096, "type": "fun_server", "api_key": "none"}' WHERE id = 'ASR_FunASRServer'; \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/202505091554.sql b/main/manager-api/src/main/resources/db/changelog/202505091554.sql new file mode 100644 index 00000000..87d879dd --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/202505091554.sql @@ -0,0 +1,15 @@ +-- 更新模型供应器表 +UPDATE `ai_model_provider` SET fields = '[{"key": "host", "type": "string", "label": "服务地址"}, {"key": "port", "type": "number", "label": "端口号"}, {"key": "type", "type": "string", "label": "服务类型"}, {"key": "is_ssl", "type": "boolean", "label": "是否使用SSL"}, {"key": "api_key", "type": "string", "label": "API密钥"}, {"key": "output_dir", "type": "string", "label": "输出目录"}]' WHERE id = 'SYSTEM_ASR_FunASRServer'; + +-- 更新模型配置表 +UPDATE `ai_model_config` SET +config_json = '{"host": "127.0.0.1", "port": 10096, "type": "fun_server", "is_ssl": true, "api_key": "none", "output_dir": "tmp/"}', +`doc_link` = 'https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md', +`remark` = '独立部署FunASR,使用FunASR的API服务,只需要五句话 +第一句:mkdir -p ./funasr-runtime-resources/models +第二句:sudo docker run -p 10096:10095 -it --privileged=true -v $PWD/funasr-runtime-resources/models:/workspace/models registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12 +上一句话执行后会进入到容器,继续第三句:cd FunASR/runtime +不要退出容器,继续在容器中执行第四句:nohup bash run_server_2pass.sh --download-model-dir /workspace/models --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx --model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx --online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst --itn-dir thuduj12/fst_itn_zh --hotword /workspace/models/hotwords.txt > log.txt 2>&1 & +上一句话执行后会进入到容器,继续第五句:tail -f log.txt +第五句话执行完后,会看到模型下载日志,下载完后就可以连接使用了 +以上是使用CPU推理,如果有GPU,详细参考:https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md' WHERE `id` = 'ASR_FunASRServer'; \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml index 58904ef9..2d5147c6 100755 --- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -115,12 +115,12 @@ databaseChangeLog: encoding: utf8 path: classpath:db/changelog/202505091409.sql - changeSet: - id: 202505091552 + id: 202505091554 author: whosmyqueen changes: - sqlFile: encoding: utf8 - path: classpath:db/changelog/202505091552.sql + path: classpath:db/changelog/202505091554.sql - changeSet: id: 202505111914 author: hrz diff --git a/main/xiaozhi-server/config.yaml b/main/xiaozhi-server/config.yaml index b053db6a..7a5918cf 100644 --- a/main/xiaozhi-server/config.yaml +++ b/main/xiaozhi-server/config.yaml @@ -221,7 +221,7 @@ ASR: FunASRServer: # 独立部署FunASR,使用FunASR的API服务,只需要五句话 # 第一句:mkdir -p ./funasr-runtime-resources/models - # 第二句:sudo docker run -d -p 10096:10095 --privileged=true -v $PWD/funasr-runtime-resources/models:/workspace/models registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12 + # 第二句:sudo docker run -p 10096:10095 -it --privileged=true -v $PWD/funasr-runtime-resources/models:/workspace/models registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12 # 上一句话执行后会进入到容器,继续第三句:cd FunASR/runtime # 不要退出容器,继续在容器中执行第四句:nohup bash run_server_2pass.sh --download-model-dir /workspace/models --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx --model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx --online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst --itn-dir thuduj12/fst_itn_zh --hotword /workspace/models/hotwords.txt > log.txt 2>&1 & # 上一句话执行后会进入到容器,继续第五句:tail -f log.txt @@ -231,6 +231,7 @@ ASR: host: 127.0.0.1 port: 10096 is_ssl: true + api_key: none output_dir: tmp/ SherpaASR: type: sherpa_onnx_local diff --git a/main/xiaozhi-server/core/providers/asr/fun_server.py b/main/xiaozhi-server/core/providers/asr/fun_server.py index a446c6ac..97c9fdc9 100644 --- a/main/xiaozhi-server/core/providers/asr/fun_server.py +++ b/main/xiaozhi-server/core/providers/asr/fun_server.py @@ -25,8 +25,12 @@ class ASRProvider(ASRProviderBase): super().__init__() self.host = config.get("host", "localhost") self.port = config.get("port", 10095) - self.api_key = config.get('api_key', 'none') - self.is_ssl = config.get("is_ssl", True) + self.api_key = config.get("api_key", "none") + self.is_ssl = str(config.get("is_ssl", True)).lower() in ( + "true", + "1", + "yes", + ) self.output_dir = config.get("output_dir") self.delete_audio_file = delete_audio_file self.uri = ( @@ -132,9 +136,13 @@ class ASRProvider(ASRProviderBase): pass else: file_path = self.save_audio_to_file(pcm_data, session_id) - auth_header = {'Authorization': 'Bearer; {}'.format(self.api_key)} + auth_header = {"Authorization": "Bearer; {}".format(self.api_key)} async with websockets.connect( - self.uri, additional_headers=auth_header, subprotocols=["binary"], ping_interval=None, ssl=self.ssl_context + self.uri, + additional_headers=auth_header, + subprotocols=["binary"], + ping_interval=None, + ssl=self.ssl_context, ) as ws: try: # Use asyncio to handle WebSocket communication @@ -159,7 +167,7 @@ class ASRProvider(ASRProviderBase): # Get the result from the receive task result = receive_task.result() - match = re.match(r'<\|(.*?)\|><\|(.*?)\|><\|(.*?)\|>(.*)', result) + match = re.match(r"<\|(.*?)\|><\|(.*?)\|><\|(.*?)\|>(.*)", result) if match: result = match.group(4).strip() return (