【发布时间】:2014-06-30 20:41:03
【问题描述】:
我刚开始接触 Tesseract 库,但结果真的很糟糕。
我按照 Git 存储库 (https://github.com/gali8/Tesseract-OCR-iOS) 中的说明进行操作。我的 ViewController 使用以下方法开始识别:
Tesseract *t = [[Tesseract alloc] initWithLanguage:@"deu"];
t.delegate = self;
[t setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" forKey:@"tessedit_char_whitelist"];
[t setImage:img];
[t recognize];
NSLog( @"Recognized text: %@", [t recognizedText] );
labelRecognizedText.text = [t recognizedText];
t = nil;
效果很好(这告诉我项目本身设置正确),但每当我尝试使用其他图像时,识别的文本都是一团糟。例如,我尝试拍摄显示示例图像的 finder 的照片:
https://dl.dropboxusercontent.com/u/607872/tesseract.jpg (1.5 MB)
但 Tesseract 可以识别:
Recognized text: s f l TO if v Ysssifss f
ssqxizg ss sfzzlj z
s N T IYIOGY Z I l EY s s
k Es ETL ZHE s UEY
z xhks Fsjs Es z VIII c
s I XFTZT c s h V Ijzs
L s sk sisijk J
s f s ssj Jss sssHss H VI
s s H
i s H st xzs
s s k 4 is x2 IV
Illlsiqss sssnsiisfjlisszxiij s
K
即使字符白名单只包含数字,我也没有得到结果,甚至接近图像的样子:
Recognized text: 3 74 211
1
1 1 1
3 53 379 1
3 1 33 5 3 2
3 9 73
1 61 2 2
3 1 6 5 212 7
1
4 9 4
1 17
111 11 1 1 11 1 1 1 1
我假设从iPad Mini的摄像头拍摄我目前使用的方式有问题,但我无法弄清楚什么和为什么。
有什么提示吗?
更新 #1
回应托马斯:
我按照您帖子中的教程进行操作,但在此过程中遇到了几个错误...
-
UIImage+OpenCV类别不能在我的 ARC 项目中使用 - 我无法在我的控制器中导入
<opencv2/...>在我的控制器中,自动完成不提供它(因此[UIImage CVMat]未定义)
我认为我对OpenCV的集成有问题,即使我跟随你好教程并添加了框架。我还需要在Mac上构建OpenCV,或者是否足以在我的Xcode项目中包含框架?
由于目前我真的不知道您可能认为什么是“重要的”(我已经阅读了几篇文章和教程并尝试了不同的步骤),请随时提问 :)
更新 #2
@Tomas:谢谢,ARC 部分是必不可少的。我的 ViewController 已经重命名为 .mm。忘记了关于“无法导入OpenCV2 /”的一部分,因为我已经在我的TestApp-Prefix.pch(如hello-tutorial中所述)。
迎接下一个挑战;)
我注意到,当我使用用相机拍摄的图像时,没有成功计算roi 987654333 @对象的界限。我玩弄了设备方向并在我的视图中放置了UIImage 以查看图像处理步骤,但有时(即使图像正确对齐)这些值也是负数,因为bounds.size() 中的if-条件-for-loop 不满足。我遇到的最坏情况:从未触及过 minX/Y 和 maxX/Y。长话短说:从@ 987654338开始的行@抛出异常(断言失败,因为值为987654339 @)。我不知道是否是轮廓的数量,但我假设是因为图像越大,断言异常的可能性就越有可能。
说实话:我没有时间阅读 OpenCV 的文档并了解您的代码的作用,但到目前为止,我认为没有办法解决。似乎不幸的是,我的初始任务(扫描收据,运行OCR,在表中显示项目)需要比我想象的更多资源(=时间)。
【问题讨论】: