语音识别操作流程
- 使用音频软件或手机录制语音指令音频文件
- 执行语音格式转换及声道合并代码块
- 导入ASR工具包及相关工具类
- 加载模型,指定语音路径,进行语音识别
录制语音文件
可以通过PC端录音软件或者手机录制语音文件,文件类型需统一转换为wav格式,合并为单声道
- 通过录音软件Audacity录制
- 通过手机录制的mp3或m4a格式的音频需要转成wav格式可执行以下转换代码:
import os,sys # 导入操作系统相关模块
folder = 'audiofiles/' # 定义文件夹
from pydub import AudioSegment # 从pydub音频工具库中导入AudioSegment工具类
formats_to_convert = ['.m4a','.mp3'] # 定义需要被转换的语音文件格式
for (dirpath, dirnames, filenames) in os.walk("audiofiles/"):# 从指定文件夹中遍历文件夹路径、名称、及文件名
for filename in filenames: #遍历所有音频文件
if filename.endswith(tuple(formats_to_convert)):# 判断如果音频文件后缀是以m4a或者mp3结尾的
filepath = dirpath + '/' + filename # 定义音频文件完整的路径包含文件名
(path, file_extension) = os.path.splitext(filepath) # 将文件路径进行切分
file_extension_final = file_extension.replace('.', '') # 用空来替换“.”,拿到干净的MP3或者m4a字符
try:
track = AudioSegment.from_file(filepath,file_extension_final) # 调用AudioSegment工具类中的from_file函数进行语音处理
wav_filename = filename.replace(file_extension_final, 'wav')# 将mp3/m4a后缀替换成wav后缀
wav_path = dirpath + '/' + wav_filename#重新组成音频路径
print('CONVERTING: ' + str(filepath))
file_handle = track.export(wav_path, format='wav')#将格式转换后的音频文件进行导出
# os.remove(filepath)
except:
print("ERROR CONVERTING " + str(filepath))
合并为单声道文件
将转化好的wav格式的音频文件合并为nemo可识别的单声道语音文件,可执行以下代码块:
from pydub import AudioSegment
sound = AudioSegment.from_wav("audiofiles/Bob.wav")
sound = sound.set_channels(1)
sound.export("audiofiles/Bob_mono.wav", format="wav")
导入nemo工具包及asr工具类
import numba
import nemo
import nemo.collections.asr as nemo_asr
# nemo.__version__
# nemo_asr.models.EncDecCTCModel.list_available_models()
加载Quartznet中文版预训练模型
quartznet =
nemo_asr.models.EncDecCTCModel.from_pretrained(model_name="QuartzNet15x5Base-En")
测试模型识别效果
quartznet.transcribe(paths2audio_files=["audiofiles/Bob_mono.wav"])
(注:内容来源于NVADA的讲座)