zoukankan      html  css  js  c++  java
  • 科大讯飞离线语音识别安装与运行

    先从官网下载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

  • 相关阅读:
    Q12:app在iPhone上执行正常,iPad上出现黑边问题解决方式
    SPOJ 104 Highways 最小生成树计数
    微信支付 常见报错
    oracle创建表空间、用户、和权限配置
    Android Matrix图像变换处理
    java项目部署到weblogic上后,某些浏览器无法取得session值
    简介redis以及ubuntu和windows下怎样安装redis和配置文件具体解释
    Melo作为程序猿的2016年
    软件架构,WEB
    软件架构,WEB
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/6086853.html
Copyright © 2011-2022 走看看