¿Cómo capturar los valores de los códigos de barras con la nueva API de código de barras en Google Play Services?
He estado jugando con el código de ejemplo de la nueva API de código de barras de Google. Superpone una caja y el valor del código de barras sobre la alimentación de la cámara en vivo de un código de barras. (También se enfrenta)
No puedo decir cómo devolver un valor de código de barras a mi aplicación. A) Cómo saber cuándo ha ocurrido un evento de detección y B) cómo acceder a ravValue para usarlo en otras partes de mi aplicación. ¿Alguien puede ayudarme con esto?
- ¿Por qué barcodedetector y las API asociadas son tan poco fiables?
- Después de algún tiempo el escáner de código de barras lanza java.lang.UnsatisfiedLinkError
- Android cameraSource.stop () que hace que la aplicación se congele
- Visión por computadora y bibliotecas AR disponibles para Android?
- En Android google vision OCR cómo puedo determinar la exactitud del reconocimiento
Https://developers.google.com/vision/multi-tracker-tutorial
Https://github.com/googlesamples/android-vision
ACTUALIZACIÓN: Basándose en la respuesta de @ pm0733464, agregué una interfaz de devolución de llamada (llamada onFound) a la clase Tracker a la que podía acceder en la Actividad. Adaptación del ejemplo de Google multi-tracker:
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); } }
Actividad principal:
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);
- Mobile Vision API - concatena un nuevo objeto detector para continuar el procesamiento de tramas
- Cómo utilizar la API de visión móvil con TextureView y la cámara
- ¿Cómo crear Bitmap de la imagen de buffer de bytes en grises?
- Nueva visión API - Tamaño de imagen
- Android Google Play Service Visión Explorador de códigos de barras Biblioteca no encontrada
- Intentar importar código de GitHub a Android Studio
- Biblioteca de códigos de barras de Google Vision no encontrada
- Tamaño de vista previa para el escáner de código de barras de la visión api
Uso directo del detector de código de barras
Un enfoque es utilizar el detector de código de barras directamente en un mapa de bits, como esto:
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 }
Recepción de notificaciones
Otro enfoque consiste en configurar una estructura de canalización para recibir códigos de barras detectados a partir del video de previsualización de cámara (ver el ejemplo de MultiTracker en GitHub). Usted definiría su propio Tracker para recibir códigos de barras detectados, como esto:
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 } }
Se crea una nueva instancia de este rastreador para cada código de barras, con el método onUpdate recibiendo el valor de código de barras detectado.
A continuación, configurar la fuente de la cámara para transmitir continuamente imágenes en el detector, recibiendo los resultados en su rastreador:
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();
Posteriormente, se inicia la fuente de la cámara directamente o se utiliza junto con una vista que muestra la vista previa de la cámara (consulte el ejemplo de MultiTracker para obtener más detalles).
- Alinear ProgressBar horizontal a la parte superior (quitar hueco)
- Android: Obtener los valores de la casilla de verificación