不管是中文或英文,
基本上準確度都還蠻高,
如果程式中需要語音辨識的功能,
方法如下:
private static final int RECOGNITION_REQUEST_CODE = 1234;//當成溝通的tag而且,數字隨便定 Intent it = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); it.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //it.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); it.putExtra(RecognizerIntent.EXTRA_PROMPT, "請說..."); this.startActivityForResult(it, RECOGNITION_REQUEST_CODE);上面的範例是直接呼叫RecognizerIntent,
所以會跳出Android已經定義好的UI,
它會自己處理收音,然後辨識,
EXTRA_LANGUAGE_MODEL傳入的參數可以是RecognizerIntent.LANGUAGE_MODEL_FREE_FORM或RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH,
差別是什麼?
LANGUAGE_MODEL_FREE_FORM:通常我們會用這個參數,不管句子長短, LANGUAGE_MODEL_WEB_SEARCH:因為是網頁搜尋資料為base,通常是短句,對於中文的辨識程也較好,
不過,經測試結果,好像結果差異不大,呵...
辨識好的結果呢?
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String firstMatched; if(requestCode == RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK){ //辨識結果不只一個,會從最接近的開始往後排序 ArrayList<string> resultList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); firstMatched = (String)resultList.get(0);//通常我們只取第一個來用 } else { firstMatched = "無法辨識"; } result.setText(firstMatched); }整個辨識過程,要確定網路有連上線,
假如你想用離線的方式,
你可以到"設定"裡,有一個"下載離線語音辨識資料",
將想要的語言檔案下載回來,
如果網路沒開,還是可以進行語音辨識,
不過,實驗結果,辨識率就沒有那麼好了...
您好
回覆刪除我經過很多測試但無法實測出來
請問您是怎麼實測離線語音辨識的呢?
我下載離線包後可跳出google語音識別的視窗
但無論我怎麼說話讓他辨識都無法回傳結果
"無法回傳結果"的意思是"無法辨識"?還是視窗直接關掉?還是程式當掉了?還是回傳錯誤的字串?
刪除如果不是離線方式,連上網路時,就可以辨識成功?
用RecognizerIntent的好處是很容易實作,因為不用自己畫UI,
但相對的,要Debug也較麻煩,
如果可以,建議用另一個方式,
http://cruxintw.blogspot.tw/2015/03/android-google-ui.html
也就是自己實作UI,一方面可以有自己的特色,一方面也可以看看onError(int error)回傳的訊息來debug,
非常高興您的回覆
刪除視窗不會關掉會呆掉
就是叫我再按一次重試語音辨識(無限迴圈)
兩種方法我都試驗過
大大您說的第二種我實測時會跳出error no match
我google離線語音識別只能在IME成功
刪除請問要如何讓它在開始跟結束時發出"登"的聲音?
回覆刪除