2016-03-08 17 views
0

我一直在使用tesseract(tess-two更精確)在Android中製作應用程序來識別某些非常規符號。目的是識別符號並重定向到所述符號的描述。如何強制tesseract識別單個字符,而不是忽略它?

這些符號幾乎可以完美識別,無論它們是獨自在圖像中還是彼此相鄰......除了兩個(下面的)。

symbols omitted from recognition

這兩個符號不能被識別獨處的時候,但如果他們旁邊的其他任何符號它們被正確識別。

例如:

不承認 _

正確識別

_ b

_ý_

問題是,它們不是不匹配和其他的符號,但相反,他們完全被忽略。這發生在我呼叫時:

TessBaseAPI baseApi;

...

字符串文本= baseApi.getUTF8Text();

返回的字符串始終爲空。就好像它甚至沒有認識到黑色地區的開始。 任何人都知道我可以如何解決這個問題?

UPDATE:

爲了更清楚這裏是我的全部代碼初始化苔絲時。

TessBaseAPI baseApi = new TessBaseAPI(); 

mainBitmap = mainBitmap.copy(Bitmap.Config.ARGB_8888, true); 

baseApi.setDebug(true); 

baseApi.init(MainActivity.DATA_PATH, MainActivity.lang); 


baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR); 


baseApi.setVariable("tessedit_char_whitelist","abcdefghijklmnopqrst"); 
baseApi.setImage(mainBitmap); 


mainBitmap.recycle(); 
mainBitmap = null; 


// Iterate through the results. 
ResultIterator iterator = baseApi.getResultIterator(); 
String lastUTF8Text; 
float lastConfidence; 



iterator.begin(); 
do { 
    lastUTF8Text = iterator.getUTF8Text(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL); 
    lastConfidence = iterator.confidence(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL); 

    Log.i("string, intConfidence",lastUTF8Text+", "+lastConfidence); 
} while (iterator.next(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL)); 

我的白名單從一系列的「A」到「T」去,因爲我做了對應於我不得不使用符號字體,並將它們映射到這些字母的每一個。

回答

0

我會嘗試將頁面分割模式設置爲單個字符。

TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR 
+0

我已經嘗試過,但它會一直忽略那兩個特定的符號。事實上,我也試過所有的模式,以防萬一,但它只是返回一個空字符串。 – Samzerge

+0

你有沒有試過只列出你需要的符號? –

+0

是的,這工作正常,因爲每次它返回一個字符串它是在該列表的範圍內,問題是它被返回爲空。 – Samzerge

相關問題