Wie kann man Barcode-Werte mit der neuen Barcode-API in Google Play Services erfassen?

Ich habe mit dem Beispielcode aus der neuen Google Barcode API gespielt. Es überlagert eine Box und den Barcode-Wert über die Live-Kamera-Feed eines Barcodes. (Auch Gesichter)

Ich kann nicht sagen, wie man einen Barcode-Wert zu meiner App zurückgibt. A) Wie man erzählt, wann ein Erkennungsereignis aufgetreten ist und B) wie man auf den ravValue zur Verwendung in anderen Teilen meiner App zugreifen kann. Kann jemand damit helfen?

Https://developers.google.com/vision/multi-tracker-tutorial

Https://github.com/googlesamples/android-vision

UPDATE: Auf der Antwort von @ pm0733464 habe ich eine Callback-Schnittstelle (genannt onFound) zur Tracker-Klasse hinzugefügt, auf die ich in der Aktivität zugreifen konnte. Anpassung der Google-Multi-Tracker-Beispiel:

GraphicTracker :

class GraphicTracker<T> extends Tracker<T> { private GraphicOverlay mOverlay; private TrackedGraphic<T> mGraphic; private Callback mCallback; GraphicTracker(GraphicOverlay overlay, TrackedGraphic<T> graphic, Callback callback) { mOverlay = overlay; mGraphic = graphic; mCallback = callback; } public interface Callback { void onFound(String barcodeValue); } @Override public void onUpdate(Detector.Detections<T> detectionResults, T item) { mCallback.onFound(((Barcode) item).rawValue); mOverlay.add(mGraphic); mGraphic.updateItem(item); } 

BarcodeTrackerFactory :

 class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { private GraphicOverlay mGraphicOverlay; private GraphicTracker.Callback mCallback; BarcodeTrackerFactory(GraphicOverlay graphicOverlay, GraphicTracker.Callback callback) { mGraphicOverlay = graphicOverlay; mCallback = callback; } @Override public Tracker<Barcode> create(Barcode barcode) { BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay); return new GraphicTracker<>(mGraphicOverlay, graphic, mCallback); } } 

Hauptaktivität:

 BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay, new GraphicTracker.Callback() { @Override public void onFound(String barcodeValue) { Log.d(TAG, "Barcode in Multitracker = " + barcodeValue); } }); MultiProcessor<Barcode> barcodeMultiProcessor = new MultiProcessor.Builder<>(barcodeFactory).build(); barcodeDetector.setProcessor(barcodeMultiProcessor); 

  • Computer Vision und AR-Bibliotheken für Android verfügbar?
  • Android cameraSource.stop () verursacht App zum Einfrieren
  • Mobile Vision API - verknüpft neues Detektorobjekt, um die Frame-Verarbeitung fortzusetzen
  • Google Vision API Samples: Holen Sie sich die CameraSource zum Fokus
  • Media Recorder mit Google Vision API
  • Wie benutzt man mobile Vision API mit TextureView und Kamera
  • Nehmen Sie das Bild mit Zieh / Farbe auf Gesicht mit Vision api
  • Android Computer Vision JavaCV OpenCV FastCV Vergleich
  • One Solution collect form web for “Wie kann man Barcode-Werte mit der neuen Barcode-API in Google Play Services erfassen?”

    Direkt mit dem Barcode-Detektor

    Ein Ansatz ist, den Barcode-Detektor direkt auf einer Bitmap zu verwenden, wie folgt:

     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 } 

    Empfangen von Benachrichtigungen

    Ein weiterer Ansatz ist die Einrichtung einer Pipeline-Struktur für den Empfang von erkannten Barcodes aus Kamera-Vorschau-Video (siehe das MultiTracker-Beispiel auf GitHub). Sie würden Ihren eigenen Tracker definieren, um erkannte Barcodes zu erhalten, wie folgt:

     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 } } 

    Eine neue Instanz dieses Tracker wird für jeden Barcode erstellt, wobei die onUpdate-Methode den erkannten Barcode-Wert erhält.

    Sie richten dann die Kamera-Quelle ein, um ständig Bilder in den Detektor zu streamen und die Ergebnisse in Ihrem Tracker zu erhalten:

     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(); 

    Später würden Sie entweder die Kamera-Quelle direkt starten oder verwenden Sie es in Verbindung mit einer Ansicht, die die Kamera-Vorschau zeigt (siehe das MultiTracker-Beispiel für weitere Details).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.