| funasr/bin/asr_inference_launch.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| funasr/runtime/docs/SDK_advanced_guide_offline.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| funasr/runtime/docs/SDK_advanced_guide_offline_zh.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| funasr/runtime/docs/SDK_tutorial.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| funasr/runtime/docs/SDK_tutorial_zh.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| funasr/runtime/python/websocket/funasr_wss_client.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| funasr/runtime/python/websocket/funasr_wss_server.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
funasr/bin/asr_inference_launch.py
@@ -255,9 +255,10 @@ if param_dict is not None: hotword_list_or_file = param_dict.get('hotword') export_mode = param_dict.get("export_mode", False) clas_scale = param_dict.get('clas_scale', 1.0) else: hotword_list_or_file = None clas_scale = param_dict.get('clas_scale', 1.0) clas_scale = 1.0 if kwargs.get("device", None) == "cpu": ngpu = 0 funasr/runtime/docs/SDK_advanced_guide_offline.md
@@ -169,7 +169,7 @@ ### python-client ```shell python wss_client_asr.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "./data/wav.scp" --send_without_sleep --output_dir "./results" python funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "./data/wav.scp" --send_without_sleep --output_dir "./results" ``` Introduction to command parameters: funasr/runtime/docs/SDK_advanced_guide_offline_zh.md
@@ -285,4 +285,4 @@ FUNASR_RESULT result=CTTransformerInfer(punc_hanlde, txt_str.c_str(), RASR_NONE, NULL); // 其中:punc_hanlde为CTTransformerInit返回值,txt_str为文本 ``` 使用示例详见:https://github.com/alibaba-damo-academy/FunASR/blob/main/funasr/runtime/onnxruntime/bin/funasr-onnx-offline-punc.cpp 使用示例详见:https://github.com/alibaba-damo-academy/FunASR/blob/main/funasr/runtime/onnxruntime/bin/funasr-onnx-offline-punc.cpp funasr/runtime/docs/SDK_tutorial.md
@@ -275,7 +275,7 @@ Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/ Requirement already satisfied: websockets in /usr/local/lib/python3.8/dist-packages (from -r /root/funasr_samples/python/requirements_client.txt (line 1)) (11.0.3) Run python3 /root/funasr_samples/python/wss_client_asr.py --host 127.0.0.1 --port 10095 --mode offline --audio_in /root/funasr_samples/audio/asr_example.wav --send_without_sleep --output_dir ./funasr_samples/python Run python3 /root/funasr_samples/python/funasr_wss_client.py --host 127.0.0.1 --port 10095 --mode offline --audio_in /root/funasr_samples/audio/asr_example.wav --send_without_sleep --output_dir ./funasr_samples/python ... ... @@ -284,7 +284,7 @@ Exception: sent 1000 (OK); then received 1000 (OK) end If failed, you can try (python3 /root/funasr_samples/python/wss_client_asr.py --host 127.0.0.1 --port 10095 --mode offline --audio_in /root/funasr_samples/audio/asr_example.wav --send_without_sleep --output_dir ./funasr_samples/python) in your Shell. If failed, you can try (python3 /root/funasr_samples/python/funasr_wss_client.py --host 127.0.0.1 --port 10095 --mode offline --audio_in /root/funasr_samples/audio/asr_example.wav --send_without_sleep --output_dir ./funasr_samples/python) in your Shell. ``` @@ -292,7 +292,7 @@ If you want to directly run the client for testing, you can refer to the following simple instructions, taking the Python version as an example: ```shell python3 wss_client_asr.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" --send_without_sleep --output_dir "./results" python3 funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" --send_without_sleep --output_dir "./results" ``` Command parameter instructions: funasr/runtime/docs/SDK_tutorial_zh.md
@@ -37,7 +37,7 @@ 我们以Python语言客户端为例,进行说明,支持多种音频格式输入(.wav, .pcm, .mp3等),也支持视频输入(.mp4等),以及多文件列表wav.scp输入,其他版本客户端请参考文档([点击此处](#客户端用法详解)) ```shell python3 wss_client_asr.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" --output_dir "./results" python3 funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" ``` ## 客户端用法详解 @@ -56,7 +56,7 @@ 若想直接运行client进行测试,可参考如下简易说明,以python版本为例: ```shell python3 wss_client_asr.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" --output_dir "./results" python3 funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" ``` 命令参数说明: @@ -65,7 +65,8 @@ --port 10095 部署端口号 --mode offline表示离线文件转写 --audio_in 需要进行转写的音频文件,支持文件路径,文件列表wav.scp --output_dir 识别结果保存路径 --thread_num 设置并发发送线程数,默认为1 --ssl 设置是否开启ssl证书校验,默认1开启,设置为0关闭 ``` ### cpp-client @@ -80,6 +81,8 @@ --server-ip 为FunASR runtime-SDK服务部署机器ip,默认为本机ip(127.0.0.1),如果client与服务不在同一台服务器,需要改为部署机器ip --port 10095 部署端口号 --wav-path 需要进行转写的音频文件,支持文件路径 --thread_num 设置并发发送线程数,默认为1 --ssl 设置是否开启ssl证书校验,默认1开启,设置为0关闭 ``` ### Html网页版 @@ -153,7 +156,7 @@ ## 服务端启动过程配置详解 ##### 选择FunASR Docker镜像 ### 选择FunASR Docker镜像 推荐选择1)使用我们的最新发布版镜像,也可选择历史版本。 ```text [1/5] @@ -167,7 +170,7 @@ ``` ##### 设置宿主机提供给FunASR的端口 ### 设置宿主机提供给FunASR的端口 设置提供给Docker的宿主机端口,默认为10095。请保证此端口可用。 ```text [2/5] @@ -177,6 +180,13 @@ The port in Docker for FunASR server is 10095 ``` ### 设置SSL 默认开启SSL校验,如果需要关闭,可以在启动时设置 ```shell sudo bash funasr-runtime-deploy-offline-cpu-zh.sh --ssl 0 ``` ## 联系我们 在您使用过程中,如果遇到问题,欢迎加入用户群进行反馈 funasr/runtime/python/websocket/funasr_wss_client.py
@@ -8,7 +8,7 @@ import json import traceback from multiprocessing import Process from funasr.fileio.datadir_writer import DatadirWriter # from funasr.fileio.datadir_writer import DatadirWriter import logging @@ -72,11 +72,13 @@ voices = Queue() offline_msg_done=False ibest_writer = None if args.output_dir is not None: writer = DatadirWriter(args.output_dir) ibest_writer = writer[f"1best_recog"] # if os.path.exists(args.output_dir): # os.remove(args.output_dir) if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) async def record_microphone(): @@ -186,6 +188,10 @@ text_print = "" text_print_2pass_online = "" text_print_2pass_offline = "" if args.output_dir is not None: ibest_writer = open(os.path.join(args.output_dir, "text.{}".format(id)), "w+", encoding="utf-8") else: ibest_writer = None try: while True: @@ -193,13 +199,15 @@ meg = json.loads(meg) wav_name = meg.get("wav_name", "demo") text = meg["text"] if ibest_writer is not None: ibest_writer["text"][wav_name] = text if ibest_writer is not None: text_write_line = "{}\t{}\n".format(wav_name, text) ibest_writer.write(text_write_line) if meg["mode"] == "online": text_print += "{}".format(text) text_print = text_print[-args.words_max_print:] # os.system('clear') os.system('clear') print("\rpid" + str(id) + ": " + text_print) elif meg["mode"] == "offline": text_print += "{}".format(text) @@ -216,7 +224,7 @@ text_print = text_print_2pass_offline + "{}".format(text) text_print_2pass_offline += "{}".format(text) text_print = text_print[-args.words_max_print:] # os.system('clear') os.system('clear') print("\rpid" + str(id) + ": " + text_print) offline_msg_done=True @@ -227,17 +235,6 @@ async def print_messge(): global websocket while True: try: meg = await websocket.recv() meg = json.loads(meg) print(meg) except Exception as e: print("Exception:", e) #traceback.print_exc() exit(0) async def ws_client(id, chunk_begin, chunk_size): if args.audio_in is None: funasr/runtime/python/websocket/funasr_wss_server.py
@@ -10,7 +10,6 @@ from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from modelscope.utils.logger import get_logger from funasr.runtime.python.onnxruntime.funasr_onnx.utils.frontend import load_bytes tracemalloc.start() @@ -233,8 +232,6 @@ async def async_asr(websocket, audio_in): if len(audio_in) > 0: # print(len(audio_in)) audio_in = load_bytes(audio_in) rec_result = inference_pipeline_asr(audio_in=audio_in, param_dict=websocket.param_dict_asr) # print(rec_result) @@ -243,13 +240,12 @@ param_dict=websocket.param_dict_punc) # print("offline", rec_result) if 'text' in rec_result: message = json.dumps({"mode": "2pass-offline", "text": rec_result["text"], "wav_name": websocket.wav_name}) message = json.dumps({"mode": websocket.mode, "text": rec_result["text"], "wav_name": websocket.wav_name}) await websocket.send(message) async def async_asr_online(websocket, audio_in): if len(audio_in) > 0: audio_in = load_bytes(audio_in) # print(websocket.param_dict_asr_online.get("is_final", False)) rec_result = inference_pipeline_asr_online(audio_in=audio_in, param_dict=websocket.param_dict_asr_online) @@ -260,7 +256,7 @@ if "text" in rec_result: if rec_result["text"] != "sil" and rec_result["text"] != "waiting_for_more_voice": # print("online", rec_result) message = json.dumps({"mode": "2pass-online", "text": rec_result["text"], "wav_name": websocket.wav_name}) message = json.dumps({"mode": websocket.mode, "text": rec_result["text"], "wav_name": websocket.wav_name}) await websocket.send(message) if len(args.certfile)>0: