Cambiar a Camera2 en Android Vision API
Vi que en api de la visión de androide (el ejemplo está aquí: https://github.com/googlesamples/android-vision ) cámara (camera1) ahora está obsoleta y la recomendación es usar cámara2.
¿Tienen ustedes alguna idea de cómo volver a escribir CameraSource para utilizar camera2 en la visión de Android?
- Cómo obtener código de barras detectado / QR automáticamente
- Ejemplos de la API de Google Visión: Obtenga el enfoque de CameraSource
- Biblioteca de detección de códigos de barras de Google Vision no se instala en algunos dispositivos
- ¿Por qué barcodedetector y las API asociadas son tan poco fiables?
- No se descarga la biblioteca de Google Mobile Vision
Gracias por adelantado,
- No se puede usar el escáner de código de barras de Google
- Nueva visión API - Tamaño de imagen
- Cómo deshabilitar la detección de códigos de barras múltiples android Vision API
- ¿Utilizar Google Mobile Vision para reconocer texto en una imagen estática?
- Después de algún tiempo el escáner de código de barras lanza java.lang.UnsatisfiedLinkError
- Escaneo de código QR con Android Mobile Vision API
- Control de enfoque automático en la cámara al utilizar las api de visión de Android
- Biblioteca de códigos de barras de Google Vision no encontrada
Por favor échale un vistazo
Cámara2 con visión móvil? #sesenta y cinco
Ok encontré esto
No hay planes a corto plazo para una versión camera2 de la clase CameraSource en la API oficial. Sin embargo, dada la estructura de la API, una versión alternativa de CameraSource podría ser escrita por la comunidad de desarrolladores que utiliza la cámara2. Todas las API existentes para trabajar con marcos y detectores son suficientes para soportar una implementación de cámara2 también.
Es posible utilizar la API de Camera2 con Google Vision API.
Para empezar, el detector de cara de la API de Google Visión recibe un objeto Frame que se utiliza para analizar (detectar rostros y sus puntos de referencia).
La API Camera1 proporciona los marcos de vista previa en formato de imagen NV21, lo cual es ideal para nosotros. Google Vision Frame.Builder admite setImageData (ByteBuffer en formato de imagen NV16, NV21 o YV12) y setBitmap para utilizar un mapa de bits como marco de vista previa para procesar.
Su problema es que la API de Camera2 proporciona los marcos de vista previa en un formato diferente. Es YUV_420_888 . Para que todo funcione, tendrá que convertir los fotogramas de previsualización en uno de los formatos compatibles.
Una vez que obtenga los fotogramas de previsualización de Camera2 de ImageReader como imagen , puede utilizar esta función para convertirla a un formato compatible (NV21 en este caso).
private byte[] convertYUV420888ToNV21(Image imgYUV420) { // Converting YUV_420_888 data to YUV_420_SP (NV21). byte[] data; ByteBuffer buffer0 = imgYUV420.getPlanes()[0].getBuffer(); ByteBuffer buffer2 = imgYUV420.getPlanes()[2].getBuffer(); int buffer0_size = buffer0.remaining(); int buffer2_size = buffer2.remaining(); data = new byte[buffer0_size + buffer2_size]; buffer0.get(data, 0, buffer0_size); buffer2.get(data, buffer0_size, buffer2_size); return data; }
A continuación, puede utilizar el byte devuelto [] para crear un marco de visión de Google:
outputFrame = new Frame.Builder() .setImageData(nv21bytes, mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.NV21) .setId(mPendingFrameId) .setTimestampMillis(mPendingTimeMillis) .setRotation(mSensorOrientation) .build();
Por último, se llama al detector con el marco creado:
mDetector.receiveFrame(outputFrame);
De todos modos, si quieres saber más sobre esto puedes probar mi ejemplo de trabajo disponible de forma gratuita en GitHub: Camera2Vision . Espero haber ayudado 🙂