PassportScannerNs 2.1.6

PassportScannerNs 2.1.6

Max Baki 维护。



 
依赖关系
TesseractOCRiOS>= 0
GPUImage>= 0
UIImage-Resize>= 0
EVGPUImage2>= 0
 

PassportScanner

Build Status Issues Stars Version License Platform Documentation

Git Twitter LinkedIn eMail

在分支上工作

在这个分支中,GPUImage 库已经被升级到了 GPUImage2。当前状态如下:

  • 更简洁的代码
  • 有两个扫描方法的版本,每个版本都有其自身缺点。(崩溃或图像保存到磁盘)
  • 由于某些原因,tesseract 只扫描图像的左侧部分。

这是什么

通过 PassportScanner,您可以使用相机扫描护照的 MRZ 代码。它将提取所有数据,如名、姓、护照号码、国籍、出生日期、失效日期和个人编号。

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

PassportScanner 正在尝试通过先执行一些图形滤镜来优化 OCR 结果。曝光滤镜是动态的。这意味着如果图像较暗,它会尝试使图像变亮,反之亦然。正如您在下方的演示动画中可以看到,您大约每3秒就能扫描一次护照。

等待下面的 .gif 文件下载完成...

animated

构建 PassportScanner 示例

当前版本已与 Xcode 7 和 Xcode 7.1 beta 1 进行测试。

  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 - 或者在保持纵横比的情况下 fit 到 CGSize。

在自己的应用中使用 PassportScanner

当前,“PassportScanner” 通过依赖管理器 CocoaPods 可用。此时,可以通过执行以下命令进行安装:

[sudo] gem install cocoapods

如果您已安装 Cocoapods,您只需确保以下行包含在您的 Podfile 中,即可将 PassportScanner 添加到您的 workspace:

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
        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 - 基于 (字典、CKRecord、JSON 和 XML) 反射的对象映射,Alamofire 和 Moya 扩展兼容 RxSwift 或 ReactiveSwift
  • EVCloudKitDao - 简化对 Apple CloudKit 的访问
  • EVFaceTracker - 根据您设备与脸部的关系计算相距和角度,以模拟 3D 效果
  • EVURLCache - 一个 NSURLCache 子类,用于处理所有使用 NSURLReques 发起的网页请求
  • AlamofireOauth2 - 使用 Alamofire 实现的 OAuth2
  • EVWordPressAPI - 使用 AlamofireOauth2、AlomofireJsonToObjects 和 EVReflection 实现的 WordPress(Jetpack)API 的 Swift 实现(工作进行中)
  • PassportScanner - 扫描护照的 MRZ 代码并提取姓、名、护照号码、国籍、出生日期、过期日期和人员编号
  • AttributedTextView - 用于创建带有支持多个链接(网址、话题、提及)的属性化 UITextView 的最简单方法