iOS:实时摄像头上的实时OCR(类似于iTunes Redeem礼品卡)

时间:2013-09-30 18:38:57

标签: ios ocr

有没有办法完成类似于iTunes和App Store应用程序在您使用设备相机兑换礼品卡时所做的事情,在实时相机Feed之上实时识别短字符串?

iTunes App Redeem Gift Card UI

我知道在iOS 7中现在有AVMetadataMachineReadableCodeObject类,AFAIK只代表条形码。我更感兴趣的是检测和读取短字符串的内容。这可能是使用公开的API方法,或者您可能知道的其他第三方SDK吗?

还有一个关于该过程的视频:

https://www.youtube.com/watch?v=c7swRRLlYEo

最佳,

5 个答案:

答案 0 :(得分:15)

我正在开发一个与Apple应用商店类似的项目,就像你提到的那样用相机兑换。

处理实时视频的一个很好的起点是a project I found on GitHub。这是使用AVFoundation框架并实现AVCaptureVideoDataOutputSampleBufferDelegate方法。

获得图像流(视频)后,您可以使用OpenCV处理视频。在通过Tesseract运行之前,您需要确定要OCR的图像区域。您必须使用过滤,但您使用OpenCV采取的主要步骤是:

  • 使用cv :: cvtColor(inputMat,outputMat,CV_RGBA2GRAY)将图像转换为B& W;
  • 阈值图像以消除不必要的元素。您指定要消除的阈值,然后将其他所有内容设置为黑色(或白色)。
  • 确定构成框边界的线(或您正在处理的任何线)。你可以创建一个"边界框"如果您已经消除了除所需区域之外的所有内容,或使用HoughLines算法(或概率版本,HoughLinesP)。使用此功能,您可以确定线路交叉点以查找角点,并使用角点扭曲所需区域,以便在OCR之前将其拉直到适当的矩形(如果在您的应用中需要此步骤)。
  • 使用Tesseract OCR库处理图像部分以获取生成的文本。可以在OpenCV中为字母创建训练文件,这样您就可以在没有Tesseract的情况下阅读文本。这可能会更快,但也可能是更多的工作。在App Store中,他们正在做类似的事情,以显示覆盖在原始图像顶部的文本。这增加了很酷的因素,所以它只取决于你需要的东西。

其他一些提示:

  • 我使用了这本书" Instant OpenCV"快点开始吧。这非常有帮助。
  • 从OpenCV.org/downloads.html下载OpenCV for iOS
  • 我发现自适应阈值处理非常有用,您可以通过搜索" OpenCV adaptiveThreshold"来阅读所有相关内容。此外,如果您的图像中明暗元素之间的图像很少,则可以使用Otsu's Binarization。这会根据灰度图像的直方图自动确定阈值。

答案 1 :(得分:8)

此问与答线程似乎一直是iOS上OCR主题的热门搜索命中之一,但已经过时了,所以我想我会发布一些我认为可能有用的其他资源截至撰写本文时:

视觉框架
https://developer.apple.com/documentation/vision
从iOS 11开始,您现在可以使用随附的基于CoreML的Vision框架进行矩形或文本检测之类的操作。我发现我不再需要将OpenCV与操作系统中包含的这些功能一起使用。但是,请注意,文本 detection 与文本 recognition 或OCR不同,因此您仍然需要另一个库,例如Tesseract(或可能是您自己的CoreML模型)来翻译检测到的文本。图片的一部分变成实际的文字。

SwiftOCR
https://github.com/garnele007/SwiftOCR
如果您只想识别字母数字代码,则此OCR库声称与Tesseract相比具有显着的速度,内存消耗和准确性改进(我自己还没有尝试过)。

机器学习套件
https://firebase.google.com/products/ml-kit/
在撰写本文时,Google已将ML Kit作为其Firebase开发人员工具套件的一部分发布了beta版。与Apple的CoreML相似,它是一种机器学习框架,可以使用您自己训练有素的模型,但也具有针对常见图像处理任务(如Vision Framework)的预先训练模型。 视觉框架不同,该包括用于拉丁字符的设备上文本识别的模型。目前,此库免费用于设备上功能,并且免费使用Google提供的cloud / SAAS API产品。我选择在项目中使用此功能,因为识别的速度和准确性似乎都不错,而且我还将创建一个具有相同功能的Android应用,因此拥有一个跨平台解决方案对我来说是理想的选择。

ABBYY实时识别SDK
https://rtrsdk.com/
这个免费的iOS和Android商业SDK可以免费下载以进行评估和有限的商业用途(撰写本文时,最多5000个单位)。进一步的商业使用需要扩展许可。由于定价不透明,我没有对它进行评估。

答案 2 :(得分:4)

'实时'只是一组图像。您甚至不需要考虑处理所有这些,只是足以广泛地表示设备的运动(或摄像机位置的变化)。 iOS SDK没有内置任何功能,但您可以使用第三方OCR库(如Tesseract)处理从相机中获取的图像。

答案 3 :(得分:4)

我会调查Tesseract。它是一个开源OCR库,可以获取图像数据并对其进行处理。您可以添加不同的正则表达式,也只查找特定字符。它并不完美,但从我的经验来看,它的效果非常好。它也可以作为CocoaPod安装,如果您进入那种事情。

如果您想要实时捕捉它,您可以使用GPUImage来捕捉实时Feed中的图像,并对传入的图像进行处理,以通过使用不同的过滤器或缩小尺寸来加速Tesseract传入图像的质量。

答案 4 :(得分:4)

有一个类似于github的项目:https://github.com/Devxhkl/RealtimeOCR