2012-01-25 39 views
3

爭取做語音識別,而無需使用PocketSphinx referrring到現場網絡,Android的離線語音識別使用PocketSphinx

http://swathiep.blogspot.com/2011/02/offline-speech-recognition-with.html

遵循同樣的,因爲它是什麼。

在模擬器中運行該程序,因爲它不會支持音頻,崩潰(不強制關閉)。但在試圖在手機上運行時,應用程序剛剛打開和關閉(不強制關閉)。是否需要添加任何更多的庫來運行這個應用程序????????? 請快回復任何人........

+0

我有同樣的問題,你找到解決方案嗎?我試過調試,但似乎崩潰的地方是pocketsphinx C代碼。 – pzo

回答

1

CMUSphinx wiki上提供了關於android上pocketsphinx的最新文檔。

基本上你需要從Github拉動演示,將它導入到android studio並運行,這樣你就可以測試基本的功能。

要開始集成到自己的應用程序執行以下操作:

引用該庫在Android項目

圖書館分佈結構無關的pocketsphinx-Android的5prealpha-nolib.jar和二進制。所以文件適用於不同的硬件架構。

在Android Studio中,您需要將jar文件放在app/libs文件夾中,並將jni .so文件放入app/src/main/jniLibs文件夾中。

包括資源文件

的標準方式運送資源文件與您的Android應用是把它們放在你的項目的資產/目錄。但是爲了讓它們可用於pocketsphinx文件應該有物理路徑,只要它們在.apk中就沒有。來自pocketsphinx-android的資產類提供了一種方法來自動將資產文件複製到目標設備的外部存儲。 edu.cmu.pocketsphinx.Assets#syncAssets同步從位於頂部assets/的assets.lst文件中讀取項目的資源。在複製之前,如果存在相同的名稱,則匹配資產的MD5校驗和和外部存儲上的文件。如果存在不完整的信息(外部存儲器上沒有文件,沒有任何兩個.md5文件),或者存在散列不匹配,它只會進行實際的複製。 PocketSphinxAndroidDemo包含生成assets.lst和.md5文件的ant腳本,查找assets.xml。

請注意,如果ant構建腳本在構建過程中無法正常運行,資產可能不同步。確保腳本自己運行或創建md5文件和assets.lst。

要在應用程序執行以下操作

包括應用程序/ asset.xml構建文件到您的應用程序 編輯的build.gradle構建文件運行資產整合資產同步。XML:

ant.importBuild 'assets.xml' 
    preBuild.dependsOn(list, checksum) 
    clean.dependsOn(clean_assets) 

這應該做的伎倆

示例應用程序

的類和方法pocketsphinx,機器人被設計成類似於在pocketsphinx使用相同的工作流程中,除了組織爲基本的數據結構使用它們的類和函數被轉換成相應類的方法。所以,如果你熟悉pocketsphinx,你也應該對pocketsphinx-android感到舒服。

SpeechRecognizer是訪問解碼器功能的主要類。它是在SpeechRecognizerSetup構建器的幫助下創建的。 SpeechRecognizerBuilder允許配置主要屬性以及解碼器的其他參數。參數鍵和值與通過命令行傳遞給pocketsphinx二進制文件的參數相同。閱讀更多關於調整pocketsphinx性能的信息。

recognizer = defaultSetup() 
     .setAcousticModel(new File(assetsDir, "en-us-ptm")) 
     .setDictionary(new File(assetsDir, "cmudict-en-us.dict")) 
     .setRawLogDir(assetsDir).setKeywordThreshold(1e-20f) 
     .getRecognizer(); 
recognizer.addListener(this); 

解碼器配置是漫長的過程,包括IO操作,所以建議以異步任務內運行英寸

解碼器支持多個命名的搜索,你可以在運行時

// Create keyword-activation search. 
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE); 
// Create grammar-based searches. 
File menuGrammar = new File(assetsDir, "menu.gram"); 
recognizer.addGrammarSearch(MENU_SEARCH, menuGrammar); 
// Next search for digits 
File digitsGrammar = new File(assetsDir, "digits.gram"); 
recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar); 
// Create language model search. 
File languageModel = new File(assetsDir, "weather.dmp"); 
recognizer.addNgramSearch(FORECAST_SEARCH, languageModel); 

切換一旦你安裝瞭解碼器,並添加所有你就可以開始識別搜索與

recognizer.startListening(searchName); 

你會得到語音通知在識別器偵聽器的onEndOfSpeech回調中結束事件。然後你可以調用recognizer.stop或者recognitionizer.cancel()。後者將取消認可,前者會導致最終結果通過你的onResult回調。

在識別期間,您將在onPartialResult回調中獲得部分結果。

您還可以訪問swig中包裝有Java類的其他Pocketsphinx方法,查看解碼器,假設,Segment和NBest類的詳細信息。

+2

無法理解他們的文檔。 –

+1

複製粘貼的答案也會很快失效。 –