公司網(wǎng)站上榮譽(yù)墻怎么做西安網(wǎng)站建設(shè)制作公司
SpeechRecognition可以支持多種模型語(yǔ)音轉(zhuǎn)文字,感覺vosk還不錯(cuò),使用起來(lái)也簡(jiǎn)單一些;百度也有PaddleSpeech,但是安裝起來(lái)太麻煩,不是這個(gè)庫(kù)版本不對(duì)就是那個(gè)庫(kù)有問題,用起來(lái)不方便;
安裝SpeechRecognition庫(kù):
pip install SpeechRecognition
安裝vosk庫(kù):
pip install vosk
使用vosk庫(kù)還需要下載對(duì)應(yīng)的模型,去官網(wǎng)VOSK Models下載:
中文的有3個(gè)模型,模型小的運(yùn)行快,準(zhǔn)確度沒有大的好,選一個(gè)下載完zip解壓就行,代碼里配置目錄和模型,為了方便直接解壓到項(xiàng)目目錄里了:
另外需要wav語(yǔ)音測(cè)試文件,可以自己錄音或者去在線免費(fèi)文字轉(zhuǎn)語(yǔ)音 - TTSMaker官網(wǎng) | 馬克配音?制造點(diǎn)wav語(yǔ)音文件;
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 Modelr = 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)
運(yùn)行結(jié)果:
返回結(jié)果是一個(gè)string字符串,可以用json轉(zhuǎn)一下:
?結(jié)果:
注意支持的文件只有3種格式:WAV/AIFF/FLAC,使用其他格式的會(huì)報(bào)錯(cuò):
另外SpeechRecognition也可以直接使用麥克風(fēng)的錄音:
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)
但是這個(gè)還需要安裝pyaudio模塊;
這個(gè)SpeechRecognition似乎沒有直接提供讀取bytes音頻數(shù)據(jù)的接口,不過r.record方法和r.listen方法的返回值都是AudioData類,我們可以直接實(shí)例化AudioData給recognize_vosk()方法用,這個(gè)類的構(gòu)造方法解釋如下:
第一個(gè)參數(shù),可以使用音頻的bytes數(shù)據(jù),wav和pcm都可以;
第二個(gè)參數(shù),是音頻的采樣率Hz,8000Hz、16000Hz等等;
第三個(gè)參數(shù),是采樣位寬,單位是字節(jié),16位采樣是2個(gè)字節(jié),8位采樣是1字節(jié),支持1-4;
測(cè)試代碼塊:
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)
運(yùn)行結(jié)果:
只是這個(gè)庫(kù)好像沒有標(biāo)點(diǎn)恢復(fù)功能,百度的那個(gè)有標(biāo)點(diǎn)恢復(fù);