You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PaddleSpeech/demos/streaming_asr_server/README_cn.md

45 KiB

(English|中文)

流式语音识别服务

介绍

这个demo是一个启动流式语音服务和访问服务的实现。 它可以通过使用paddlespeech_serverpaddlespeech_client的单个命令或 python 的几行代码来实现。

流式语音识别服务只支持 weboscket 协议,不支持 http 协议。

使用方法

1. 安装

安装 PaddleSpeech 的详细过程请看 安装文档

推荐使用 paddlepaddle 2.2.1 或以上版本。 你可以从简单, 中等,困难 几种种方式中选择一种方式安装 PaddleSpeech。 如果使用简单模式安装,需要自行准备 yaml 文件,可参考 conf 目录下的 yaml 文件。

2. 准备配置文件

流式ASR的服务启动脚本和服务测试脚本存放在 PaddleSpeech/demos/streaming_asr_server 目录。 下载好 PaddleSpeech 之后,进入到 PaddleSpeech/demos/streaming_asr_server 目录。 配置文件可参见该目录下 conf/ws_application.yamlconf/ws_conformer_wenetspeech_application.yaml

目前服务集成的模型有: DeepSpeech2 和 conformer模型对应的配置文件如下

  • DeepSpeech: conf/ws_application.yaml
  • conformer: conf/ws_conformer_wenetspeech_application.yaml

这个 ASR client 的输入应该是一个 WAV 文件(.wav),并且采样率必须与模型的采样率相同。

可以下载此 ASR client的示例音频

wget -c https://paddlespeech.bj.bcebos.com/PaddleAudio/zh.wav

3. 服务端使用方法

  • 命令行 (推荐使用) 注意: 默认部署在 cpu 设备上,可以通过修改服务配置文件中 device 参数部署在 gpu 上。

    # 在 PaddleSpeech/demos/streaming_asr_server 目录启动服务
    paddlespeech_server start --config_file ./conf/ws_conformer_wenetspeech_application.yaml
    # 你如果愿意为了增加解码的速度而牺牲一定的模型精度,你可以使用如下的脚本 
     paddlespeech_server start --config_file ./conf/ws_conformer_wenetspeech_application_faster.yaml
    

    使用方法:

    paddlespeech_server start --help
    

    参数:

    • config_file: 服务的配置文件,默认: ./conf/application.yaml
    • log_file: log 文件. 默认:./log/paddlespeech.log

    输出:

       [2022-05-14 04:56:13,086] [    INFO] - create the online asr engine instance
       [2022-05-14 04:56:13,086] [    INFO] - paddlespeech_server set the device: cpu
       [2022-05-14 04:56:13,087] [    INFO] - Load the pretrained model, tag = conformer_online_wenetspeech-zh-16k
       [2022-05-14 04:56:13,087] [    INFO] - File /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar.gz md5        checking...
       [2022-05-14 04:56:17,542] [    INFO] - Use pretrained model stored in: /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.  0.0a.model.tar
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar/model.yaml
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar/exp/               chunk_conformer/checkpoints/avg_10.pdparams
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar/exp/               chunk_conformer/checkpoints/avg_10.pdparams
       [2022-05-14 04:56:17,852] [    INFO] - start to create the stream conformer asr engine
       [2022-05-14 04:56:17,863] [    INFO] - model name: conformer_online
       [2022-05-14 04:56:22,756] [    INFO] - create the transformer like model success
       [2022-05-14 04:56:22,758] [    INFO] - Initialize ASR server engine successfully.
       INFO:     Started server process [4242]
       [2022-05-14 04:56:22] [INFO] [server.py:75] Started server process [4242]
       INFO:     Waiting for application startup.
       [2022-05-14 04:56:22] [INFO] [on.py:45] Waiting for application startup.
       INFO:     Application startup complete.
       [2022-05-14 04:56:22] [INFO] [on.py:59] Application startup complete.
       INFO:     Uvicorn running on http://0.0.0.0:8090 (Press CTRL+C to quit)
       [2022-05-14 04:56:22] [INFO] [server.py:211] Uvicorn running on http://0.0.0.0:8090 (Press CTRL+C to quit)
    
  • Python API 注意: 默认部署在 cpu 设备上,可以通过修改服务配置文件中 device 参数部署在 gpu 上。

    # 在 PaddleSpeech/demos/streaming_asr_server 目录
    from paddlespeech.server.bin.paddlespeech_server import ServerExecutor
    
    server_executor = ServerExecutor()
    server_executor(
        config_file="./conf/ws_conformer_wenetspeech_application", 
        log_file="./log/paddlespeech.log")
    

    输出:

       [2022-05-14 04:56:13,086] [    INFO] - create the online asr engine instance
       [2022-05-14 04:56:13,086] [    INFO] - paddlespeech_server set the device: cpu
       [2022-05-14 04:56:13,087] [    INFO] - Load the pretrained model, tag = conformer_online_wenetspeech-zh-16k
       [2022-05-14 04:56:13,087] [    INFO] - File /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar.gz md5        checking...
       [2022-05-14 04:56:17,542] [    INFO] - Use pretrained model stored in: /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.  0.0a.model.tar
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar/model.yaml
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar/exp/               chunk_conformer/checkpoints/avg_10.pdparams
       [2022-05-14 04:56:17,543] [    INFO] - /root/.paddlespeech/models/conformer_online_wenetspeech-zh-16k/asr1_chunk_conformer_wenetspeech_ckpt_1.0.0a.model.tar/exp/               chunk_conformer/checkpoints/avg_10.pdparams
       [2022-05-14 04:56:17,852] [    INFO] - start to create the stream conformer asr engine
       [2022-05-14 04:56:17,863] [    INFO] - model name: conformer_online
       [2022-05-14 04:56:22,756] [    INFO] - create the transformer like model success
       [2022-05-14 04:56:22,758] [    INFO] - Initialize ASR server engine successfully.
       INFO:     Started server process [4242]
       [2022-05-14 04:56:22] [INFO] [server.py:75] Started server process [4242]
       INFO:     Waiting for application startup.
       [2022-05-14 04:56:22] [INFO] [on.py:45] Waiting for application startup.
       INFO:     Application startup complete.
       [2022-05-14 04:56:22] [INFO] [on.py:59] Application startup complete.
       INFO:     Uvicorn running on http://0.0.0.0:8090 (Press CTRL+C to quit)
       [2022-05-14 04:56:22] [INFO] [server.py:211] Uvicorn running on http://0.0.0.0:8090 (Press CTRL+C to quit)
    

4. ASR 客户端使用方法

注意: 初次使用客户端时响应时间会略长

  • 命令行 (推荐使用)

    127.0.0.1 不能访问,则需要使用实际服务 IP 地址

    paddlespeech_client asr_online --server_ip 127.0.0.1 --port 8090 --input ./zh.wav
    

    使用帮助:

    paddlespeech_client asr_online --help
    

    参数:

    • server_ip: 服务端ip地址默认: 127.0.0.1。
    • port: 服务端口,默认: 8090。
    • input(必须输入): 用于识别的音频文件。
    • sample_rate: 音频采样率默认值16000。
    • lang: 模型语言默认值zh_cn。
    • audio_format: 音频格式默认值wav。
    • punc.server_ip 标点预测服务的ip。默认是None。
    • punc.server_port 标点预测服务的端口port。默认是None。

    输出:

      [2022-05-06 21:10:35,598] [    INFO] - Start to do streaming asr client
      [2022-05-06 21:10:35,600] [    INFO] - asr websocket client start
      [2022-05-06 21:10:35,600] [    INFO] - endpoint: ws://127.0.0.1:8390/paddlespeech/asr/streaming
      [2022-05-06 21:10:35,600] [    INFO] - start to process the wavscp: ./zh.wav
      [2022-05-06 21:10:35,670] [    INFO] - client receive msg={"status": "ok", "signal": "server_ready"}
      [2022-05-06 21:10:35,699] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,713] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,726] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,738] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,750] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,762] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,774] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:35,786] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,387] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,398] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,407] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,416] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,425] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,434] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,442] [    INFO] - client receive msg={'result': ''}
      [2022-05-06 21:10:36,930] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,938] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,946] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,954] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,962] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,970] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,977] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:36,985] [    INFO] - client receive msg={'result': '我认为跑'}
      [2022-05-06 21:10:37,484] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:37,492] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:37,500] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:37,508] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:37,517] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:37,525] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:37,532] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
      [2022-05-06 21:10:38,050] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,058] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,066] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,073] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,081] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,089] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,097] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,105] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
      [2022-05-06 21:10:38,630] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:38,639] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:38,647] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:38,655] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:38,663] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:38,671] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:38,679] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
      [2022-05-06 21:10:39,216] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,224] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,232] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,240] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,248] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,256] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,264] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,272] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
      [2022-05-06 21:10:39,885] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
      [2022-05-06 21:10:39,896] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
      [2022-05-06 21:10:39,905] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
      [2022-05-06 21:10:39,915] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
      [2022-05-06 21:10:39,924] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
      [2022-05-06 21:10:39,934] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
      [2022-05-06 21:10:44,827] [    INFO] - client final receive msg={'status': 'ok', 'signal': 'finished', 'result': '我认为跑步最重要的就是给我带来了身体健康', 'times': [{'w': '我', 'bg': 0.0, 'ed': 0.7000000000000001}, {'w': '认', 'bg': 0.7000000000000001, 'ed': 0.84}, {'w': '为', 'bg': 0.84, 'ed': 1.0}, {'w': '跑', 'bg': 1.0, 'ed': 1.18}, {'w': '步', 'bg': 1.18, 'ed': 1.36}, {'w': '最', 'bg': 1.36, 'ed': 1.5}, {'w': '重', 'bg': 1.5, 'ed': 1.6400000000000001}, {'w': '要', 'bg': 1.6400000000000001, 'ed': 1.78}, {'w': '的', 'bg': 1.78, 'ed': 1.9000000000000001}, {'w': '就', 'bg': 1.9000000000000001, 'ed': 2.06}, {'w': '是', 'bg': 2.06, 'ed': 2.62}, {'w': '给', 'bg': 2.62, 'ed': 3.16}, {'w': '我', 'bg': 3.16, 'ed': 3.3200000000000003}, {'w': '带', 'bg': 3.3200000000000003, 'ed': 3.48}, {'w': '来', 'bg': 3.48, 'ed': 3.62}, {'w': '了', 'bg': 3.62, 'ed': 3.7600000000000002}, {'w': '身', 'bg': 3.7600000000000002, 'ed': 3.9}, {'w': '体', 'bg': 3.9, 'ed': 4.0600000000000005}, {'w': '健', 'bg': 4.0600000000000005, 'ed': 4.26}, {'w': '康', 'bg': 4.26, 'ed': 4.96}]}
      [2022-05-06 21:10:44,827] [    INFO] - audio duration: 4.9968125, elapsed time: 9.225094079971313, RTF=1.846195765794957
      [2022-05-06 21:10:44,828] [    INFO] - asr websocket client finished : 我认为跑步最重要的就是给我带来了身体健康
    
  • Python API

    from paddlespeech.server.bin.paddlespeech_client import ASROnlineClientExecutor
    
    asrclient_executor = ASROnlineClientExecutor()
    res = asrclient_executor(
        input="./zh.wav",
        server_ip="127.0.0.1",
        port=8090,
        sample_rate=16000,
        lang="zh_cn",
        audio_format="wav")
    print(res)
    

    输出:

    [2022-05-06 21:14:03,137] [    INFO] - asr websocket client start
    [2022-05-06 21:14:03,137] [    INFO] - endpoint: ws://127.0.0.1:8390/paddlespeech/asr/streaming
    [2022-05-06 21:14:03,149] [    INFO] - client receive msg={"status": "ok", "signal": "server_ready"}
    [2022-05-06 21:14:03,167] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,181] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,194] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,207] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,219] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,230] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,241] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,252] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,768] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,776] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,784] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,792] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,800] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,807] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:03,815] [    INFO] - client receive msg={'result': ''}
    [2022-05-06 21:14:04,301] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,309] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,317] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,325] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,333] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,341] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,349] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,356] [    INFO] - client receive msg={'result': '我认为跑'}
    [2022-05-06 21:14:04,855] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:04,864] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:04,871] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:04,879] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:04,887] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:04,894] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:04,902] [    INFO] - client receive msg={'result': '我认为跑步最重要的'}
    [2022-05-06 21:14:05,418] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,426] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,434] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,442] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,449] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,457] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,465] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,473] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是'}
    [2022-05-06 21:14:05,996] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,006] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,013] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,021] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,029] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,037] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,045] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给'}
    [2022-05-06 21:14:06,581] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,589] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,597] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,605] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,613] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,621] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,628] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:06,636] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了'}
    [2022-05-06 21:14:07,188] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
    [2022-05-06 21:14:07,196] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
    [2022-05-06 21:14:07,203] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
    [2022-05-06 21:14:07,211] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
    [2022-05-06 21:14:07,219] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
    [2022-05-06 21:14:07,226] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康'}
    [2022-05-06 21:14:12,158] [    INFO] - client final receive msg={'status': 'ok', 'signal': 'finished', 'result': '我认为跑步最重要的就是给我带来了身体健康', 'times': [{'w': '我', 'bg': 0.0, 'ed': 0.7000000000000001}, {'w': '认', 'bg': 0.7000000000000001, 'ed': 0.84}, {'w': '为', 'bg': 0.84, 'ed': 1.0}, {'w': '跑', 'bg': 1.0, 'ed': 1.18}, {'w': '步', 'bg': 1.18, 'ed': 1.36}, {'w': '最', 'bg': 1.36, 'ed': 1.5}, {'w': '重', 'bg': 1.5, 'ed': 1.6400000000000001}, {'w': '要', 'bg': 1.6400000000000001, 'ed': 1.78}, {'w': '的', 'bg': 1.78, 'ed': 1.9000000000000001}, {'w': '就', 'bg': 1.9000000000000001, 'ed': 2.06}, {'w': '是', 'bg': 2.06, 'ed': 2.62}, {'w': '给', 'bg': 2.62, 'ed': 3.16}, {'w': '我', 'bg': 3.16, 'ed': 3.3200000000000003}, {'w': '带', 'bg': 3.3200000000000003, 'ed': 3.48}, {'w': '来', 'bg': 3.48, 'ed': 3.62}, {'w': '了', 'bg': 3.62, 'ed': 3.7600000000000002}, {'w': '身', 'bg': 3.7600000000000002, 'ed': 3.9}, {'w': '体', 'bg': 3.9, 'ed': 4.0600000000000005}, {'w': '健', 'bg': 4.0600000000000005, 'ed': 4.26}, {'w': '康', 'bg': 4.26, 'ed': 4.96}]}
    [2022-05-06 21:14:12,159] [    INFO] - audio duration: 4.9968125, elapsed time: 9.019973039627075, RTF=1.8051453881103354
    [2022-05-06 21:14:12,160] [    INFO] - asr websocket client finished
    

标点预测

1. 服务端使用方法

  • 命令行 注意: 默认部署在 cpu 设备上,可以通过修改服务配置文件中 device 参数部署在 gpu 上。

    在 PaddleSpeech/demos/streaming_asr_server 目录下启动标点预测服务
    paddlespeech_server start --config_file conf/punc_application.yaml
    

    使用方法:

    paddlespeech_server start --help
    

    参数:

    • config_file: 服务的配置文件。
    • log_file: log 文件。

    输出:

    [2022-05-02 17:59:26,285] [    INFO] - Create the TextEngine Instance
    [2022-05-02 17:59:26,285] [    INFO] - Init the text engine
    [2022-05-02 17:59:26,285] [    INFO] - Text Engine set the device: gpu:0
    [2022-05-02 17:59:26,286] [    INFO] - File /home/users/xiongxinlei/.paddlespeech/models/ernie_linear_p3_wudao-punc-zh/ernie_linear_p3_wudao-punc-zh.tar.gz md5 checking...
    [2022-05-02 17:59:30,810] [    INFO] - Use pretrained model stored in: /home/users/xiongxinlei/.paddlespeech/models/ernie_linear_p3_wudao-punc-zh/ernie_linear_p3_wudao-punc-zh.tar
    W0502 17:59:31.486552  9595 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 10.2, Runtime API Version: 10.2
    W0502 17:59:31.491360  9595 device_context.cc:465] device: 0, cuDNN Version: 7.6.
    [2022-05-02 17:59:34,688] [    INFO] - Already cached /home/users/xiongxinlei/.paddlenlp/models/ernie-1.0/vocab.txt
    [2022-05-02 17:59:34,701] [    INFO] - Init the text engine successfully
    INFO:     Started server process [9595]
    [2022-05-02 17:59:34] [INFO] [server.py:75] Started server process [9595]
    INFO:     Waiting for application startup.
    [2022-05-02 17:59:34] [INFO] [on.py:45] Waiting for application startup.
    INFO:     Application startup complete.
    [2022-05-02 17:59:34] [INFO] [on.py:59] Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:8190 (Press CTRL+C to quit)
    [2022-05-02 17:59:34] [INFO] [server.py:206] Uvicorn running on http://0.0.0.0:8190 (Press CTRL+C to quit)
    
  • Python API 注意: 默认部署在 cpu 设备上,可以通过修改服务配置文件中 device 参数部署在 gpu 上。

    # 在 PaddleSpeech/demos/streaming_asr_server 目录
    from paddlespeech.server.bin.paddlespeech_server import ServerExecutor
    
    server_executor = ServerExecutor()
    server_executor(
        config_file="./conf/punc_application.yaml", 
        log_file="./log/paddlespeech.log")
    

    输出

     [2022-05-02 18:09:02,542] [    INFO] - Create the TextEngine Instance
     [2022-05-02 18:09:02,543] [    INFO] - Init the text engine
     [2022-05-02 18:09:02,543] [    INFO] - Text Engine set the device: gpu:0
     [2022-05-02 18:09:02,545] [    INFO] - File /home/users/xiongxinlei/.paddlespeech/models/ernie_linear_p3_wudao-punc-zh/ernie_linear_p3_wudao-punc-zh.tar.gz md5 checking...
     [2022-05-02 18:09:06,919] [    INFO] - Use pretrained model stored in: /home/users/xiongxinlei/.paddlespeech/models/ernie_linear_p3_wudao-punc-zh/ernie_linear_p3_wudao-punc-zh.tar
     W0502 18:09:07.523002 22615 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 10.2, Runtime API Version: 10.2
     W0502 18:09:07.527882 22615 device_context.cc:465] device: 0, cuDNN Version: 7.6.
     [2022-05-02 18:09:10,900] [    INFO] - Already cached /home/users/xiongxinlei/.paddlenlp/models/ernie-1.0/vocab.txt
     [2022-05-02 18:09:10,913] [    INFO] - Init the text engine successfully
     INFO:     Started server process [22615]
     [2022-05-02 18:09:10] [INFO] [server.py:75] Started server process [22615]
     INFO:     Waiting for application startup.
     [2022-05-02 18:09:10] [INFO] [on.py:45] Waiting for application startup.
     INFO:     Application startup complete.
     [2022-05-02 18:09:10] [INFO] [on.py:59] Application startup complete.
     INFO:     Uvicorn running on http://0.0.0.0:8190 (Press CTRL+C to quit)
     [2022-05-02 18:09:10] [INFO] [server.py:206] Uvicorn running on http://0.0.0.0:8190 (Press CTRL+C to quit)
    

2. 标点预测客户端使用方法

注意: 初次使用客户端时响应时间会略长

  • 命令行 (推荐使用)

    127.0.0.1 不能访问,则需要使用实际服务 IP 地址

    paddlespeech_client text --server_ip 127.0.0.1 --port 8190 --input "我认为跑步最重要的就是给我带来了身体健康"
    

    输出

    [2022-05-02 18:12:29,767] [    INFO] - The punc text: 我认为跑步最重要的就是给我带来了身体健康。
    [2022-05-02 18:12:29,767] [    INFO] - Response time 0.096548 s.
    
  • Python3 API

    from paddlespeech.server.bin.paddlespeech_client import TextClientExecutor
    
    textclient_executor = TextClientExecutor()
    res = textclient_executor(
        input="我认为跑步最重要的就是给我带来了身体健康",
        server_ip="127.0.0.1",
        port=8190,)
    print(res)
    

    输出:

    我认为跑步最重要的就是给我带来了身体健康。
    

联合流式语音识别和标点预测

注意: 默认部署在 cpu 设备上,可以通过修改服务配置文件中 device 参数将语音识别和标点预测部署在不同的 gpu 上。

使用 streaming_asr_server.pypunc_server.py 两个服务,分别启动流式语音识别和标点预测服务。调用 websocket_client.py 脚本可以同时调用流式语音识别和标点预测服务。

1. 启动服务

注意:流式语音识别和标点预测通过配置文件配置到不同的显卡上
bash server.sh

2. 调用服务

  • 使用命令行:

    127.0.0.1 不能访问,则需要使用实际服务 IP 地址

    paddlespeech_client asr_online --server_ip 127.0.0.1 --port 8290 --punc.server_ip 127.0.0.1 --punc.port 8190 --input ./zh.wav
    

    输出:

    [2022-05-07 11:21:47,060] [    INFO] - asr websocket client start
    [2022-05-07 11:21:47,060] [    INFO] - endpoint: ws://127.0.0.1:8490/paddlespeech/asr/streaming
    [2022-05-07 11:21:47,080] [    INFO] - client receive msg={"status": "ok", "signal": "server_ready"}
    [2022-05-07 11:21:47,096] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,108] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,120] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,131] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,142] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,152] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,163] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,173] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,705] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,713] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,721] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,728] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,736] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,743] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:47,751] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:21:48,459] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:48,572] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:48,681] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:48,790] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:48,898] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:49,005] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:49,112] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:49,219] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:21:49,935] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:50,062] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:50,186] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:50,310] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:50,435] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:50,560] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:50,686] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:21:51,444] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:51,606] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:51,744] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:51,882] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:52,020] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:52,159] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:52,298] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:52,437] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:21:53,298] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:53,450] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:53,589] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:53,728] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:53,867] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:54,007] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:54,146] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:21:55,002] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:55,148] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:55,292] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:55,437] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:55,584] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:55,731] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:55,877] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:56,021] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:21:56,842] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:21:57,013] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:21:57,174] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:21:57,336] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:21:57,497] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:21:57,659] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:22:03,035] [    INFO] - client final receive msg={'status': 'ok', 'signal': 'finished', 'result': '我认为跑步最重要的就是给我带来了身体健康。', 'times': [{'w': '我', 'bg': 0.0, 'ed': 0.7000000000000001}, {'w': '认', 'bg': 0.7000000000000001, 'ed': 0.84}, {'w': '为', 'bg': 0.84, 'ed': 1.0}, {'w': '跑', 'bg': 1.0, 'ed': 1.18}, {'w': '步', 'bg': 1.18, 'ed': 1.36}, {'w': '最', 'bg': 1.36, 'ed': 1.5}, {'w': '重', 'bg': 1.5, 'ed': 1.6400000000000001}, {'w': '要', 'bg': 1.6400000000000001, 'ed': 1.78}, {'w': '的', 'bg': 1.78, 'ed': 1.9000000000000001}, {'w': '就', 'bg': 1.9000000000000001, 'ed': 2.06}, {'w': '是', 'bg': 2.06, 'ed': 2.62}, {'w': '给', 'bg': 2.62, 'ed': 3.16}, {'w': '我', 'bg': 3.16, 'ed': 3.3200000000000003}, {'w': '带', 'bg': 3.3200000000000003, 'ed': 3.48}, {'w': '来', 'bg': 3.48, 'ed': 3.62}, {'w': '了', 'bg': 3.62, 'ed': 3.7600000000000002}, {'w': '身', 'bg': 3.7600000000000002, 'ed': 3.9}, {'w': '体', 'bg': 3.9, 'ed': 4.0600000000000005}, {'w': '健', 'bg': 4.0600000000000005, 'ed': 4.26}, {'w': '康', 'bg': 4.26, 'ed': 4.96}]}
    [2022-05-07 11:22:03,035] [    INFO] - audio duration: 4.9968125, elapsed time: 15.974023818969727, RTF=3.1968427510477384
    [2022-05-07 11:22:03,037] [    INFO] - asr websocket client finished
    [2022-05-07 11:22:03,037] [    INFO] - 我认为跑步最重要的就是给我带来了身体健康。
    [2022-05-07 11:22:03,037] [    INFO] - Response time 15.977116 s.
    
  • 使用脚本调用

    127.0.0.1 不能访问,则需要使用实际服务 IP 地址

    python3 websocket_client.py --server_ip 127.0.0.1 --port 8290 --punc.server_ip 127.0.0.1 --punc.port 8190 --wavfile ./zh.wav
    

    输出:

    [2022-05-07 11:11:02,984] [    INFO] - Start to do streaming asr client
    [2022-05-07 11:11:02,985] [    INFO] - asr websocket client start
    [2022-05-07 11:11:02,985] [    INFO] - endpoint: ws://127.0.0.1:8490/paddlespeech/asr/streaming
    [2022-05-07 11:11:02,986] [    INFO] - start to process the wavscp: ./zh.wav
    [2022-05-07 11:11:03,006] [    INFO] - client receive msg={"status": "ok", "signal": "server_ready"}
    [2022-05-07 11:11:03,021] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,034] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,046] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,058] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,070] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,081] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,092] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,102] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,629] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,638] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,645] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,653] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,661] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,668] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:03,676] [    INFO] - client receive msg={'result': ''}
    [2022-05-07 11:11:04,402] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:04,510] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:04,619] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:04,743] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:04,849] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:04,956] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:05,063] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:05,170] [    INFO] - client receive msg={'result': '我认为,跑'}
    [2022-05-07 11:11:05,876] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:06,019] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:06,184] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:06,342] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:06,537] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:06,727] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:06,871] [    INFO] - client receive msg={'result': '我认为,跑步最重要的。'}
    [2022-05-07 11:11:07,617] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:07,769] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:07,905] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:08,043] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:08,186] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:08,326] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:08,466] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:08,611] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是。'}
    [2022-05-07 11:11:09,431] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:09,571] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:09,714] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:09,853] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:09,992] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:10,129] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:10,266] [    INFO] - client receive msg={'result': '我认为,跑步最重要的就是给。'}
    [2022-05-07 11:11:11,113] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:11,296] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:11,439] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:11,582] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:11,727] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:11,869] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:12,011] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:12,153] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了。'}
    [2022-05-07 11:11:12,969] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:11:13,137] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:11:13,297] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:11:13,456] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:11:13,615] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:11:13,776] [    INFO] - client receive msg={'result': '我认为跑步最重要的就是给我带来了身体健康。'}
    [2022-05-07 11:11:18,915] [    INFO] - client final receive msg={'status': 'ok', 'signal': 'finished', 'result': '我认为跑步最重要的就是给我带来了身体健康。', 'times': [{'w': '我', 'bg': 0.0, 'ed': 0.7000000000000001}, {'w': '认', 'bg': 0.7000000000000001, 'ed': 0.84}, {'w': '为', 'bg': 0.84, 'ed': 1.0}, {'w': '跑', 'bg': 1.0, 'ed': 1.18}, {'w': '步', 'bg': 1.18, 'ed': 1.36}, {'w': '最', 'bg': 1.36, 'ed': 1.5}, {'w': '重', 'bg': 1.5, 'ed': 1.6400000000000001}, {'w': '要', 'bg': 1.6400000000000001, 'ed': 1.78}, {'w': '的', 'bg': 1.78, 'ed': 1.9000000000000001}, {'w': '就', 'bg': 1.9000000000000001, 'ed': 2.06}, {'w': '是', 'bg': 2.06, 'ed': 2.62}, {'w': '给', 'bg': 2.62, 'ed': 3.16}, {'w': '我', 'bg': 3.16, 'ed': 3.3200000000000003}, {'w': '带', 'bg': 3.3200000000000003, 'ed': 3.48}, {'w': '来', 'bg': 3.48, 'ed': 3.62}, {'w': '了', 'bg': 3.62, 'ed': 3.7600000000000002}, {'w': '身', 'bg': 3.7600000000000002, 'ed': 3.9}, {'w': '体', 'bg': 3.9, 'ed': 4.0600000000000005}, {'w': '健', 'bg': 4.0600000000000005, 'ed': 4.26}, {'w': '康', 'bg': 4.26, 'ed': 4.96}]}
    [2022-05-07 11:11:18,915] [    INFO] - audio duration: 4.9968125, elapsed time: 15.928460597991943, RTF=3.187724293835709
    [2022-05-07 11:11:18,916] [    INFO] - asr websocket client finished : 我认为跑步最重要的就是给我带来了身体健康