ios - QR Reader with VNDetectBarcodeRequest -
i've setup avcapturesession video data output , attempting use ios 11's vision framework read qr codes. camera setup avcapturesession is. abbreviate , show setting output.
let output = avcapturevideodataoutput() output.setsamplebufferdelegate(self, queue: capturequeue) capturesession.addoutput(output) // did cvpixelbuffer oriented in portrait. // don't know if it's needed , i'm not sure matters anyway. output.connection(with: .video)!.videoorientation = .portrait so camera , running always. here code using perform vnimagerequesthandler qr codes.
func captureoutput(_ output: avcaptureoutput, didoutput samplebuffer: cmsamplebuffer, connection: avcaptureconnection) { guard let pixelbuffer = cmsamplebuffergetimagebuffer(samplebuffer) else { return } let imagerequesthandler = vnimagerequesthandler(cvpixelbuffer: pixelbuffer, orientation: .up, options: [:]) let qrrequest = vndetectbarcodesrequest { request, error in let barcodeobservations = request.results as? [vnbarcodeobservation] guard let qrcode = barcodeobservations?.flatmap({ $0.barcodedescriptor as? ciqrcodedescriptor }).first else { return } if let code = string(data: qrcode.errorcorrectedpayload, encoding: .isolatin1) { debugprint(code) } } qrrequest.symbologies = [.qr] try! imagerequesthandler.perform([qrrequest]) } i using qr code encodes http://www.google.com test. debugprint line prints out:
avgg\u{03}¢ò÷wwrævöövÆræ6öÐì\u{11}ì
i have tested same qr code avcapturemetadataoutput has been around while , method decodes qr code correctly. question is, have missed output getting?
(obviously use avcapturemetadataoutput solution, because can see works. doesn't me learn how use vision framework.)
most problem here:
if let code = string(data: qrcode.errorcorrectedpayload, encoding: .isolatin1) try use .utf8.
also suggest @ raw output of 'errorcorrectedpayload' without encoding. maybe has correct encoding.
Comments
Post a Comment