VinnyOCR
VinnyOCR 是一个快速且小巧的 Swift 编写的 OCR 库。借助 Accelerate 和 Vision 框架,它使用神经网络来识别文本。VinnyOCR 是为了识别短的一行长,由数字和字母组成的代码(例如,DI49CM)而创建和优化的。目前只支持 iOS 和 macOS。
灵感来源
此项目受到了 SwiftOCR 的启发。这两个项目之间的区别在于 VinnyOCR 使用了 Apple 内部框架(Accelerate 和 Vision)进行图像操作和文本定位。
特性
-
易于使用的训练工具
-
高准确性
-
快速
-
小巧
要求
-
iOS 11.0+/macOS 10.13+
-
Swift 5.0+
安装
CocoaPods
要使用CocoaPods集成VinnyOCR到您的Xcode项目中,请在您的Podfile
中添加它
pod 'VinnyOCR'
工作原理
-
输入图像将被阈值化(二值化)
-
图像中的字符被定位并单独转换为浮点数组
-
每个浮点数组都通过神经网络传递
如何使用
使用VinnyOCR非常简单。
import VinnyOCR
let modelUrl = Bundle.main.url(forResource: "VinnyOCR", withExtension: "ocr")!
let vinny = VinnyOCR(url: modelUrl)!
vinny.recognize(someImage) { (text) in
print(text)
}
当构建配置设置为Release
时,VinnyOCR运行得更快。
训练
要训练一个用于使用的模型,克隆此存储库并打开位于Trainer
目录中的VinnyOCR Trainer
Xcode项目。
启动训练应用程序后,进行以下操作
-
通过为每个字体点击
Should Train?
列中的复选框来选择要使用哪些字体来训练模型。 -
通过点击
Choose Backgrounds
并选择一些图像文件来选择要使用哪些背景来训练模型。此存储库的Trainer/Sample Backgrounds/
目录中提供了示例训练背景。 -
通过点击
Choose Output Directory
来选择输出模型文件的位置。一旦训练完成,模型文件将被保存到该目录中。 -
按下《开始训练》按钮。默认错误阈值设置为网络不太可能达到的值。相反,在开始训练后,等待5-10分钟,然后按下《停止训练》- 生成的模型只要模型错误小于100就会工作。模型错误以
<current model error>/<target model error>
格式显示在开始/停止训练按钮旁边。
备注
-
在您开始训练后,如果1分钟后模型错误没有降到100以下,请按下《停止训练》和《开始训练》重新启动训练过程。这将生成具有新权重的网络。
-
可以通过编辑
TrainingParameters.swift
中的值来修改训练参数。
计划改进
-
在README中添加训练截图
-
在训练期间扭曲生成的训练图像
-
允许在训练期间动态使用字符集
致谢
许可
该VinnyOCR在MIT许可下发布。详细内容请参阅LICENSE。