PassportScanner
支持2行和3行的身份证件。
这是什么
使用PassportScanner,您可以使用相机扫描护照的MRZ代码。它将提取所有数据,如姓氏、名字、护照号码、国籍、出生日期、到期日期和个人编号。支持TD1和TD3格式(2行或3行)。
重要通知:在大多数情况下,扫描身份证件是受法律限制的。使用此工具时要遵守相关法律。版权所有者对本工具的不当使用不负任何责任。
PassportScanner通过首先执行一些图形过滤器来尝试优化OCR结果。曝光过滤器是动态的。这意味着如果图片暗淡,它会尝试使之变亮,反之亦然。如图下演示动画所示,您的大约每3秒可以扫描一次护照。
请稍等,直到下方的.gif下载完成...
构建PassportScanner演示
当前版本使用 Xcode 11.3,Swift 5 进行测试。
-
将仓库克隆到工作目录。
-
CocoaPods用于管理依赖。Pods 设置简单,并通过 Ruby Gem 分发。按照网站上的简单说明进行设置。设置完成后,在 PassportScanner 的顶级目录下运行以下命令来下载依赖项:
pod install
-
在 Xcode 中打开
PassportScanner.xcworkspace
。 -
构建并运行应用。
演示的外部组件
PassportScanner 使用以下组件,可以使用 CocoaPods 进行安装。
- TesseractOCRiOS Tesseract OCR iOS 是适用于 iOS7+ 的框架。
- GPUImage 基于GPU的图像和视频处理的开源iOS框架。
- UIImage-Resize 为 UIImage 类添加了一些调整大小的方法,可以将它调整到指定的 CGSize,或者保持纵横比将其调整到设定的 CGSize。
在您的应用中使用 PassportScanner
'PassportScanner' 现在可以通过依赖管理工具 CocoaPods 获取。目前,您可以通过执行以下操作进行安装:
[sudo] gem install cocoapods
如果您已安装 Cocoapods,请确保 Podfile 中的以下行:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
pod "PassportScanner"
在您的 Swift 文件的顶部添加一个导入,如下所示:
import PassportScanner
如果您需要支持低于 iOS 8.0 的旧版本,还可以将包含2个类 MRZ 和 PassportScannerController 的 Pod 文件夹复制到您的应用中。同时,将上述提到的外部组件添加到 Podfile。
当 PassportScanner 添加到项目中时,将演示应用的 Main.storyboard 中的 PassportScanner 视图复制到您的自己的 storyboard 中。之后,您可以自定义该视图。还将 MyScanViewController.swift 复制到您的项目中。查看 ViewConroller.swift,了解如何初始化视图和获取 MRZ 数据。
还将 tessdata 文件夹复制到我们的应用中。该文件夹包含 tesseract(OCR 引擎)的训练数据。
以下是 PassportScannerController 的示例代码:
protocol ProcessMRZ {
func processMRZ(mrz:MRZ)
}
class MyScanViewController: PassportScannerController {
var delegate: ProcessMRZ?
// the .StartScan and .EndScan are IBOutlets and can be linked to your own buttons
// For now just start scanning the moment this view is loaded
override func viewDidLoad() {
super.viewDidLoad();
self.debug = true // So that we can see what's going on (scan text and quality indicator)
self.accuracy = 1 // 1 = all checksums should pass (is the default so we could skip this line)
self.mrzType = .auto // Performs a little better when set to td1 or td3
self.showPostProcessingFilters = true // Set this to true to to give you a good indication of the scan quality
self.StartScan(self)
}
override func succesfullScan(mrz: MRZ) {
print("mrz: {\(mrz.description)\n}")
delegate?.processMRZ(mrz)
self.dismissViewControllerAnimated(true, completion: nil)
}
override func abbortScan() {
self.dismissViewControllerAnimated(true, completion: nil)
}
}
然后在您的代码中,您可以通过以下方式访问 PassportScannerController 并处理 MRZ 数据:
class ViewController: UIViewController, ProcessMRZ {
@IBOutlet weak var mrzLabel: UILabel!
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.Portrait
}
override func prefersStatusBarHidden() -> Bool {
return true
}
@IBAction func StartScan(sender: AnyObject) {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let scanVC: MyScanViewController = storyboard.instantiateViewControllerWithIdentifier("PassportScanner") as! MyScanViewController
scanVC.delegate = self
self.presentViewController(scanVC, animated: true, completion: nil)
}
func processMRZ(mrz:MRZ) {
self.mrzLabel.text = mrz.description
mrzLabel.sizeToFit()
}
}
许可证
PassportScanner 使用 MIT 3 许可。更多信息请参阅 LICENSE 文件。
我的其他库
还有我的其他开源 iOS 库
- EVReflection - 基于反射的对象映射(Dictionary、CKRecord、JSON 和 XML),支持 Alamofire、Moya 与 RxSwift 或 ReactiveSwift 扩展
- EVCloudKitDao - 简化 Apple CloudKit 的访问
- EVFaceTracker - 计算设备相对于人脸的距离和角度,以模拟 3D 效果
- EVURLCache - 用于处理所有使用 NSURLRequest 的网络请求的 NSURLCache 子类
- AlamofireOauth2 - 使用 Alamofire 实现的 OAuth2
- EVWordPressAPI - 使用 AlamofireOauth2、AlomofireJsonToObjects 和 EVReflection 实现的 WordPress (Jetpack) API(工作进行中)
- PassportScanner - 扫描护照的 MRZ 条码,提取名字、姓氏、护照号码、国籍、出生日期、过期日期和个人编号。
- AttributedTextView - 创建带多个链接(url、hashtag、mention)的 attributed UITextView 的最简单方式。