无法阅读佛罗里达州驾驶执照PDF417条码iOS Swift 5

时间:2020-07-23 10:39:05

标签: ios swift barcode-scanner pdf417

条形码扫描出现问题。我正在尝试解码Florida DL pdf417,但是我的代码无法扫描,但是其他DL pdf417条形码正在通过我的代码进行扫描。我不知道发生了什么,或者我什么都没想到。请帮助我解决此问题,我的代码如下:

import UIKit
import AVFoundation

class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

    var captureSession: AVCaptureSession!
    var previewLayer: AVCaptureVideoPreviewLayer!
    let metadataOutput = AVCaptureMetadataOutput()
   
    var barcode_symbole = "PDF417"

    var img = UIImageView()
 
    override func viewDidLoad() {
        super.viewDidLoad()
        
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
         
            view.backgroundColor = UIColor.black
            captureSession = AVCaptureSession()
            guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
            let videoInput: AVCaptureDeviceInput
              do {
                  videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
                
              } catch {
                  return
              }
        
        
                  captureSession.addInput(videoInput)

                captureSession.addOutput(metadataOutput)
                metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
               metadataOutput.metadataObjectTypes = metadataOutput.availableMetadataObjectTypes
            //  metadataOutput.metadataObjectTypes = [.aztec]
           
        
         previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
               previewLayer.frame = view.layer.bounds
               previewLayer.videoGravity = .resizeAspectFill
               view.layer.addSublayer(previewLayer)
               captureSession.startRunning()
        
        do {
                   try videoCaptureDevice.lockForConfiguration()
                   defer { videoCaptureDevice.unlockForConfiguration() }
            
            videoCaptureDevice.videoZoomFactor = 1.0
            videoCaptureDevice.isSmoothAutoFocusEnabled = true
            videoCaptureDevice.focusMode = .locked

                 //  videoCaptureDevice.videoZoomFactor = videoCaptureDevice.activeFormat.videoZoomFactorUpscaleThreshold
            videoCaptureDevice.unlockForConfiguration()
            
        } catch {
                   debugPrint(error)
               }
        
        
    }
   

    func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
        output.metadataObjectTypes=output.availableMetadataObjectTypes

         captureSession.stopRunning()
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        let metadataObject = metadataObjects.first
        print(metadataObject?.type)
        captureSession.startRunning()

        
        guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
        guard readableObject.stringValue != nil else { return }
        AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
        print(readableObject.stringValue as Any)

        let licenseData = readableObject.stringValue!.components(separatedBy: "@")
        print(licenseData)
                
           
          DispatchQueue.main.async {
        let alert = UIAlertController(title: "Alert", message: licenseData.description, preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "Click", style: UIAlertAction.Style.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
        
        }
   
        captureSession.startRunning()
      }
 
    
   override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            if (captureSession?.isRunning == false) {
                captureSession.startRunning()
            }
         }
}

0 个答案:

没有答案