流式语音识别概述-paddlespeech

语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术。在智能问答中,可通过语音接入用户query,实现问答。

在流式语音识别系统中,客户端不断地将音频数据实时传输至服务器,而服务器则负责对这些数据进行即时语音识别,并将识别出的文本结果实时回传给客户端。

PaddleSpeech,采用WebSocket协议来确保客户端与服务器之间能够长时间稳定地保持连接。WebSocket协议以其支持全双工通信的特性而著称,在同一网络连接上,客户端和服务器可以同时发送和接收消息,无需像传统HTTP请求那样频繁地建立和断开连接。

流式 TTS 服务支持 http 和 webscoket 两种协议。

http 支持流式返回,可以满足目前的流式 TTS 的方案,即请求一次,返回流式数据,响应返回结束会自动断开连接。

而 websocket 支持双工,适用于需要长连接的场景,也可应用于目前的流式 TTS 的方案,可以在一次连接中请求多次,相比 http 请求多次而言,可减少建立连接的次数。

除此之外,流式 ASR 使用的是 websocket 协议,使用 webscoket 协议启动服务,可以同时启动包含流式 ASR 和流式 TTS 的服务。

访问流式 TTS 服务流程图(左:访问 http 服务;右:访问 websocket 服务)

客户端操作:

  1. client 端向 server 端发送 http 请求(在这个过程中,client 端会先向 server 端发送建立连接请求并和 server 端建立连接)

  2. server 端收到请求后先检查字段内容是否有效,然后去引擎池取对应的引擎

  3. 引擎进行推理生成合成音频,将其封装成设计的响应格式,返回响应到 client 端,并自动断开连接

  4. client 端收到响应后,对其结果进行后处理(保存音频操作)

    复制代码
     async with websockets.connect('ws://ip:8090/paddlespeech/asr/streaming') as ws:
        
         # 第一次调用需要发送开始指令
         audio_info = json.dumps({"name": "test.wav", "signal": "start", "nbest": 1})
         await ws.send(audio_info)
         msg = await ws.recv()
         # {'status': 'ok', 'signal': 'server_ready'}
         msg = json.loads(msg)
         print(msg)
         # 输出内容长度
         length = 0
       
         # 计算在给定的采样率(RATE)、数据块大小(CHUNK)和录制时长(RECORD_SECONDS)下,需要读取多少个数据块来完成整个录制过程。
         print(int(RATE / CHUNK * RECORD_SECONDS))
         for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
             data = stream.read(CHUNK)
             await ws.send(data)
             msg = await ws.recv()
             # {'result': ''}
             msg = json.loads(msg)
         .........
    
         # 发送结束指令
         audio_info = json.dumps({"name": "test.wav", "signal": "end", "nbest": 1})
         await ws.send(audio_info)
         msg = await ws.recv()
         # {'status': 'ok', 'signal': 'finished', 'result': '', 'times': [{'w': '', 'bg': 0.0, 'ed': 0.68}, ...]}
         msg = json.loads(msg)
         if tag and len(msg['result']) > 0:
             punc_text = punc(msg['result'])
             msg['result'] = punc_text
         print(msg['result'])

服务端:

  1. 准备服务对应的配置参数文件,文件内包含该服务启动使用的模型相关信息和服务端口,引擎选择的相关信息

  2. 根据配置文件中引擎的选择将对应的引擎加入到引擎池中(该步骤的目的是为了使得启动的服务入口可以支持多个语音服务)

  3. 根据配置文件中的模型配置对上述对应的引擎进行初始化

  4. 使用 fastapi 和 uvicorn 启动服务

    from paddlespeech.server.bin.paddlespeech_server import ServerExecutor

    server_executor = ServerExecutor()
    server_executor(
    config_file="./conf/application.yaml",
    log_file="./log/paddlespeech.log")

注:部分内容摘自百度飞桨平台。

相关推荐
2501_938140074 分钟前
做内容很省心,2026好用AI笔记,支持抖音小红书视频无水印保存
人工智能
sell-cloud3 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国4 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI5 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区5 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris7 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy7 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V7 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI7 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技7 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人