科大讯飞离线语音识别安装与运行

Posted Not-Bad

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了科大讯飞离线语音识别安装与运行相关的知识,希望对你有一定的参考价值。

先从官网下载sdk,有点不懂下载的逻辑..

文件解析:

bin/inc下有四个头文件:msp_errors.h  msp_types.h  qisr.h  qtts.h

msp_errors.h  msp_types.h为通用数据结构的头文件,qisr.h是语音识别用的头文件,qtts.h是语音合成用的头文件。

这是sdk中原代的解释:

1.doc目录下存放开发文档等;

2.lib目录下存放SDK需要调用的动态库以及需要引用的头文件。

3.example目录下存放提供的示例demo,每个例子下都有Makefile文件,在当前目录make即可;

4.bin目录下存放符合标准的语音文件样例、配置文件和资源文件等,make之后的example可执行程序也会拷贝至此,请在此目录下运行,否则会运行失败;

5.prj目录下提供make脚本,可以快速编译例子。

 然后我按照它的指示,在example下的asrdome下make,然而报错:找不到 lasound,去看它的makefile文件,其中需要这个库,在网上搜了一下,解决方案如下:

sudo apt-get install alsa-base alsa-utils alsa-source libasound2-dev

重新编译,又报错,警告:检测到时钟错误。您的创建可能是不完整的。

将之前编译创建的 “asrdemo.o” 删除 继续,编译成功。

然后再bin下生成了"asrdemo"可执行文件,在bin目录下运行(./asrdemo)

运行成功。

然而 输出的结果是一堆代码,里面夹杂识别的话。在网上查了一下,代码的函数逻辑大概如下

1.先要调用QISRInit()函数,参数是自己的appid,每个SDK都是注册才能下载的,所以是唯一的,用来区分用户的,不同级别的用户每天可以使用SDK的次数有限制,毕竟人用的多了语音识别的性能肯定会下降;

2.之后就是把GrammarID,输入输出的参数param和调用状态返回值ret作为参数传入QISRSessionBegin()函数中进行初始化,返回值是sessionID,这个是后面所有函数的主要参数之一;

3.打开自己的音频文件,调用QISRAudioWrite()函数写入,可以分段也可以一次,第一个参数是sessionID,上面初始化函数返回的值,第二个参数是音频数据头指针,第三个参数是音频文件大小,第四个参数是音频发送的状态,表示发送完了没有,剩下两个是服务器端检测语音状态和识别状态的返回值;

4.调用QISRGetResult()函数获取识别的结果,第一个参数还是sessionID,第二个参数是输出识别的状态,第三个参数是与服务器交互的间隔时间,官方建议5000,我取为0,第四个参数是调用状态返回值ret,最后这个函数的返回值就是上面结果的json数据了

 

 

录制语音时,使用“ffmpeg”录音,简单方便,符合语音识别的要求。

讯飞语音对语音的要求如下:采样率16K或8KHz,采样位是16位,单声道,格式是PCM或WAV。自带的录音软件都是默认32位采样,只能用ffmpeg或自己写代码录制,ffmpeg命令如下:

ffmpeg -f alsa  -ar 16000 -ac 1 -i hw:0 lib.wav

 

以上是关于科大讯飞离线语音识别安装与运行的主要内容,如果未能解决你的问题,请参考以下文章

树莓派——科大讯飞离线语音识别

golang 使用科大讯飞进行语音合成与识别

GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音

重金求中科大讯飞Interphonic 5.0语音合成系统的详细安装步骤(对重金不感兴趣者勿扰)

树莓派怎么调用科大讯飞的语音库实现语音识别

语音从零之五用科大讯飞语音包实现语音打开已安装应用程序