跳转至

语音识别

语音识别,也被称为自动语音识别(Automatic Speech Recognition,ASR),是一种让计算机 “听懂” 人类语音并将其转换为文字或执行相应指令的技术。

原理

  • 特征提取:对输入的语音信号进行预处理,如降噪、分帧等,然后提取能够表征语音特征的参数,如梅尔频率倒谱系数(MFCC)等,将语音信号转化为计算机能够处理的特征向量序列。
  • 声学模型:利用大量的语音数据和机器学习算法,建立声学模型。它可以学习语音特征与对应音素或音节之间的统计关系,能够根据输入的语音特征向量,计算出最可能的音素或音节序列。
  • 语言模型:语言模型用于描述语言的语法、语义和统计规律。它可以根据已识别出的单词或短语,预测下一个可能出现的单词,从而对声学模型的输出进行校正和补充,提高识别的准确性。
  • 解码:将声学模型和语言模型的信息结合起来,通过搜索算法在所有可能的结果中找到最符合两种模型的路径,即最优的文字序列,完成语音到文字的转换。

运行实例

OriginMan使用到的ASR实现方式是通过将录音音频进行降噪处理,然后传输给大模型网关技术,通过网关模型将音频解析成文字。

基于python

首先可以使用一个Python示例体验一下ASR。

cd /userdata/dev_ws/src/originman/originman_pydemo/audio
python3 audio_asr.py

在audio_asr.py中默认识别的是其目录下的test.py音频,如果你没有进行录音操作,可以直接更改

input_audio_file = 'test.wav'  --> input_audio_file = 'prompt.wav'

此时将会识别prompt.wav的内容。

此时将会看到如下终端信息:

root@ubuntu:/userdata/dev_ws/src/originman/originman_pydemo/audio# python3 audio_asr.py 
采样率: 16000, 时长: 0.84 识别结果:
我在。

而同样可以播放音频的内容来验证内容,test_audio会对prompt.wav和test.wav内容进行录音和播放。

python3 test_audio.py

基于ROS2话题

既然可以使用Python实现,那必然可以用ROS2实现啦! 同时可以支持使用话题发布识别到的文本数据。

打开一个终端,执行以下指令:

ros2 run originman_llm_chat text_to_speech_node

此时可以看到log中输出相关的使用日志示例:

 ros2 run originman_llm_chat asr_node 
[INFO] [1740719779.381260749] [asr_node]: ASR 节点已启动,开始录音和识别...
[INFO] [1740719779.389336500] [asr_node]: 收到监听状态,开始聆听中...
[INFO] [1740719779.390696125] [asr_node]: 开始录音和识别...
[INFO] [1740719782.430083504] [asr_node]: 录制音频: test.wav
[INFO] [1740719782.454768675] [asr_node]: 采样率: 16000, 时长: 3.0 [INFO] [1740719783.690654553] [asr_node]: 识别到用户语音: '你好,你是谁?'
[INFO] [1740719783.693256470] [asr_node]: 已发布文本到 /text_input: '你好,你是谁?'

另外打开一个终端,输入提示内容

ros2 topic echo /text_input

image-20220923124819442

Attention

需要先完成联网操作,联网步骤请参考网络配置与远程开发方法

图片1