Files
documents-ocr-ios/Example/DocumentsOCR/PassportViewController.swift
2016-10-11 15:43:13 +03:00

180 lines
5.5 KiB
Swift
Executable File

//
// TakePhotoViewController.swift
// PassportOCR
//
// Created by Михаил on 03.09.16.
// Copyright © 2016 empatika. All rights reserved.
//
import UIKit
import Darwin
import DocumentsOCR
import SVProgressHUD
class PassportViewController: UITableViewController {
var scanner: DocumentScanner!
var selectedTextField: PassportTextField!
@IBOutlet weak var countryField: PassportTextField!
@IBOutlet weak var surnameField: PassportTextField!
@IBOutlet weak var nameField: PassportTextField!
@IBOutlet weak var numberField: PassportTextField!
@IBOutlet weak var nationalityField: PassportTextField!
@IBOutlet weak var dobField: PassportTextField!
@IBOutlet weak var sexField: PassportTextField!
@IBOutlet weak var expiredDateField: PassportTextField!
@IBOutlet weak var personalNumberField: PassportTextField!
@IBOutlet weak var cameraImageView: UIImageView!
let countries = Utils.stringFromTxtFile("CountryCodes")!.components(separatedBy: "\n")
func dismissKeyboard() {
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! as NSString
NSLog("\(paths)")
scanner = DocumentScanner(containerVC: self, withDelegate: self)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
self.view.addGestureRecognizer(tapGesture)
self.cameraImageView.contentMode = .scaleAspectFit
// Set up country fields:
let countryPicker = UIPickerView()
countryPicker.delegate = self
countryPicker.dataSource = self
countryPicker.showsSelectionIndicator = true
countryField.delegate = self
nationalityField.delegate = self
countryField.inputView = countryPicker
nationalityField.inputView = countryPicker
// Set up date fields:
let datePicker = UIDatePicker()
datePicker.addTarget(self, action: #selector(PassportViewController.datePickerValueChanged(_:)), for: .valueChanged)
datePicker.datePickerMode = UIDatePickerMode.date
dobField.delegate = self
expiredDateField.delegate = self
dobField.inputView = datePicker
expiredDateField.inputView = datePicker
}
func datePickerValueChanged(_ sender: UIDatePicker) {
selectedTextField.text = sender.date.stringDate
}
@IBAction func cameraClicked(_ sender: UIBarButtonItem) {
scanner.presentCameraViewController()
}
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
return .portrait
}
}
extension PassportViewController: DocumentScannerDelegate {
func documentScanner(_ scanner: DocumentScanner, willBeginScanningImages images: [UIImage]) {
self.cameraImageView.image = images.first!
SVProgressHUD.showProgress(0, status: "Scanning")
}
func documentScanner(_ scanner: DocumentScanner, recognitionProgress progress: Double) {
SVProgressHUD.showProgress(Float(progress), status: "Scanning")
}
func documentScanner(_ scanner: DocumentScanner, didFinishScanningWithInfo info: DocumentInfo) {
NSLog("Info: \(info)")
countryField.text = info.issuingCountryCode
surnameField.text = info.lastname
nameField.text = info.name
numberField.text = info.passportNumber
nationalityField.text = info.nationalityCode
dobField.text = info.dateOfBirth?.stringDate
let sex: String = {
switch info.gender {
case .female:
return "Женщина"
case .male:
return "Мужчина"
default:
return "?"
}
}()
sexField.text = sex
expiredDateField.text = info.expirationDate?.stringDate
personalNumberField.text = info.personalNumber
SVProgressHUD.dismiss()
}
func documentScanner(_ scanner: DocumentScanner, didFailWithError error: NSError) {
NSLog("Ошибка \(error.localizedDescription)")
SVProgressHUD.dismiss()
self.showErrorAlert(withMessage: error.localizedDescription)
}
}
extension PassportViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
guard let passportField = textField as? PassportTextField else {
NSLog("Ошибка: неверный тип текстового поля")
return true
}
selectedTextField = passportField
return true
}
}
extension PassportViewController: UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return countries.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return countries[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectedTextField?.text = countries[row].substring(from: 0, to: 2)
}
}