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?

Gracias por adelantado,

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 🙂

  • Android Google Play Service Visión Explorador de códigos de barras Biblioteca no encontrada
  • Grabadora de medios con Google Vision API
  • Unknown Codificación para Data Matrix codificada con google Barcode Scanner (Vision)
  • En Android google vision OCR cómo puedo determinar la exactitud del reconocimiento
  • Android Vision Barcode API - leer código QR personalizado con datos binarios
  • Cómo asignar coordenadas de marco a superposición en la visión
  • Intentar importar código de GitHub a Android Studio
  • ¿Cómo crear Bitmap de la imagen de buffer de bytes en grises?
  • Área de detección de límites en Vision API
  • Tamaño de vista previa para el escáner de código de barras de la visión api
  • El brillo de la cámara de visión Android (móvil) es muy bajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.