iOS中的视觉:文本检测和Tesseract识别

让我告诉你一个故事。
两周前,我参加了奥斯陆的愚蠢黑客马拉松比赛,在那里人们提出了一些愚蠢的想法,并一起遭到黑客攻击。 当我刚刚看过唐纳德·特朗普(Donald Trump)的大数字计数剪辑时,我认为制作一个有趣的iOS应用程序可能会是一个好/愚蠢的想法,该应用程序可以识别所有数字并通过特朗普的声音判断数字是否足够大。

首先,我们需要设置摄像机会话,因为我们需要捕获图片以进行文本识别。 相机逻辑及其预览层封装在自定义视图控制器CameraController

仍然在BoxService ,我们应该在检测到的矩形中裁剪图像以进行OCR(光学字符识别)。 我们以捕获图像的坐标进行计算,然后插入一个较大的图像以拍摄稍大的图像以适应顶部和底部边缘。 代码从VNFaceObservation的Convert Vision boundingBox调整为rect以绘制图像:

现在,我们已经有了准备用于文本识别的图像。 让我们使用OCRService

我个人喜欢纯Swift解决方案,因此SwiftOCR是一个完美的选择,据说它的性能要比Tesseract好。 所以我尝试了一下。 API再简单不过了。

Tesseract是“是用于各种操作系统的光学字符识别引擎。 它是免费软件,根据Apache许可证2.0版发布,自2006年以来由Google赞助开发。” iOS端口在GitHub上是开源的,并具有CocoaPods支持。 因此,只需将Podfile pod 'TesseractOCRiOS'放入Podfile就可以了。

与自述文件和TestsProject中一样,需要tessdata ,它包含Tesseract可以使用的语言信息。 如果没有此tessdata则框架TesseractOCR会大喊一些有关缺少TESSDATA_PREFIX.警告TESSDATA_PREFIX.

对引用的“ tessdata”文件夹中存在的语言文件的严格要求。

从此处下载tessdata ,添加它作为对Xcode项目的reference 。 蓝色表示该文件夹已添加为参考。

您可能还需要将libstdc++.dylibCoreImage.framework到目标中:

Tesseract

使用Tesseract很容易。 记住要导入TesseractOCR而不是TesseractOCRiOS:

现在,我们可以使用AVPlayerMusicService类中播放声音。 生成并运行该应用程序,将您的相机指向一些数字,点击屏幕,然后应用程序应检测到文字,识别该数字并播放有关特朗普的声音。

这个应用程序可能不是很有用,但可以进行调整以更实际地使用,例如跟踪房间预订,电话号码分析或简单的文本扫描。

我希望你能学到一些东西。 以下是一些其他链接,可帮助您开始在iOS上进行文本检测:

  • 适用于iOS的Tesseract OCR教程:了解如何在iOS中使用Tesseract框架,并详细说明使用它时可能遇到的一些问题。
  • 通过iOS的ML框架在您的掌中利用机器学习:如何在SwiftOCR中使用视觉。
  • tesseract.js:以Java语言实现的Tesseract。 它与iOS无关,但是最好在其他平台上使用Tesseract的重要性。
  • 视觉中的对象跟踪:在WWDC 2018上,iOS中的视觉发生了有趣的变化。对象跟踪和自定义模型训练方面有很多改进。
  • 在静态图像中检测对象:Apple官方示例代码,使用Vision框架定位和划分图像中的矩形,面,条形码和文本。
  • 将iOS的Google ML Kit集成到人脸检测,文本识别等功能中:Google今年在Google IO上推出了ML Kit,它也擅长文本识别。 该框架同时支持iOS和Android。