Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limit Detection Area in Vision API

It seems I've found myself in the deep weeds of the Google Vision API for barcode scanning. Perhaps my mind is a bit fried after looking at all sorts of alternative libraries (ZBar, ZXing, and even some for-cost third party implementations), but I'm having some difficulty finding any information on where I can implement some sort of scan region limiting.

The use case is a pretty simple one: if I'm a user pointing my phone at a box with multiple barcodes of the same type (think shipping labels here), I want to explicitly point some little viewfinder or alignment straight-edge on the screen at exactly the thing I'm trying to capture, without having to worry about anything outside that area of interest giving me some scan results I don't want.

The above case is handled in most other Android libraries I've seen, taking in either a Rect with relative or absolute coordinates, and this is also a part of iOS' AVCapture metadata results system (it uses a relative CGRect, but really the same concept).

I've dug pretty deep into the sample app for the barcode-reader here, but the implementation is a tad opaque to get anything but the high level implementation details down.

It seems an ugly patch to, on successful detection of a barcode anywhere within the camera's preview frame, to simple no-op on barcodes outside of an area of interest, since the device is still working hard to compute those frames.

Am I missing something very simple and obvious on this one? Any ideas on a way to implement this cleanly, otherwise?

Many thanks for your time in reading through this!

like image 200
Tiki McFee Avatar asked Feb 18 '16 18:02

Tiki McFee


People also ask

Does Google Vision store data?

For online (immediate response) operations, the image data is processed in memory and not persisted to disk. Google also temporarily logs some metadata about your Vision API requests (such as the time the request was received and the size of the request) to improve our service and combat abuse.


1 Answers

The API currently does not have an option to limit the detection area. But you could crop the preview image before it gets passed into the barcode detector. See here for an outline of how to wrap a detector with your own class:

Mobile Vision API - concatenate new detector object to continue frame processing

You'd implement the "detect" method to take the frame received from the camera, create a cropped version of the frame, and pass that through to the underlying detector.

like image 131
pm0733464 Avatar answered Oct 02 '22 16:10

pm0733464