sphinx4 SearchManager分析


根據前面的分析,語音識別調用的接口是Recognizer的recognizer方法,咱們看下recognize方法:
ide


recognize只是調用了decoder的decode方法,轉到decode方法:ui


在decode方法中,先調用searchManager的startRecognition開始識別,而後在一個while循環中調用searchManager的recognize方法,recognize返回一個result對象,若是result爲null,或code

result.isFinal()爲true,則退出循環,再調用searchManager的stopRecognition方法中止識別。對象


看來主要仍是SearchManager在工做,所以須要詳細分析一下SearchManager。咱們能夠看到SearchManager其實是一個接口,只是定義了startRecognition,stopRecognition,recognize等抽象方法而已,這樣咱們就不得不找到具體的子類了。blog


仍是以HelloWorld這個Demo爲切入點,查看它的配置文件:繼承


從配置文件能夠看到,HelloWorld使用的是SimpleBreadthFirstSearchManager這個類,固然SearchManager的子類確定不止這一個,在edu.cmu.sphinx.decoder.search這個包中還能夠看到其餘的SearchManager,如SkewPruningSearchManager,TokenHeapSearchManager等。接口


咱們看下SimpleBreadthFirstSearchManager的具體實現:get


顯然它是從TokenSearchManager繼承而來,這樣又要去分析TokenSearchManager類了。可是通過對TokenSearchManager的分析發現,它並無實現接口中的那幾個方法,TokenSearchManager只是一個抽象來,因此咱們再轉回對SimpleBreadthFirstSearchManager的分析。it


SimpleBreadthFirstSearchManager有3個很是重要的成員變量:io


下面對這3個變量簡單解釋一下。


Linguist主要是提供語言,語法相關信息。

Pruner對Active List進行裁剪。

AcousticScorer對Active List進行評分。


咱們先來看下SimpleBreadthFirstSearchManager的startRecognition方法:


顯然在這個方法中,分別調用了這3個成員的startRecognition方法。而stopRecognition也差很少:


好了,今天暫時先分析到這裏,開始和中止識別主要是調用了Linguist,Pruner,AcousticScorer這3個類中的方法,而最重要的recognize方法尚未分析。後面將會對這兩個模塊進行詳細的分析。

相關文章
相關標籤/搜索