3
votes

Tesseract setVariable whitelist works ok for english language for example i use this to recognize only digits and letters from image (excluding special characters &*^%! etc)

myOCR->SetVariable("tessedit_char_whitelist",
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");

But i can't do the same thing for russian language

myOCR->SetVariable("tessedit_char_whitelist", "0123456789абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМОПРСТУФХЦЧШЩЭЮЯ");

is there a different principle? Because this is don't work. Instead of all determined characters i recieve only digits in output, tesseract ignores all russian letters which i put into the whitelist. Blacklist didn't work too. Is there any way to rid from it? Thanks.

3

3 Answers

0
votes

So the answer is to use this symbols unicode codes in whitelist, don't know how to do this exactly

0
votes

C#

var fromEncodind = System.Text.Encoding.UTF8;
var bytes = fromEncodind.GetBytes(ans);
var toEncoding = System.Text.Encoding.GetEncoding(1251);
ans = toEncoding.GetString(bytes);
engine.SetVariable("tessedit_char_whitelist", ans);
0
votes

I had similar problem in android (tess-two). It can be simply done using e.g. this online tool to convert UTF8 to java entity. For instance your set of chars:

tess.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, "0123456789\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042D\u042E\u042F");