iOS --- 识别相册中图片上的二维码

1.打开相册

       let vc = TZImagePickerController(maxImagesCount: 1, delegate: self)!
        vc.allowTakeVideo = false
        vc.allowPickingVideo = false
        vc.allowPickingGif = false
        vc.allowCameraLocation = false
        vc.sortAscendingByModificationDate = false
        self.present(vc, animated: true, completion: nil)
        vc.didFinishPickingPhotosHandle = { photos,assets,isSelectOriginalPhoto in
            if photos != nil {
                if let image = photos!.first!.cgImage {
                //拿到图片 去做识别处理
                    self.imageVisionRequest(image: image)
                }
            }
        }

2.识别图片方法

 //MARK: 图片识别
    func imageVisionRequest(image:CGImage) {
        let requestHandle = VNImageRequestHandler(cgImage: image, options: [:])
        DispatchQueue.global().async {
            do{
            //self.barCodeDetectionRequest 是做了懒加载了 
                try requestHandle.perform([self.barCodeDetectionRequest])
            }
            catch let error as NSError {
                print("Error in performing Image request: \(error)")
            }
        }
    }

3.barCodeDetectionRequest 懒加载

  lazy var barCodeDetectionRequest: VNDetectBarcodesRequest = {
        let request = VNDetectBarcodesRequest { request, error in//识别结果回调
            if error == nil {
                if let observations = request.results {
                    print("图片识别结果",observations)
                    if observations.count > 0 {
                        if observations.first!.isKind(of: VNBarcodeObservation.self) {
                            let barcodeObservation = observations.first as! VNBarcodeObservation
                            //拿到结果 去处理下
                            self.visionResult(observation: barcodeObservation)
                        }
                    }
                    else {
                    //self.isScanBarCode 自定义的变量 判断是条形码还是二维码
                        let title = self.isScanBarCode ? "条形码" : "二维码"
                        SVProgressHUD.showError(withStatus: "请选择有效的\(title)")
                    }
                }
                else {
                    SVProgressHUD.showError(withStatus: "图片识别失败")
                }
            }
            else {
                SVProgressHUD.showError(withStatus: "图片识别失败")
            }
        }
        return request
    }()
  func visionResult(observation:VNBarcodeObservation) {
        print("barcodeDescriptor==",observation.barcodeDescriptor)
        print("payloadStringValue==",observation.payloadStringValue)
        print("observation.symbology=",observation.symbology)
        if let resultString = observation.payloadStringValue {
            if isScanBarCode {
                if observation.symbology == .ean13 {//条形码
                    //拿到了String类型的结果 作相应的处理
                     
                }
                else {
                    SVProgressHUD.showError(withStatus: "不是有效的条形码")
                }
            }
            else {
                if observation.symbology == .qr {//二维码
                   //拿到了String类型的结果 作相应的处理 
                      
                }
                else {
                    SVProgressHUD.showError(withStatus: "不是有效的二维码")
                }
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值