iOS11之后识别图片中二维码、条形码

1,002 阅读1分钟

import Vision

lazy var barcodeRequest: VNDetectBarcodesRequest = {

        let barcodeRequest = VNDetectBarcodesRequest { request, error in

            guard let observations = request.results as? [VNBarcodeObservation]


            else { fatalError("unexpected result type from VNBarcodeRequest") }

            guard observations.first != nil else {

                DispatchQueue.main.async {

                    debugPrint("observations.first is nil")

                    let alert = UIAlertController(title: nil, message: "照片中未发现二维码/条形码", preferredStyle: .alert)

                    let confirmAction = UIAlertAction(title: "确定", style: UIAlertAction.Style.default) { action in

                        self.dismiss(animated: true, completion: nil)

                    }

                    alert.addAction(confirmAction)

                    self.present(alert, animated: true, completion: nil)

                }

                return

            }

            

            // Loop through the found results

            if let result = request.results?.last {

                // Cast the result to a barcode-observation

                if let barcode = result as? VNBarcodeObservation ,let content = barcode.payloadStringValue  {

                    let symbology = barcode.symbology.rawValue

                    var codeType = AVMetadataObject.ObjectType.qr

                    switch symbology {

                    case "VNBarcodeSymbologyCode128":

            
                    case "VNBarcodeSymbologyQR":

                    default:

                        break

                    }

                    debugPrint("VNBarcodeObservation  : \(content) symbology = \(symbology)")

                    

                }

            }

        }

        barcodeRequest.symbologies = [VNBarcodeSymbology.Code128,VNBarcodeSymbology.QR]

        return barcodeRequest

    }()

调用

 guard let img = image ,let ciImage = CIImage(image: img) else {

                        return

                    }

                    let handler = VNImageRequestHandler(ciImage: ciImage, options: [VNImageOption.properties : ""])

                    DispatchQueue.global(qos: .userInteractive).async {

                        do {

                            

                            try handler.perform([self?.barcodeRequest as! VNRequest])

                        } catch let error {

                            debugPrint(error)

                        }

                    }
                    ```