最近在研究Android 下離線語音識別程式,從網上搜多到了幾篇不錯的網頁,通過Pocketsphinx可以實現想要的功能。
我是按照《Windows 下使用 PocketSphinx 實現 Android 離線語音識別 Part.1 配置環境、執行 PocketSphinxAndroidDemo》的文章一步一步的操作的.
對於Android和PocketSphinx 都是零基礎,中間遇到了各種各樣的問題,解決這些問題話費了太多的時間,再此將遇到的問題和解決方法和大家共享希望能給別人帶來幫助。
由於文章都是針對解決遇到的問題,顯得有點凌亂,遇到問題時可以把本文作文參考。
方法/步驟
Cygwin 下載版本問題
Cygwin 是windows下android的模擬環境。根據自己的作業系統下載32位或者64位的安裝程式。本人開始是在64位作業系統下實驗的,但是遇到問題始終解決不了,最後換了32位系統下實驗成功的。這個後面會提到所遇到的問題。
Cygwin 下載安裝問題
上面下載的SETUP只是一個下載器,電腦需要聯網,從網路上下載需要安裝的組建,具體方法可以搜尋Cywin安裝配置。需要下載的檔案: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,不然後期編譯不能通過!) 這是別人的文章中提到的。
強烈建議每次只選1~2項進行安裝,否則下載失敗的話就得全部從新下載。
下載安裝完以後,開啟 Cygwin,在命令列下輸入 gcc --version,g++ --version,make --version,gdb --version,依次顯示資訊,則安裝正確;
如果顯示 -base: ***:未找到命令,則表示你還有相應的東西沒有安裝。
解決方法從新執行SETUP下載相應的組建。
Cygwin 下載網址選擇問題
下載時可能會遇到這種情況,下載快結束的時候提示,“安裝未完成,再試?”
從新下載安裝還會提示同樣的問題。
這個問題是由於我們下載時選擇的網址和第一次選擇的網址不一樣造成的。我曾經把安裝的CYWIN全部刪除在執行SETUP,然後換一個網址下載安裝還是會提示錯誤,最後沒辦法只能用第一次使用的網址下載,速度很慢 很慢 很慢 。。。。。
建議始終選擇圖中高亮的網址,這個下載速度還可以。
ROOT 時找不到passwd 檔案
修改 cygwin/etc/passwd 檔案中的 500:513 為 0:0,獲得 root 許可權
但是我在安裝結束後在cygwin/etc/下就沒找到PASSWD檔案。
解決方法: 開啟 Cygwin,在命令列下輸入
$ mkpasswd -l>/etc/passwd ( 注意-l 是英文字母L的小寫 不是數字1)
$ mkgroup -l>/etc/group (-l 同上)
ROOT 許可權失敗
當安裝完成以後,看是不是真正的root,只需要看命令提示符是不是“#”,普通使用者的是“$”。”
將Administrator替換成root,這個只是改名而已,真正關鍵部分是紅色數字部分,那個才是許可權控制,將500和513都改成0,這樣才能獲取真正的root許可權
按照上面的修改之後,發現還是$ 普通使用者一枚。
解決方法:
Administrator 是個誤導, 在你的passwd 中有Administrator 相關的一段,但是修改這個不起作用。
(文章作者應該是用Administrator 使用者登陸的,你需要修改你登陸的賬戶)
看好你登陸電腦時顯示的名字都修改成ROOT
另外還需要在cygwin的home目錄下面建立目錄root。從新執行Cygwin命令提示符該就會顯示 # 了
配置 Android NDK 問題。
開啟 cygwin/etc/profile,修改如下地方:cygdrive 後邊是碟符,然後就是路徑了,注意最後的冒號
開啟 Cygwin,輸入 ndk-build,出現如下資訊,代表配置正常:
我又失敗了,內牛滿面啊。。。好像所有的問題我都遇上了
解決方法:
將cygwin/home/ <你的使用者名稱> /.bash_profile 檔案後面新增NDK=/cygdrive/ <你的ndk存放的碟符> / <你的ndk 目錄> 例如 你的ndk> 你的ndk存放的碟符> 你的使用者名稱>
NDK=/cygdrive/d/android-ndk-r10
Export NDK
注意:NDK這個名字可以自己定義,不過最好還是和文章中一致,面的後面自己還的動腦經分析問題。
注意 需要在你電腦上裝置環境變數
變數名 :NDK
變數值 :d/android-ndk-r10 根據的自己的NDK 目錄設定
Cygwin中輸入 $NDK 會返回d/android-ndk-r10 這樣的資訊
Cygwin中輸入ndk-build 不成功
應該輸入 $NDK/ndk-build
如果還不行,可以自己搜尋配置NDK環境變數
編譯sphinxbase時 ./autogen.sh 始終提示錯誤
下載了sphinxbase-0.7 解壓,修改資料夾名字為sphinxbase
Cygwin命令輸入./autogen.sh 提示錯誤****:not found 此類為題比較簡單,執行前面的SETUP 找到相應項下載安裝即可解決。
之後這裡又出現了很多問題,都是某些函數出錯,折騰了好幾天,最後換了32位系統的電腦,從新走過,sphinxbase 順利通過!!!!!!!!!!!
pocketsphinx 編譯問題
./autogen.sh ./configure 都順利通過 ,但是make的時候就報錯了
error: command 'gcc' failed with exit status 1
Makefile:501: recipe for target `pymod-build-stamp' failed
make[1]: *** [pymod-build-stamp] Error 1
make[1]:Leaving directory `/home/username/Installs/pocketsphinx-0.6/pocketsphinx/python'
Makefile:360: recipe for target `all-recursive' failed
make: *** [all-recursive] Error 1
解決方法:
Pocketsphinx /python/setup.py,
找到libraries=['pocketsphinx', 'sphinxbase'],新增iconv
修改後libraries=['pocketsphinx', 'sphinxbase', 'iconv'],
然後從新make
Cygwin 下,進入 pocketsphinx/swig 資料夾,make:
注:這裡會出錯,提示 jni.h 或者 jni_md.h 不存在,不用理會,我們需要那幾個檔案已經生成了,這裡我也一直沒理解。
把這個swig/edu 資料夾,複製到 PocketSphinxAndroidDemo 中的 jni 資料夾下
修改PocketSphinxAndroidDemo/jni/Android.mk 檔案,
SPHINX_PATH:=/cygdrive/d/sphinx
注意這裡說明一下,我們下載sphinxbaese pocketsphinx PocketSphinxAndroidDemo都解壓在d/sphinx 下了,這裡你需要根據你自己的情況設定,這三個檔案要放在同一個目錄下。
同樣在 Android.mk 檔案中,搜尋 LOCAL_STATIC_LIBRARIES,把後邊的單詞順序改為 pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil
開啟 Cygwin,進入 PocketSphinxAndroidDemo 的 jni 資料夾,執行 ndk-build,沒錯的話 OK !!
再此注意,最好不要用記事本開啟,記事本開啟顯示的內容密密麻麻,也不分段落,很容易修改錯了,我在這裡就折騰了好幾次。
最好使用ULtraedit等軟體開啟
至此pocketsphinx 三個檔案應該都能編譯過了,剩下的內容是在Eclipse中去設定和編譯了。
注意事項
部分圖片來自於網路