PassportScanner 4.7.0

PassportScanner 4.7.0

evermeer维护。



 
依赖
TesseractOCRSDKiOS>= 0
GPUImage>= 0
UIImage-Resize>= 0
EVGPUImage2>= 0
 

PassportScanner

支持2行和3行的身份证件。

Build Status Issues Stars Version License Platform Documentation

Git Twitter LinkedIn eMail

这是什么

使用PassportScanner,您可以使用相机扫描护照的MRZ代码。它将提取所有数据,如姓氏、名字、护照号码、国籍、出生日期、到期日期和个人编号。支持TD1和TD3格式(2行或3行)。

重要通知:在大多数情况下,扫描身份证件是受法律限制的。使用此工具时要遵守相关法律。版权所有者对本工具的不当使用不负任何责任。

PassportScanner通过首先执行一些图形过滤器来尝试优化OCR结果。曝光过滤器是动态的。这意味着如果图片暗淡,它会尝试使之变亮,反之亦然。如图下演示动画所示,您的大约每3秒可以扫描一次护照。

请稍等,直到下方的.gif下载完成...

animated

构建PassportScanner演示

当前版本使用 Xcode 11.3,Swift 5 进行测试。

  1. 将仓库克隆到工作目录。

  2. CocoaPods用于管理依赖。Pods 设置简单,并通过 Ruby Gem 分发。按照网站上的简单说明进行设置。设置完成后,在 PassportScanner 的顶级目录下运行以下命令来下载依赖项:

pod install
  1. 在 Xcode 中打开 PassportScanner.xcworkspace

  2. 构建并运行应用。

演示的外部组件

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 的最简单方式。