您的位置:首页 > 其它

PocketSphinx语音识别用法

2017-02-09 12:10 253 查看
PocketSphinx总的来说识别效果不是很好,很容易出现不说话时也出现识别范围内的词。目前只用到关键词识别功能。
具体的demo在https://github.com/cmusphinx/pocketsphinx-android-demo链接下载。
用到的资源都在demo中取。
libs/pocketsphinx-android-5prealpha-nolib.jar
assets/sync
assets/sync/cmudict-en-us.dict
assets/sync/cmudict-en-us.dict.md5
assets/sync/en-us-ptm
assets/sync/assets.lst
jniLibs/armeabi-v7a/libpocketsphinx_jni.so
直接调用
initPocketSphinxRecognizer()接口就可启动PocketSphinx关键词识别。
代码如下:
/* Named searches allow to quickly reconfigure the decoder */private static final String KWS_SEARCH = "wakeup";/* Keyword we are looking for to activate menu */private static final String KEYPHRASE = "mighty computer";
private edu.cmu.pocketsphinx.SpeechRecognizer mPocketSphinxRecognizer;
private void setupPocketSphinxRecognizer(File assetsDir) throws IOException {// The recognizer can be configured to perform multiple searches// of different kind and switch between themmPocketSphinxRecognizer = defaultSetup().setAcousticModel(new File(assetsDir, "en-us-ptm")).setDictionary(new File(assetsDir, "cmudict-en-us.dict"))// To disable logging of raw audio comment out this call (takes a lot of space on the device)//.setRawLogDir(assetsDir)// Threshold to tune for keyphrase to balance between false alarms and misses.setKeywordThreshold(1e-35f)// Use context-independent phonetic search, context-dependent is too slow for mobile.setBoolean("-allphone_ci", true).getRecognizer();mPocketSphinxRecognizer.addListener(mRecognitionListener);// Create keyword-activation search.mPocketSphinxRecognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);}private void switchToPocketSphinxRecognizer(String searchName) {if(mPocketSphinxRecognizer != null) {mPocketSphinxRecognizer.stop();// If we are not spotting, start listening with timeout (10000 ms or 10 seconds).mPocketSphinxRecognizer.startListening(searchName);}}private void initPocketSphinxRecognizer(){new AsyncTask<Void, Void, Exception>() {@Overrideprotected Exception doInBackground(Void... params) {try {Assets assets = new Assets(SearchActivity.this);File assetDir = assets.syncAssets();setupPocketSphinxRecognizer(assetDir);} catch (IOException e) {return e;}return null;}@Overrideprotected void onPostExecute(Exception result) {if (result != null) {ToastUtil.showShortToast(SearchActivity.this,  "Failed to init pocketsphinx recognizer " + result);}else{switchToPocketSphinxRecognizer(KWS_SEARCH);}}}.execute();}edu.cmu.pocketsphinx.RecognitionListener mRecognitionListener = new edu.cmu.pocketsphinx.RecognitionListener(){@Overridepublic void onBeginningOfSpeech() {}/*** We stop recognizer here to get a final result*/@Overridepublic void onEndOfSpeech() {}/*** In partial result we get quick updates about current hypothesis. In* keyword spotting mode we can react here, in other modes we need to wait* for final result in onResult.*/@Overridepublic void onPartialResult(Hypothesis hypothesis) {if (hypothesis == null)return;String text = hypothesis.getHypstr();Log.e("TAG", "text:" + text);if (text.equals(KEYPHRASE)) {mPocketSphinxRecognizer.stop(); }}/*** This callback is called when we stop the recognizer.*/@Overridepublic void onResult(Hypothesis hypothesis) {}@Overridepublic void onError(Exception error) {switchToPocketSphinxRecognizer(KWS_SEARCH);}@Overridepublic void onTimeout() {switchToPocketSphinxRecognizer(KWS_SEARCH);}};

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: