2

カメラを使用するのではなく、カードの写真を見るように Microblink カード リーダーに指示しています。Mastercard のポートレート バージョンとランドスケープ バージョンの両方を試しました。これは、主な変数を宣言する方法です。

let blinkCardRecognizer = MBCBlinkCardRecognizer()
var recognizerList = [MBCRecognizer]()

lazy var recognizerCollection: MBCRecognizerCollection = {
    blinkCardRecognizer.extractCvv = false
    blinkCardRecognizer.extractIban = false
    blinkCardRecognizer.extractExpiryDate = false

    recognizerList.append(blinkCardRecognizer)
    return MBCRecognizerCollection(recognizers: recognizerList)
}()
lazy var recognizerRunner: MBCRecognizerRunner = {
    MBCRecognizerRunner(recognizerCollection: recognizerCollection)
}()

次の 2 つのデリゲートを宣言しました。

MBCBlinkCardOverlayViewControllerDelegate, MBCScanningRecognizerRunnerDelegate

UIImage を取得したら、次の関数を呼び出します。

func prepareToReadImage(_ theImage: UIImage?) {
    recognizerRunner.scanningRecognizerRunnerDelegate = self
    
    var image: MBCImage? = nil
    if let anImage = theImage {
        image = MBCImage(uiImage: anImage)
    }
    image?.cameraFrame = true
    image?.orientation = MBCProcessingOrientation.down
    let _serialQueue = DispatchQueue(label: "com.microblink.DirectAPI-sample-swift")
    _serialQueue.async(execute: {() -> Void in
        self.recognizerRunner.processImage(image!)
    })
}

これが私のデリゲート コールバックです。毎回、次のステータスを取得しています.empty

func recognizerRunner(_ recognizerRunner: MBCRecognizerRunner, didFinishScanningWith state: MBCRecognizerResultState) {
    if state == .valid { // values: .empty, .uncertain, .valid, .stageValid
        let result = blinkCardRecognizer.result
        
        DispatchQueue.main.async(execute: {() -> Void in
            print (result.owner)
            print (result.cardNumber)
            print (result.cardNumberPrefix)
        })
    }
}

.valid返信が来ない理由は何かありますか? また、これはカードの詳細を引き出す正しい方法のように見えますか? ありがとう!

4

2 に答える 2