I'm currently working with AVCaptureSession
and AVCaptureMetadataOutput
.
It works perfectly, but I just want to know how to indicate to scan and analyze metadata objects only on a specific region of the AVCaptureVideoPreviewLayer
?
Use the camera on your phone to scan barcodes or the QR Code on the packaging or product sticker. The application will display all information that the business has provided, such as: Full product name.
With Aspose.Barcode Scanner you can scan barcodes online using your mobile phone's camera. You can scan qr code, scan datamatrix and many more 2D and 1D barcode types. Choose 1D or 2D scanning mode, capture barcode with your camera and let our sophisticated alghorythms to determine symbology itself and recognize.
Every product sold in a market comes with a unique identifier. You can scan these codes using a barcode scanner app and find the associated product on the web. Other than finding a product on the internet, a code scanner has a number of use cases.
Here is a sample of code from a project I have that may help you on the right track
// where 'self.session' is previously setup AVCaptureSession
// setup metadata capture
AVCaptureMetadataOutput *metadataOutput = [[AVCaptureMetadataOutput alloc] init];
[self.session addOutput:metadataOutput];
[metadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[metadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeEAN13Code]];
// setup preview layer
AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
previewLayer.frame = self.previewView.bounds;
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
// we only want the visible area of the previewLayer to accept
// barcode input (ignore the rest)
// we need to convert rects coordinate system
CGRect visibleMetadataOutputRect = [previewLayer metadataOutputRectOfInterestForRect:previewLayer.bounds];
metadataOutput.rectOfInterest = visibleMetadataOutputRect;
// add the previewLayer as a sublayer of the displaying UIView
[self.previewView.layer addSublayer:previewLayer];
In iOS 9.3.2 I had "CGAffineTransformInvert: singular matrix" error when calling metadataoutputRectOfInterestForRect
. I was able to make it work calling it right after startRunning
method of AVCaptureSession
:
captureSession.startRunning()
let visibleRect = previewLayer.metadataOutputRectOfInterestForRect(previewLayer.bounds)
captureMetadataOutput.rectOfInterest = visibleRect
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With