立即注册
查看: 7941|回复: 7

[转载] 讯飞语音Linux arm平台开发快速入门

已绑定手机
发表于 2016-8-11 14:35:59 | 显示全部楼层 |阅读模式 来自 安徽省合肥市
前言
      我在一家做智能家居的公司上班,做嵌入式应用程序开发,前段时间接到一个任务,实现我们公司一个linux arm嵌入式设备的语音交互(人机对话,也就是聊天)和命令控制(通过语音控制家里的其他设备)功能,要实现这两个功能,我的程序必须在语音识别上很准确,于是我先想到去寻找开源的语音识别代码,确实网上有不少,我也按照网上的教程用开源的软件做了测试,但是识别率不足50%,这样的识别率当然不可能用于产品上, 最终我选择了讯飞,识别率那真是高,既然选择了讯飞,那我接下来分享一下接触讯飞一周多以来,在嵌入式方面的入门经验,也许你看了这篇帖子后,就能快速入门。
正文:
      1. 在讯飞官网注册账号,简单点用第三方平台账号登录也可以, 然后注册一个应用,拿到一个appid。
      2. 既然用的人家的语音识别,那肯定是要下载sdk,讯飞提供的 linux的sdk 有如下图这些:
          file:///C:\Users\hongxin\AppData\Roaming\Tencent\Users\1271715964\QQ\WinTemp\RichOle\QEE@8Z0GIBL28O(E$74UKCD.png

      3. 我用到这几个sdk: 《语音识别》和《在线语音合成》
                                         《语音识别》这也是在线的, 是把用户的语音转换成文字。
                                        《在线语音合成》把文字转换成语音。
          就这两个sdk包,就能满足我要实现的那两个功能。
          在这里 解释一下 官网提供的 两种下载方式,一种是 单个服务sdk下载,一种是组合服务sdk下载。两者方式下载下来的库文件都是一样的,不一样的是呈现在我们面前的demo和接口数不一样, 单个的就只有单个demo, 多个的就有多个demo,但是都是调用同样的库文件, 自己下载下来看下就知道了。 你下载的时候就下载组合sdk吧,就是多勾选几个下载, 就叫组合sdk, 这样方便。
      4. 人机对话 功能的实现, 这里以下载的组合sdk方式为例, 且是在PC端:
            备注:arm嵌入式端  , 只需要向讯飞提交申请,编译一个你的平台的库文件就可以了,详情可以在群里咨询。
            
          4.1 先调用 iat_sample.c中的接口,把语音转换成文字,注意:讯飞不提供windows , linux平台的录音接口, 所以录音部分得你自己做, 我是用开源录音和播放于一身的arecord。注意这个录音软件的参数设置,在linux输入 arecord -D hw:0,0 -f S16_LE -V mono -r8000 -c 2 -t wav  mytest.wav, 其中-r表示频率,讯飞说要把评论配置成16000 识别更加准确, 可是我这里测试, 要设置成8000才准确, 我也不知道原因, 暂时就这样吧。 至于arecord其他参数什么含义, 自己网上搜下。
注意: iat_sample.c中把语音转换成文字, 转换成的文字有两种结果, 一种是把语音直接转换成文字, 比如你说话的内容是“你叫什么名字“, 而得到返回的文字结果是”你叫什么名字“, 还有就是同样语音内容为”你叫什么名字“, 返回结果为”秘密,请换个话题嘛“, 前者是直译, 后者是智能回答, 但是这都是调用iat_sample.c中的同样一个接口run_iat,而结果的不同取决于run_iat("wav/mytest.wav", session_begin_params)接口中session_begin_params参数的赋值不同。直译应赋值方式为
const char* session_begin_params="sub = iat, domain = iat, language = zh_ch, accent = mandarin, sample_rate = 16000, result_type = plain, result_encoding = utf8";      
而智能回答的赋值方式为
const char* session_begin_params        ="sub = iat, domain = iat, language = zh_ch, accent = mandarin, sample_rate = 16000,sch=1, nlp_version=2.0,result_type = json, result_encoding = utf8";  
注意result_encoding = utf8,
因为接下来的文字转换成语音, 讯飞提供的接口是识别utf8格式的汉字, 所以你的.c文件也要是utf8格式的, 你的整个工程的其他文件可以不是utf8格式, 但是你调用文字转换成语音接口的这个.c文件一定要是utf8格式。不然不能把文字转换成语音。
         4.2 文字转语音
               调用tts_sample.c中的接口,这里要注意如上所说的.c文件的格式。接口会把识别的文字转换成对应的语音。你用播放软件把这个wav文件播放出来就行了。
         4.3 命令控制
              还没有做,因为要用到讯飞的私有语义功能, 而我的私有语义功能暂未开通。所以文章就只能写到这里了。
原文链接:https://bbs.xfyun.cn/forum.php?mod=viewthread&tid=15642&extra=page%3D2

已实名认证
发表于 2016-8-12 09:47:42 | 显示全部楼层 来自 福建省厦门市
讯飞语音做得也很不错的呢....
已绑定手机
发表于 2016-8-18 18:49:23 | 显示全部楼层 来自 安徽省合肥市巢湖市
昨天和老师一起去讯飞参观了一下 ,有点震撼,叮咚音响做为主控实现智能家居控制做的还是不错的
已绑定手机
 楼主| 发表于 2016-8-24 15:14:59 | 显示全部楼层 来自 安徽省合肥市
baxk 发表于 2016-8-12 09:47
讯飞语音做得也很不错的呢....

有用过它的SDK吗?
已绑定手机
 楼主| 发表于 2016-8-24 15:15:32 | 显示全部楼层 来自 安徽省合肥市
springfall 发表于 2016-8-18 18:49
昨天和老师一起去讯飞参观了一下 ,有点震撼,叮咚音响做为主控实现智能家居控制做的还是不错的

是哦~参观感受不错咯~
已绑定手机
发表于 2016-9-18 18:26:08 | 显示全部楼层 来自 安徽省合肥市巢湖市
吃鲸的小鲤鱼 发表于 2016-8-24 15:15
是哦~参观感受不错咯~

我是学会计的
发表于 2017-2-16 10:32:33 | 显示全部楼层 来自 上海市
我的ARM板上只能用aplay播放,不能用arecord录音,这是为什么呢?
已绑定手机
发表于 2022-12-29 08:24:41 | 显示全部楼层 来自 广东省深圳市
讯飞语音
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表