bal*_*nna 3 opencv tesseract objective-c ios
我在IOS中实现了tesseract ocr用于文本识别.我已经对输入图像进行了预处理并给出了Tesseract方法.它给出了较差的识别结果.
脚步:
1.侵蚀功能
2.Dilate功能
3.Bitwise_not功能
Mat MCRregion;
cv::dilate ( MCRregion, MCRregion, 24);
cv::erode ( MCRregion, MCRregion, 24);
cv::bitwise_not(MCRregion, MCRregion);
UIImage * croppedMCRregion = [self UIImageFromCVMat:MCRregion];
Tesseract* tesseract = [[Tesseract alloc] initWithDataPath:@"tessdata" language:@"eng"];
[tesseract setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.>,'`;-:</" forKey:@"tessedit_char_whitelist"];
[tesseract setImage:[self UIImageFromCVMat:MCRregion]];
// [tesseract setImage:image];
[tesseract recognize];
NSLog(@"%@", [tesseract recognizedText]);
Run Code Online (Sandbox Code Playgroud)
输入图片:
1.如何使用Tesseract提高文本识别率?
2.在Tesseract中应用了任何其他预处理步骤.
3.在Tesseract OCR中完成了褪色文本.?
Tesseract是一个高度可配置的软件 - 虽然它的配置文档很少(除非你想深入挖掘150K代码行).这里有一个很好的综合列表http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version.
另请 参阅https://code.google.com/p/tesseract-ocr/wiki/ControlParams和https://code.google.com/p/tesseract-ocr/wiki/ImproveQuality
如果您提供有关您正在进行OCR的数据的更多信息,您可以极大地提高质量.例如,如果图像都是遵循某些标准MRZ格式的国家ID或护照,您可以配置tesseract以使用该信息.
对于您附加的图像(MRZ),我得到以下结果,
IDFRADOUEL<<<<<<<<<<<<<<<<<<<<9320
05O693202O438CHRISTIANE<<N1Z90620<3
Run Code Online (Sandbox Code Playgroud)
通过使用以下配置
# disable dict, freq tables etc which would distract OCR'ing an MRZ
load_system_dawg F
load_freq_dawg F
load_unambig_dawg F
load_punc_dawg F
load_number_dawg F
load_fixed_length_dawgs F
load_bigram_dawg F
wordrec_enable_assoc F
# mrz allows only these chars
tessedit_char_whitelist 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ<
Run Code Online (Sandbox Code Playgroud)
另请参阅您的安装是否经过字体培训,以获得更准确的结果.在你的情况下,它似乎是OCR-B字体.
没有必要经历重新训练Tesseract的繁琐任务.是的,你会得到更好的结果,但在某些情况下你可以使用ENG训练集.
您可以通过注意以下事项来改善结果:
使用二进制图像作为输入,并确保在白色背景上有黑色文本
默认情况下,Tesseract会尝试用没有间距的东西来制作单词.尝试单独分割每个字符并将它们放在具有大量间距的新图像中.特别是如果你有字母和数字的组合,Tesseract将"纠正"这个以匹配周围的字符.
尝试使用白名单对图像的不同部分进行细分,以确定您应该知道的角色.如果您只在第一部分中查找数字,则使用Tesseract的单独实例来检测这些数字,仅使用数字白名单.
如果多次使用同一个对象而不重置它,Tesseract似乎有一个内存.这意味着每次执行OCR时都可以获得不同的结果.您可以重置Tesseract来对此进行计数或仅创建一个新对象.
最后但并非最不重要的是,使用它resultIterator来浏览Tesseract可以提供的框.您可以检查每个字符的大小和置信度并相应地进行过滤.
| 归档时间: |
|
| 查看次数: |
4877 次 |
| 最近记录: |