使用SpeechRecognition和vosk处理ASR

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)

运行结果:

只是这个库好像没有标点恢复功能,百度的那个有标点恢复;

Vosk 是一个开源的语音识别工具包,支持多种语言,包括 Java使用 Vosk 进行语音识别,需要按照以下步骤进行操作: 1. 下载 VoskJava 绑定库,并将其导入到 Java 项目中。 2. 下载 Vosk 的语音模型,可以从官方网站下载或者使用其他适合的语音模型。 3. 编写 Java 代码,读取音频文件并调用 Vosk 库中的方法进行语音识别。 4. 对识别结果进行处理和分析。 下面是一个简单的 Java 代码示例,实现了基于 Vosk语音识别功能: ```java import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import org.vosk.Model; import org.vosk.Recognizer; import org.vosk.SpeechRecognitionResult; public class VoskExample { public static void main(String[] args) throws Exception { // 加载语音模型 Model model = new Model("model_path"); // 创建语音识别器 Recognizer recognizer = new Recognizer(model); // 读取音频文件 InputStream inputStream = new FileInputStream(new File("audio_file_path")); byte[] buffer = new byte[1024]; int bytesRead; // 开始语音识别 recognizer.recognizerStart(); while ((bytesRead = inputStream.read(buffer)) > -1) { // 接收音频数据并进行识别 recognizer.recognize(buffer, bytesRead); } // 结束语音识别 recognizer.recognizeFinalize(); // 获取识别结果 SpeechRecognitionResult result = recognizer.getResult(); System.out.println(result.getText()); // 释放资源 recognizer.close(); } } ``` 需要注意的是,Vosk语音识别功能需要一定的计算资源和时间,识别的准确率也会受到多种因素的影响,如音频质量、语音模型的质量等。因此,在实际应用中需要进行充分的测试和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值