2016-03-08 190 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