首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高文本识别usingTesseract OCR。?

如何提高文本识别usingTesseract OCR。?
EN

Stack Overflow用户
提问于 2014-08-28 11:31:45
回答 3查看 5.8K关注 0票数 4

我在I中实现了文本识别的tesseract ocr,对输入图像进行了预处理,给出了Tesseract method.It,识别效果较差。

步骤:

1.侵蚀功能

2.扩张功能

3.Bitwise_not函数

代码语言:javascript
复制
 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]);

输入图像:

图像链接

1.如何利用Tesseract提高文本识别率?

2.在Tesseract中是否有其他预处理步骤。

3.展开文本是否在Tesseract OCR中完成?

EN

回答 3

Stack Overflow用户

发布于 2014-12-06 17:04:25

Tesseract是一款高度可配置的软件--尽管它的配置文档很少(除非您想深入挖掘150 K代码行)。这里有一个很好的综合清单,http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version

还可以看看https://code.google.com/p/tesseract-ocr/wiki/ControlParamshttps://code.google.com/p/tesseract-ocr/wiki/ImproveQuality

如果您提供更多关于OCR‘正在运行的数据的信息,您可以极大地提高质量。例如,如果图像都是符合某些标准MRZ格式的国家ID或护照,您可以配置tesseract来使用该信息。

对于您附加的图像( MRZ),我得到了以下结果,

代码语言:javascript
复制
IDFRADOUEL<<<<<<<<<<<<<<<<<<<<9320 
05O693202O438CHRISTIANE<<N1Z90620<3

通过使用以下配置

代码语言:javascript
复制
# 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<

还请注意,您的安装是经过培训的字体,以获得更准确的结果。在你的情况下,它似乎是OCR字体。

票数 10
EN

Stack Overflow用户

发布于 2014-08-28 20:53:45

没有必要完成再培训Tesseract这一繁琐的任务。是的,你会得到更好的结果,但在某些情况下,你可以取得相当远的ENG培训集。

你可以通过注意以下几点来提高你的结果:

  1. 使用二值图像作为输入,并确保在白色背景上有黑色文本。
  2. 默认情况下,Tesseract将尝试从没有间隔的事物中生成单词。试着将每个字符分开分割,并将它们放置在一个新的图像中,有很大的间距。特别是当你有字母和数字的组合时,Tesseract会“修正”这个来匹配周围的字符。
  3. 尝试用白名单分割你的图像的不同部分,你知道应该在那里的字符。如果您在第一部分中只查找数字,那么使用Tesseract的单独实例来检测这些数字,只使用数字白名单。
  4. 如果您多次使用同一个对象而不重置它,Tesseract似乎有一个内存。这意味着每次执行OCR时都可以得到不同的结果。您可以重置Tesseract来对抗这种情况,或者只是创建一个新的对象。
  5. 最后但并非最不重要的一点是,使用resultIterator来检查Tesseract可能给出的盒子。您可以检查每个字符的大小和可信度,并相应地进行筛选。
票数 5
EN

Stack Overflow用户

发布于 2014-08-29 15:40:50

根据我的经验:

1.如何利用Tesseract提高文本识别率?

  • 首先是预处理。确保输入图像是具有良好阈值的二值图像。OpenCV有一套很好的功能,可以应用Otsu算法和轮廓检测等阈值算法来帮助翘曲和旋转。
  • 您还可以在OpenCV中使用轮廓检测来区分文本行。
  • 一些滤波也会消除噪音,这往往会混淆和增加处理时间。
  • 为tesseract (例如eng.config)设置适当的配置。这里的全部吐露(http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version)。一些例子包括黑名单,白名单,切碎等等.
  • 用适当的旗子。例如,如果您正在执行文本块而不是行,则为-psm 6
  • 训练了我自己的语言数据..。我想说,只有当你有大量的时间和资源时,才这么做。或者你的字体非常特殊(例如点矩阵)。
  • 较新版本的Tesseract (接近3.0)允许在相同的传递(-l one+two)中使用多语言文件。这意味着你可以有一个经过专门训练的文字和另一个数字。在我们的例子中,它似乎运行得很好。
  • 对试验结果的后处理对我们也特别重要。字符串替换典型的错误识别和什么不是。

2.在Tesseract中是否有其他预处理步骤。

Tesseract使用轻子库进行预处理。

3.展开文本是否在Tesseract OCR中完成?

我倾向于认为是的。考虑到翘曲功能是轻子的一部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25547767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档