How to capture barcode values using the new Barcode API in Google Play Services?

前端 未结 1 1939
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-04 16:56

I\'ve been playing with the sample code from the new Google Barcode API. It overlays a box and the barcode value over the live camera feed of a barcode. (Also faces)

相关标签:
1条回答
  • 2020-12-04 17:13

    Directly using the barcode detector

    One approach is to use the barcode detector directly on a bitmap, like this:

    BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
    Frame frame = new Frame.Builder().setBitmap(bitmap).build();
    SparseArray<Barcode> barcodes = barcodeDetector.detect(frame);
    if (barcodes.size() > 0) {
        // Access detected barcode values
    }
    

    Receiving notifications

    Another approach is to set up a pipeline structure for receiving detected barcodes from camera preview video (see the MultiTracker example on GitHub). You'd define your own Tracker to receive detected barcodes, like this:

    class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> {
        @Override
        public Tracker<Barcode> create(Barcode barcode) {
            return new MyBarcodeTracker();
        }
    } 
    
    class MyBarcodeTracker extends Tracker<Barcode> {
        @Override
        public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode barcode) {
            // Access detected barcode values
        }
     }
    

    A new instance of this tracker is created for each barcode, with the onUpdate method receiving the detected barcode value.

    You then set up the camera source to continuously stream images into the detector, receiving the results in your tracker:

    BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
    BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory();
    barcodeDetector.setProcessor(
        new MultiProcessor.Builder<>(barcodeFactory).build());
    
    mCameraSource = new CameraSource.Builder(context, barcodeDetector)
        .setFacing(CameraSource.CAMERA_FACING_BACK)
        .setRequestedPreviewSize(1600, 1024)
        .build();
    

    Later, you'd either start the camera source directly or use it in conjunction with a view that shows the camera preview (see the MultiTracker example for more details).

    0 讨论(0)
提交回复
热议问题