Android: Acceso a los datos del marco de vista previa de cámara de hardware sin dibujarlos
De acuerdo con los documentos de cámara de Android desde el lado del SDK de Java, los fotogramas de previsualización de la cámara tienen que suministrarse una superficie (visible y activa) a la que se puede acceder para acceder a los datos del marco. He vinculado algunas de las cosas que he encontrado aquí (soy nuevo tan tapado en 2 hipervínculos), pero he ido a toneladas de documentación de varias cosas antes de liquidación de publicar mi propia pregunta aquí en SO.
Mis problemas:
A) Yo explícitamente no quiero dibujar la vista previa de la cámara a la pantalla, sólo quiero los datos de bytes (que puedo obtener de aquí) directamente desde el búfer de la cámara si es posible.
- Android: la vista previa de la cámara es lateral
- Cámara - cambios de vista previa después de iniciar la grabación de vídeo
- VideoView y Progressive descargar
- ¿Existe una manera de obtener una vista previa de un fragmento que se utiliza en otra vista en IntelliJ IDEA 12?
- Grabación de vídeo de un servicio
B) Sí, vi esto: Tomando la foto de la cámara sin vista previa .
Sin embargo, esto dicta que las aplicaciones que usan esta biblioteca tienen que insertar esta vista (aparentemente) arbitraria en su diseño de aplicación, que tiene que estar visible todo el tiempo (no pueden cambiar diseños, cambiar la visibilidad de los contenedores primarios o usar una subactividad) durante El ciclo de vida de la aplicación.
De hecho, mis necesidades son similares a las de este póster , excepto que quiero stream en tiempo real continua de los datos de previsualización de la cámara, no una captura guardada en la imagen en disco. Por lo tanto PictureCallback
funciona para él junto con la llamada myCamera.takePicture
. Por razones obvias, escribir capturas continuas en disco no es una solución para mí, por lo que no funcionará en mi caso. myCamera.takePicture
también es mucho más lento que obtener los fotogramas de vista previa.
C) He empezado a jugar con el NDK, y he tenido una sensación bastante buena para ello. Sin embargo, de acuerdo a este acceso a los datos de la cámara a través de nativo no es compatible o recomendado, y una gran molestia para la compatibilidad de dispositivos, incluso entonces.
Si esto es anticuado, y hay sólidas rutas NDK a la adquisición de datos de cámara de dispositivos Android, no pude encontrarlos, así que si pudiera señalar a mí que sería genial.
D) Quiero hacer que esta biblioteca sea accesible desde herramientas como Unity (en forma de un plugin de unidad), para lo cual quiero poder simplemente compilarlo en un JAR (o .so para nativo) y esperar que funcione Aplicaciones Android que importan la biblioteca de esa manera para que puedan utilizar la cámara sin configuraciones específicas de interfaz de usuario / configuración necesarias del desarrollador de la aplicación.
Contexto:
Quiero ser capaz de crear una biblioteca de procesamiento de la visión para su uso en aplicaciones Android, y no quiero limitar las aplicaciones que utilizan la biblioteca para tener que utilizar diseños de aplicaciones específicas y dibujar vistas específicas a la pantalla con el fin de utilizar la visión Procesamiento de resultados – para un ejemplo muy simple, si una aplicación quiere utilizar mi biblioteca para obtener el color promedio de lo que la cámara ve, y quiere teñir una imagen en la pantalla de ese color.
Cualquier sugerencia que pueda obtener para cualquiera de los puntos que tengo será super-útil. ¡Muchas gracias por su tiempo!
- Convertir el marco de vista previa en un mapa de bits
- ¿Cómo obtener 720p Android Camera Preview Data?
- 60 / 120fps vista previa de datos en un dispositivo Android?
- Teclado personalizado sombra clave de teclado eliminar
- Ver la vista previa del cajón de navegación
- Android - Cómo recortar la previsualización de la cámara con TextureView
- Animación superpuesta a una actividad de la cámara
- Tesseract de OCR para Android: uso de datos de objetos Pixa para mostrar cuadros delimitadores
Olvidé completamente que tenía esta pregunta. 2 años y un par de Android SDK versiones posteriores, tenemos un sistema de trabajo.
Estamos usando un SurfaceTexture
extendido, cameraSurface
con una referencia a la cámara requerida. Usando la SurfaceTexture de la superficie de la SurfaceTexture
, llamamos
mCamera.setPreviewTexture(mSurfaceTexture); mCamera.startPreview();
A continuación, anule la vista previewCallback
la cámara activa actual de su actividad o donde lo necesite.
mCamera.setPreviewCallback(new PreviewCallback() { public void onPreviewFrame(final byte[] data, final Camera camera) { // Process the contents of byte for whatever you need } });
Esto le permite procesar continuamente lo que la cámara ve, en lugar de simplemente tener que ir a través de imágenes almacenadas. Por supuesto, esto se limitará a la resolución de previsualización de su cámara (que puede ser diferente de la captura o resoluciones de vídeo).
Si consigo el tiempo, trataré de lanzar una demostración de trabajo de barebones.
Editar: El SDK I había vinculado a ya no está libremente disponible. Todavía puede solicitar uno a través de la página de contacto de BitGym .
No se puede obtener el SurfaceView
para obtener una vista previa de la imagen. Lo que puedes hacer es delegar la responsabilidad de capturar el byte[]
a las aplicaciones que implementan tu biblioteca, lo que les permite usar tu biblioteca no sólo para las imágenes de la cámara, sino también para las imágenes que ya se han tomado.
- ¿Cómo limpiar el dispositivo Android cuando se desactiva el administrador del dispositivo?
- ¿Existen bibliotecas de terceros para Android?