本文将使用PocketSphinx来实现Android平台的离线语音识别

优点: 离线,不用联网 识别较准(大家都说99%  我觉得只有80%)

缺点: 自定义语音命令麻烦  只能小范围识别

网上看了很多例子 我跟你说 那都是坑  根本就是错误的教程...

不废话 开始教程:

1.先确定要识别的词组

我的需求是实现离线识别 以下词组

中文:  向前 向后 向左 向右

英文: FORWARD BACKWARD TURNLEFT TURNRIGHT

(很多这样的教程 好像基本没教怎么识别英文来着...)

2.生成并修改lm和dic文件

先生成中文的 新建一个txt文件  命名为 text.txt

并把 向前 向后 向左 向右这四个词写上去,然后保存..

如图

注意很多文章都说这样的格式 向前

这样的格式  我只想跟你说 你被坑了...  这样做出来的语音识别demo是没有任何识别反应的 真害人..

打开这个链接  在线转换lm文件  , 点击选择文件选择刚才的text.txt文件

然后点击 COMPILE KNOWLEDGE BASE  提交

然后分别打开这两个文件 查看内容    并分别复制内容到新建的text.dic和text.lm文件里, 保存  (如果乱码 请使用谷歌浏览器 或 修改浏览器显示编码)

例如 我的 text.dic文件文本内容为:(我本来是写向前 向后 向左 向右 现在你看 顺序乱了 我不知道这样的目的 我建议保留转换后的顺序 可能与优先级有关吧)

向前

向右

向后

向左

而text.lm的内容为

Language model created by QuickLM on Tue Nov 22 03:42:55 EST 2016

Copyright (c) 1996-2010 Carnegie Mellon University and Alexander I. Rudnicky

The model is in standard ARPA format, designed by Doug Paul while he was at MITRE.

The code that was used to produce this language model is available in Open Source.

Please visit http://www.speech.cs.cmu.edu/tools/ for more information

The (fixed) discount mass is 0.5. The backoffs are computed using the ratio method.

This model based on a corpus of 4 sentences and 6 words

\data\

ngram 1=6

ngram 2=8

ngram 3=4

\1-grams:

-0.7782 -0.3010

-0.7782 -0.2218

-1.3802 向前 -0.2218

-1.3802 向右 -0.2218

-1.3802 向后 -0.2218

-1.3802 向左 -0.2218

\2-grams:

-0.9031 向前 0.0000

-0.9031 向右 0.0000

-0.9031 向后 0.0000

-0.9031 向左 0.0000

-0.3010 向前 -0.3010

-0.3010 向右 -0.3010

-0.3010 向后 -0.3010

-0.3010 向左 -0.3010

\3-grams:

-0.3010 向前

-0.3010 向右

-0.3010 向后

-0.3010 向左

\end\

还有的说有什么UTF-8编码问题  我只想说 我没遇到 我用的Sublime Text3文本编辑器  你如果有问题 你换我这个文本编辑器试试

完成上面的然后 脑残的一步来了  手动找字典(拼音)

哪里来的拼音字典? 先去这里下载一个压缩文件

https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.7/然后找到 pocketsphinx-0.7.tar.gz 点击下载(下不动用迅雷)

下载好后解压

pocketsphinx-0.7\pocketsphinx-0.7\model\hmm\zh\tdt_sc_8k 为中文语言模型文件

pocketsphinx-0.7\model\lm\zh_CN\xxxx.dic为拼音读音字典

同理

pocketsphinx-0.7\model\hmm\en_US\hub4wsj_sc_8k 为英文语言模型文件

pocketsphinx-0.7\model\lm\en_US\xxxx.dic 为英文读音字典

你还会发现有台湾的等等

我目录的中文语言文件字典为mandarin_notone.dic  打开 你会发现里面有很多文字对应读音(拼音)

这时 我们回到刚才的text.dic和text.lm文件  打开text.dic文件

一个词一个词 在mandarin_notone.dic字典中快捷键查找  (词找不到就单个字找)  然后复制拼音到相应的词语右边 注意拼音和词语要至少留一个空格  然后拼音和拼音之间也要留一个空格

编辑text.dic文件,我的找好了 如下:

向前x iang q ian

向右x iang y ou

向后x iang h ou

向左x iang z uo

好了 保存...

英文的也一样步骤  字典的话,要从英文字典上查   英文最好都大写 并且多个单词时最好不留空格

3.没了(第一篇简书 ~ 就是这么草率...)

编写安卓程序?

代码太多 略.. 但我文章下面直接放demo

网上其他教程很多都是打开demo就闪退 其实原因是

你还要手动复制模型和字典文件到sd卡上

我写的这个demo也是基于它,  但我解决了这个问题  我把文件放在 assets里  并且我把模型文件和字典都整合放到一起了 ,如下

这样  就能自动复制文件到临时路径  并让你们快速实现离线语音功能 程序员不需要担心其他操作.

实际情况下那demo遗留了一个 严重的bug  就是过100s左右会c库异常闪退 这个问题我也解决了

还有个 文字不断重复 和回调一直回调同一个识别答案这个问题也解决了...

我做了判断 , 文件都放在data/data/com.packagename.xxx/file/下

并且根据手机语言切换识别中文还是英文...

publicRecognizerTask(Context context) {

String dataPath = context.getFilesDir().getAbsolutePath();

File zhPath =newFile(dataPath +"/voice/zh");

if(!zhPath.exists()) {

zhPath.mkdirs();

}

File enPath =newFile(dataPath +"/voice/en");

if(!enPath.exists()) {

enPath.mkdirs();

}

pocketsphinx

.setLogfile(dataPath +"/voice/pocketsphinx.log");

String rootPath = isZh(context) ? zhPath.getPath() : enPath.getPath();//根据环境选择中英文识别

String dicPath = rootPath +"/text.dic";

String imPath = rootPath +"/text.lm";

if(!newFile(dicPath).exists()) {

releaseAssets(context,"/", dataPath);

}

Config c =newConfig();

c.setString("-hmm", rootPath);

c.setString("-dict", dicPath);

c.setString("-lm", imPath);

c.setFloat("-samprate",8000.0);

c.setInt("-maxhmmpf",2000);

c.setInt("-maxwpf",10);

c.setInt("-pl_window",2);

c.setBoolean("-backtrace",true);

c.setBoolean("-bestpath",false);

this.ps =newDecoder(c);

this.audio =null;

this.audioq =newLinkedBlockingQueue();

this.use_partials =false;

this.mailbox = Event.NONE;

}

代码很简单的  放Demo吧

我去, 怎么简书没代码高亮提示  还有怎么上传资源... 知道的说下.. 我只能传CSND的了

~~~~~点我下载~~~~~

android 语音识别 离线,Android离线语音识别 PocketSphinx相关推荐

  1. android语音插件,Android平台离线打包 - 语音识别(Speech)插件配置

    百度语音设置 需要添加的文件 将以下文件放入工程的libs下 路径 文件名SDK\libs speech-release.aar.speech_baidu-release.aar AndroidMan ...

  2. Android (嘤)英语语音识别 简单概况

    这是一篇非常简短的概述,并不是什么长篇大论.旨在给根本没弄过安卓语音识别的程序猿们一个大体的认识,同时,里面也提供了不少方便的链接.希望能给你的开发加速~ 1. google speech recog ...

  3. Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)

    百度语音合成 声明 前言 正文 一.创建项目 二.离线语音合成 1. 配置AndroidManifest.xml 2. 配置SDK 3. 离线SDK初始化 4. 导包 5. 运行 三.在线语音合成 - ...

  4. 离线语音识别库_离线语音识别_离线语音识别sdk - 云+社区 - 腾讯云

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 但录音存储成单声道 识别结果是否可以把两人的对话分离开采样率普通话录音文 ...

  5. Android实战:借助百度语音识别SDK实现简单的语音识别

    前言: 此demo阉割了离线功能,只支持在线识别,并删除了根据代码报错参数纠错的部分,整个部分自己写的代码也就六七十行左右,显得非常简洁明了,很多部分都写了备注,希望大家能够获得些帮助. 准备工作 首 ...

  6. Android导航语音识别——读后听写语音识别(嵌入式)

    嵌入式项目之Android语音识别--读后听写语音识别(语音识别功能主函数调用) 文章目录 前言 一.代码示例 二.代码分析 1.创建 SpeechSynthesizer 对象 2.设置合成参数 3. ...

  7. Android初学者之轻松实现语音识别

    Android初学者之轻松实现语音识别 苹果的iphone有语音识别用的是Google的技术,做为Google力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  9. 离线语音识别_离线语音识别库_离线语音识别sdk - 云+社区 - 腾讯云

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 是的,录音文件识别服务就是离线语音识别服务... 录音文件识别(即:离线 ...

  10. android asset jar,android离线打包 可以使用,但总是报错 android_asset/null

    按照官网的教程配置了离线打包的项目 https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android 但是总是报错: I/OpenGLRendere ...

最新文章

  1. org/springframework/core/ErrorCoded
  2. Struts2 文件下载
  3. C#中使用二进制和ProtoBuf分别进行序列化、反序列化、压缩、解压缩对比测试汇总
  4. 为什么你的应用程序需要崩溃
  5. redshift教程_分析和可视化Amazon Redshift数据—教程
  6. Java:反射+泛型:获取类型参数的实例
  7. Linux命令终端如何查询本机的内外网IP地址
  8. C#/java 求最大公约数和最小公倍数
  9. git(2)---git 分布式版本控制系统
  10. jquery设置表单元素只读_jquery设置元素readonly和disabled(checkbox只读)
  11. flutter 动画json_flutter常用内置动画组件
  12. 成都软考-技术技能提升补贴领取指南
  13. RS485 光照度传感器 pc串口工具调试设备 亲身体验
  14. 如何将dwg转换为kml
  15. 为什么需要工作流调度系统?
  16. VOLTE_协议栈架构
  17. phpstorm 的注册码 key license
  18. MiSUMi米思米选型光盘 FA工厂自动化零部件 3D CAD库 2017
  19. [清华集训2014]主旋律
  20. FlyBird飞翔的小鸟

热门文章

  1. matlab汽车驱动力与行驶阻力,用matlab绘制汽车驱动力 行驶阻力平衡图
  2. JWT的基于JJWT在Java中使用
  3. types是什么意思中文翻译成_types英语_types什么意思_types用法翻译_types英语读音_解释 - 英语宝典...
  4. 阿里云 SLB证书记录
  5. python释放变量内存_Python变量内存管理
  6. MMD新人学习记录博客1
  7. 2022支付宝集五福活动开始了 有哪些集福方法你知道吗?
  8. 「镁客早报」屠呦呦入选“20世纪最伟大人物”;四部门联合治理APP违法收集使用个人信息...
  9. 名悦集团:下雪天怎么保养汽车?
  10. java制作闪星星_【治水】怎么用java画各种星星组成的图形