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)
}
}
```