企业站网页制作实训步骤,南阳网(网站).,上海建设局官方网站,自建团体电子商务网站建设成本文章目录 前言一、Vosk模型1.准备好所需要的语音包2.下载使用 二、使用示例1.文件读取示例2.结合麦克风演示 总结 前言
如何编译Vosk请参照之前的文章#xff0c;ubuntu编译kaldi和vosk
Vosk是语音识别开源框架#xff0c;支持二十种语言 - 中文#xff0c;英语#xff0… 文章目录 前言一、Vosk模型1.准备好所需要的语音包2.下载使用 二、使用示例1.文件读取示例2.结合麦克风演示 总结 前言
如何编译Vosk请参照之前的文章ubuntu编译kaldi和vosk
Vosk是语音识别开源框架支持二十种语言 - 中文英语印度英语德语法语西班牙语葡萄牙语俄语土耳其语越南语意大利语荷兰人加泰罗尼亚语阿拉伯, 希腊语, 波斯语, 菲律宾语乌克兰语, 哈萨克语, 瑞典语, 日语, 世界语, 印地语, 捷克语, 波兰语, 乌兹别克语, 韩国语, 塔吉克语。
Vosk还支持设备上离线语音识别 包括Raspberry PiAndroidiOS等API接口简单并且有多种语言支持同时会识别语义最终输出合理的语句。 |版本声明山河君未经博主允许禁止转载
一、Vosk模型
1.准备好所需要的语音包
在开始使用Vosk之前需要拥有语音识别的模型如图中拥有很多语音模型中文、英文、西班牙、印度等等Vosk模型库需要外网才可以下载
2.下载使用
下载并进行解压后如下图所示例如这里有简单英文、轻量级中文、和用于服务器处理的大型通用中文模型等根据需要进行下载
解压后放在对应目录下值得注意的是是整个解压后的文件夹而不是某一固定文件一定要放在对应位置不然使用时会直接崩溃连报错都没有。
二、使用示例
1.文件读取示例
首先语音文件和模型需要准备好示例中的语音文件是自己录下来的模型vosk-model-cn-0.22是中文模型
#include vosk_api.h
#include stdio.hint main() {FILE *wavin;char buf[3200];int nread, final;VoskModel *model vosk_model_new(vosk-model-cn-0.22);VoskRecognizer *recognizer vosk_recognizer_new(model, 16000.0);wavin fopen(test.wav, rb);fseek(wavin, 44, SEEK_SET);while (!feof(wavin)) {nread fread(buf, 1, sizeof(buf), wavin);final vosk_recognizer_accept_waveform(recognizer, buf, nread);if (final) {printf(%s\n, vosk_recognizer_result(recognizer));} else {printf(%s\n, vosk_recognizer_partial_result(recognizer));}}printf(%s\n, vosk_recognizer_final_result(recognizer));vosk_recognizer_free(recognizer);vosk_model_free(model);fclose(wavin);return 0;
}输出结果如下partial是短时输出text是识别语义后的输出
vosk_model_new:加载模型vosk_recognizer_new:创建语音识别实例vosk_recognizer_accept_waveform塞入语音数据pcm格式vosk_recognizer_result:获取识别器的完整识别结果vosk_recognizer_partial_result:返回当下识别结果如果没有识别到返回空
2.结合麦克风演示
#include stdio.h
#include stdlib.h
#include alsa/asoundlib.h
#include vosk_api.h
#include iostream
#include cstdio
#include memory
#include array#define SAMPLE_RATE 44100
#define BUFFER_SIZE 44100 * 2 * 2int main() {// 初始化 Vosk 模型VoskModel *model vosk_model_new(vosk-model-cn-0.22);VoskRecognizer *recognizer vosk_recognizer_new(model, SAMPLE_RATE);// 打开 ALSA 设备snd_pcm_t *pcm_handle;int ret snd_pcm_open(pcm_handle, default, SND_PCM_STREAM_CAPTURE, 0);ret snd_pcm_set_params(pcm_handle, SND_PCM_FORMAT_S16_LE, SND_PCM_ACCESS_RW_INTERLEAVED, 1, SAMPLE_RATE, 1, 1000000); // 1秒char buffer[BUFFER_SIZE];int final_result;while (1) {// 从麦克风读取音频数据int nread snd_pcm_readi(pcm_handle, buffer, BUFFER_SIZE / 2);if (nread 0) {snd_pcm_recover(pcm_handle, nread, 0);continue;}// 将音频数据传递给 Voskfinal_result vosk_recognizer_accept_waveform(recognizer, buffer, nread * 2);if (final_result) {printf(%s\n, vosk_recognizer_result(recognizer));} else {std::string strTest vosk_recognizer_partial_result(recognizer);printf(%s\n, strTest.c_str());}}printf(%s\n, vosk_recognizer_final_result(recognizer));// 清理snd_pcm_close(pcm_handle);vosk_recognizer_free(recognizer);vosk_model_free(model);return 0;
}识别到并且最终组成的语句如下 总结
轻量级、资源消耗小的嵌入式设备进行语音识别使用Vosk是一个不错的选择但是如果只是用于语音唤醒之类的实际上应该有更好的选择。
如果对您有所帮助请帮忙点个赞吧