【问题标题】:iOS: Real Time OCR on top of live camera feed (similar to iTunes Redeem Gift Card)iOS:实时 OCR 实时摄像头馈送(类似于 iTunes 兑换礼品卡)
【发布时间】:2013-10-06 17:45:02
【问题描述】:

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

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

还有一个过程的视频:

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

最好的,

【问题讨论】:

  • 嗨@boliva,在您提出问题 3 年后,您是否访问过任何我们可以依赖的库,用于使用 IOS 进行实时 OCR

标签: ios ocr


【解决方案1】:

我正在做一个类似于你提到的用相机兑换苹果应用商店的项目。

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

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

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

其他一些提示:

  • 我使用“Instant OpenCV”一书快速入门。这很有帮助。
  • 从 OpenCV.org/downloads.html 下载适用于 iOS 的 OpenCV
  • 我发现自适应阈值非常有用,您可以通过搜索“OpenCV AdaptiveThreshold”来阅读所有相关信息。此外,如果您的图像中的明暗元素很少,您可以使用Otsu's Binarization。这会根据灰度图像的直方图自动确定阈值。

【讨论】:

    【解决方案2】:

    这个问答主题似乎一直是 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 开发人员工具套件的一部分,在撰写本文时处于测试阶段。与 Apple 的 CoreML 类似,它是一个机器学习框架,可以使用您自己训练的模型,但也有预训练的模型,可用于 Vision Framework 等常见图像处理任务。 视觉框架不同,这个包括一个用于拉丁字符的设备上文本识别的模型。目前,该库免费用于设备上的功能,使用 Google 提供的云/SAAS API 产品需要付费。我选择在我的项目中使用它,因为识别的速度和准确性似乎相当不错,而且我还将创建一个具有相同功能的 Android 应用程序,因此拥有一个单一的跨平台解决方案对我来说是理想的。

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

    【讨论】:

    【解决方案3】:

    “实时”只是一组图像。您甚至不需要考虑处理所有这些,只要足以广泛地表示设备的运动(或相机位置的变化)即可。 iOS SDK 中没有内置任何东西来做你想做的事,但你可以使用第 3 方 OCR 库(如 Tesseract)来处理你从相机抓取的图像。

    【讨论】:

    • 所以你会每秒截图并处理它?
    • 不是屏幕截图,因为我们正在谈论来自相机的视图。无论如何,提供了合适的 API 用于像这样与相机交互(参见其他答案)。处理频率取决于您要达到的目标,用户测试会告诉您最佳速率。 @LinusGeffarth
    • 也许这会有所帮助 - medium.com/flawless-app-stories/…
    【解决方案4】:

    我会调查Tesseract。它是一个开源 OCR 库,可以获取图像数据并对其进行处理。您可以添加不同的正则表达式,也可以只查找特定字符。它并不完美,但根据我的经验,它运作良好。如果你喜欢这种东西,它也可以作为 CocoaPod 安装。

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

    【讨论】:

    • 听起来很有趣,我去看看
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2012-12-29
      • 2012-02-20
      • 2019-12-26
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 2014-06-15
      相关资源
      最近更新 更多