SpeechRecognition可以支持多种模型语音转文字,感觉vosk还不错,使用起来也简单一些;百度也有PaddleSpeech,但是安装起来太麻烦,不是这个库版本不对就是那个库有问题,用起来不方便;
安装SpeechRecognition库:
pip install SpeechRecognition
安装vosk库:
pip install vosk
使用vosk库还需要下载对应的模型,去官网VOSK Models下载:
中文的有3个模型,模型小的运行快,准确度没有大的好,选一个下载完zip解压就行,代码里配置目录和模型,为了方便直接解压到项目目录里了:
另外需要wav语音测试文件,可以自己录音或者去在线免费文字转语音 - TTSMaker官网 | 马克配音 制造点wav语音文件;
demo:
#!/usr/bin/env python3
# coding = utf-8
"""
# Project: workspace_py
# File: test_speech_recognition_vosk.py
# Author: FlyLikeButterfly
# Time: 2024/4/15 11:05
"""
import speech_recognition as sr
from vosk import Model
r = sr.Recognizer()
r.vosk_model = Model(model_path='vosk_models/vosk-model-small-cn-0.22', model_name='vosk-model-small-cn-0.22')
# r.vosk_model = Model(model_path='vosk_models/vosk-model-cn-0.22', model_name='vosk-model-cn-0.22')
# r.vosk_model = Model(model_path='vosk_models/vosk-model-cn-kaldi-multicn-0.15', model_name='vosk-model-cn-kaldi-multicn-0.15')
with sr.AudioFile('test_24000_16.wav') as source:
audio = r.record(source)
result = r.recognize_vosk(audio, language='zh-cn')
print(result)
运行结果:
返回结果是一个string字符串,可以用json转一下:
结果:
注意支持的文件只有3种格式:WAV/AIFF/FLAC,使用其他格式的会报错:
另外SpeechRecognition也可以直接使用麦克风的录音:
with sr.Microphone() as mic:
audio = r.listen(mic, timeout=3, phrase_time_limit=3)
result = r.recognize_vosk(audio, language='zh-cn')
print(result)
但是这个还需要安装pyaudio模块;
这个SpeechRecognition似乎没有直接提供读取bytes音频数据的接口,不过r.record方法和r.listen方法的返回值都是AudioData类,我们可以直接实例化AudioData给recognize_vosk()方法用,这个类的构造方法解释如下:
第一个参数,可以使用音频的bytes数据,wav和pcm都可以;
第二个参数,是音频的采样率Hz,8000Hz、16000Hz等等;
第三个参数,是采样位宽,单位是字节,16位采样是2个字节,8位采样是1字节,支持1-4;
测试代码块:
with open('test_24000_16.wav', 'rb') as wav_file:
wav_data = wav_file.read()
wav_source = sr.AudioData(wav_data, 24000, 2)
wav_result = r.recognize_vosk(wav_source, language='zh-cn')
print(wav_result)
with open('test_8000_16.pcm', 'rb') as pcm_file:
pcm_data = pcm_file.read()
pcm_source = sr.AudioData(pcm_data, 8000, 2)
pcm_result = r.recognize_vosk(pcm_source, language='zh-cn')
print(pcm_result)
运行结果:
只是这个库好像没有标点恢复功能,百度的那个有标点恢复;