我正在尝试实施名片扫描应用。我正在使用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
Black&怀特:
这比识别单词之间的空间的灰度中间点要好一些,但是这也将图像的边界识别为字母,并将它们附加到原始/实际文本。 (查看红色矩形如何延长到图像边缘,因为分割模式设置为识别统一的文本块)
这是输出:
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]);
答案 0 :(得分:0)
将 preserve_interword_spaces
设置为 true 以保留单词之间的多个空格。
您的代码可能如下所示:
{
"payload": {}
}
对于命令行界面,请以这种方式使用 tesseract.setVariable("preserve_interword_spaces", "1");
开关:
-c
(来自有用评论的自愿回答;感谢用户 nguyenq)