【发布时间】:2018-07-24 01:55:49
【问题描述】:
我正在尝试实现名片扫描应用程序。我正在使用 tesseract 库。
我阅读了有关提高 Tesseract 性能的文章,并且在将图像传递给 Tesseract 之前,我尝试了一些预处理图像。
我发现 Tesseract 最适合灰度/黑白图像。
我在选择正确的页面分段时遇到了问题。
到目前为止,
G8PageSegmentationModeSingleBlock(假设单个统一块 文字)
给了我名片格式的最佳结果。
以下是使用这种分割模式的结果:
灰度:
当使用灰度图像时,Tesseract 正在识别单词(看红色矩形),但不知何故,有时它会识别单词之间的空间。
这是输出:
o
f l ,t!ti,iy,,,tyii,i,,!),i),,m,i,st,,,i,t,)) ',
REAL E:ESrry"irfEf
SOLUTIONS WC, n
TimTsai ----> (space missing here)
Investor & Consultant
p 780.803.9935
f 888.803.1485
e tim@lnnoventionGroup.ca
w www.lnnoventionGroup.ca
黑白:
这在识别单词之间的空间方面比灰度要好一点,但这也将图像的边界识别为字母,并将它们附加到原始/实际文本中。 (看看红色矩形是如何延伸到图像边缘的,因为分割模式设置为识别统一的文本块)
这是输出:
o,
f I t,!h,tig/i,i,,ip,,ip,iy (,
REAL ESTATE i,
SOLUTIONS INC. (i,
Tim Tsai i;, ------> (yay, got the space)
Investor & Consultant ii,
p 780.803.9935 :i,
f 888.803.1485 i:,
e tim@lnnoventionGroup.ca (i,
,
-ee_--e_-----e----------ir-eeeereree-e-re---------------, u p
我也试过去掉边框,这次没有读到单词之间的空格。
输出:
o
I I !,,!ih,tle/IiEhp,tt,l,l),!
REAL ESTATE
SOLUTIONS INC.
TimTsai
Investor & Consultant
p 780.803.9935
f 888.803.1485
e tim@lnnoventionGroup.ca
问题:
这种行为的原因是什么(忽略单词之间的空格?)
我可以通过什么方式改进这一点,以便 tesseract 不会一直忽略空格?
我还可以查看旋转/去偏斜,但我不确定在这种情况下这可以提高多少性能,因为文本在我看来大多是水平的。
代码:
G8Tesseract *tesseract = [[G8Tesseract alloc] initWithLanguage:@"eng"];
tesseract.delegate = self;
tesseract.engineMode=G8OCREngineModeTesseractCubeCombined;
// Optional: Limit the character set Tesseract should try to recognize from
tesseract.charWhitelist = @"@.,&():ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";
tesseract.charBlacklist=@"$%^*={};<>\\~`";
// Specify the image Tesseract should recognize on
tesseract.image = [img g8_blackAndWhite];
tesseract.sourceResolution=kG8MaxCredibleResolution;
// Optional: Limit the area of the image Tesseract should recognize on to a rectangle
CGRect tessRect = CGRectMake(0, 0, tesseract.image.size.width, tesseract.image.size.height);
tesseract.rect = tessRect;
// Optional: Limit recognition time with a few seconds
tesseract.maximumRecognitionTime = 60.0;
// Start the recognition
[tesseract recognize];
// Retrieve the recognized text
NSLog(@"text %@", [tesseract recognizedText]);
【问题讨论】:
-
查看this question参数。由于您的问题是相反的-尝试降低
tosp_min_sane_kn_sp -
尝试设置变量
preserve_interword_spaces。 -
@nguyenq 怎么设置?在哪里设置?
-
类似的东西:
tesseract.setVariable("preserve_interword_spaces", "1");