[转]Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo...

多余的话不说了,为啥要用“离线”而不用“在线”其实很简单一句话:领导说的…………你可以当他吃错药了……

先声明,“离线语音识别”识别率低下,并且语句固定,提前写死的,因为各种原因需要用一下的就继续看吧……

 

一、如何实现“离线语音识别”:

 

当然你可以学习一些“机器学习”、“模式识别”的东西,然后学一些高深的算法,但是有时候公司一个小应用,非要加上一个“语音识别”,你怎么办,你有那么多时间人力精力去研究一个语音识别吗…………所以本文旨在抛砖引玉,谈一下简单的语音识别。

1、Google 离线语音识别包:

据说 Android 4.1 以后,语音识别功能能在手机上下载离线语言包,博主下了发现中文只有 15M+,且识别效果有待商榷,有兴趣的可以单说,这次主要研究标题那货……

2、PocketSphinx:

具体原理太深奥的博主也不懂,姑且谈一下,当初刚刚学习 Android 编程的时候,肯定看见过一种叫“Android NDK”的东西吧,最后咱用的是“Android JDK”。“NDK”你可以理解成:通过 Java 代码调用 C/C++ 的函数,把 Java 与 C 打包成 apk,实现 C/C++ 下的功能。

PocketSphinx 来自于 CMUSphinx,后者源码是 C 的,因此需要 NDK 将 C 程序封装成 Java 链接库 .o 文件,然后在程序中调用。怎么弄?一步一步来…………

 

二、前期准备:

 

1、下载 Android NDK:这个就去百度上查吧,目测第一个就是,博主是 android-ndk-r8e-windows-x86_64,你的也许是 32 位机器,那就去下 32 的;

2、下载 Cygwin:http://cygwin.com/install.html,在其中选一个下载;

3、下载 Sphinxbase 0.7:http://ucla.jamesyxu.com/custom_uploads/sphinxbase-0.7.tar.gz

4、下载 PocketSphinx 0.7:http://ucla.jamesyxu.com/custom_uploads/pocketsphinx-0.7.tar.gz

5、下载 PocketSphinxAndroidDemo:http://ucla.jamesyxu.com/custom_uploads/PocketSphinxAndroidDemo.zip

 

三、安装配置:

 

目前先把 Eclipse 抛开,别急,以后会合体~~

 

(1)、安装配置 Cygwin:

Cygwin 相当于 Windows 下的 Linux 环境,因为使用 NDK、PocketSphinx 需要编译源码之类的 Linux 操作,所以需要这么一个东西。另外,这个下载的 setup.exe 相当于一个下载器,以后需要什么东西都要重复下面的步骤……

 

1、双击 Setup 图标,选第一项:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

2、选择安装路径,尽量选中文并且路径不要空格:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

3、Next 就行:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

4、选择连接网络的方式,这里选直连:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

5、选择从哪个网站下载,博主选的那个高亮的,速度还行:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

6、进入主下载界面:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

7、按照下图的操作,依次下载文件:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

注 1:点击此处可以选版本

注 2:1 点击完后,此处自动勾选

注 3:此处是要下载的文件的名称(上图是示例,具体需要下载的文件是下边的)

 

注:需要下载的文件:autoconf2.1、automake1.10、binutils、gcc-core、gcc-g++、gdb、pcre、pcre-devel、gawk、make、libtool、swig(选择 1.3.40-1,不是 2.0.9-1,不然后期编译不能通过!)

注:如果后期编译出错,看错误,少什么文件再来下载

注:不要同时下载太多,断线只能重下……

 

7、打开 Cygwin,在命令行下输入 gcc --version,g++ --version,make --version,gdb --version,依次显示信息,则安装正确;

8、修改 cygwin/etc/passwd 文件中的 500:513 为 0:0,获得 root 权限;

 

(2)、配置 Android NDK:

 

1、无需特别配置,解压即可,但是需要在 Cygwin 中配置一下:

打开 cygwin/etc/profile,修改如下地方:cygdrive 后边是盘符,然后就是路径了,注意最后的冒号

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

2、打开 Cygwin,输入 ndk-build,出现如下信息,代表配置正常:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

3、测试 NDK 是否正常工作:

①、我们选择 NDK 自带的例子 hello-jni,假设位于 E:\android-ndk-r5\samples\hello-jni(根据你具体的安装位置而定);

②、运行 Cygwin,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni,进入到 E:\android-ndk-r5\samples\hello-jni 目录;

③、输入 ndk-build,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。(ndk-build 是调用 NDK 的编译程序);

④、此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,那么 NDK 配置成功。

 

(3)、编译 PocketSphinx,配置一下 PocketSphinxAndroidDemo 的某些参数:

之前我们下载了:Sphinxbase 0.7、PocketSphinx 0.7、PocketSphinxAndroidDemo

 

1、三个文件解压,放在一个文件夹内,这里文件夹起名叫 sphinx(你随意)

2、把那两个带 0.7 的文件夹重命名成 sphinxbase、pocketsphinx,理论上会变成下图:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 

3、打开 Cygwin,依次编译 sphinxbase、pocketsphinx:(以 sphinxbase 为例,pocketsphinx 同理)

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 

注:此时可能会提示错误,说明文件没装全,回 Cygwin 的 setup.exe 去下载

 

4、同样在 Cygwin 下,进入 pocketsphinx/swig 文件夹,make:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

注:这里会出错,提示 jni.h 或者 jni_md.h 不存在,没事,这时候生成了几个文件,我们需要的是那几个文件……

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

5、把这个 edu 文件夹,复制到 PocketSphinxAndroidDemo 中的 jni 文件夹下

 

6、用记事本打开 PocketSphinxAndroidDemo/jni/Android.mk 文件,改成下图:(三个文件夹的父文件夹)

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

7、同样在 Android.mk 文件中,搜索 LOCAL_STATIC_LIBRARIES,把后边的单词顺序改为 pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

8、打开 Cygwin,进入 PocketSphinxAndroidDemo 的 jni 文件夹,执行 ndk-build,没错的话 OK !!

 

(4)、配置 Eclipse:

 

1、导入 PocketSphinxAndroidDemo 工程文件,导入过程提示错误,无视即可

2、右键工程,打开属性,构建器(英文版的大概是 builder),右侧会发现 SWIG 和 NDK

 

①、SWIG:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

②、NDK:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

注:NDK 不按上面的配的话,构建时会出错,反正我是出错,你不信可以试试……

 

(5)、程序运行,真机调试:

 

1、拷贝“声学模型”和“语音字典”到手机上:

 

①、把 pocketsphinx/model/hmm/en_US 里的 hub4wsj_sc_8k,hmm/en_US,lm/en_US 放入手机的某个文件夹

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

由于我的手机 root 过了,装了文件夹管理器,可能方便一些……以后会尝试在程序中指定,现在先把 Demo 跑起来为最优先。

 

②、在 PocketSphinxAndroidDemo 项目中使 RecognizerTask.java 里 c.setString 函数中的参数符合上述路径

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩

 

注:上述截图不完全,把程序里的那一坨都改了吧~~

 

2、运行程序,如果程序闪退,说明 NDK 可能配置不成功,否则出现如下界面:

【Android】技巧 8 -- Windows 下使用 PocketSphinx 实现 Android 离线语音识别 Part.1 配置环境、运行 PocketSphinxAndroidDemo - 灼眼のFate - 始めの一歩
 
参考文章:
 
1、 http://ucla.jamesyxu.com/?p=118(写得最好,最好看看评论)
 
 
补充:至于程序怎么用,怎么改,怎么提高准确率,怎么支持中文…………咱明儿见吧,今天憔悴了……
 
 
 
 

转载于:https://www.cnblogs.com/woshijpf/articles/3633308.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值