2011-12-23 14 views
10

Estoy usando Android 2.2 con Eclipse.Procesamiento de video en Android

me gustaría hacer una aplicación que captura vídeo, y para cada cuadro, su enviarlo como un mapa de bits a un método que procesa y devuelve un nuevo mapa de bits y muestra el mapa de bits procesados.

No estoy muy familiarizado con Android, así que, por favor, ¿alguien puede enviarme a los recursos que necesito ver para hacer tal cosa?

Respuesta

20

Es lo suficientemente simple para llevar a cabo los siguientes pasos utilizando el SDK de Android:

  • captura de los cuadros de vista preliminar de la cámara como datos de mapa de bits. Camera.PreviewCallback devolverá un byte[] de datos que representan el marco en varios formatos de imagen posibles.
  • Modifica los datos de píxeles. Dado que los datos vuelven a aparecer como bytes sin procesar, hacer los ajustes a los datos es relativamente fácil ... la dificultad aquí es aplicar un algoritmo para el procesamiento de imágenes particular que desea hacer. No hay ningún efecto incorporado (pre-4.0) que se pueda aplicar simplemente a las imágenes, por lo que tendrá que escribir el suyo propio.
  • También es posible decodificar los datos en un objeto Bitmap para facilitar el trabajo con los píxeles. En 2.2, tiene la opción de utilizar NDK y jnigraphics para trabajar con los píxeles de un Bitmap en código nativo, que es significativamente más rápido que en la capa de Java.
  • Tome el contenido de su resultante Bitmap y muéstrelo. Para datos que se mueven rápidamente, le conviene mostrar esto en un SurfaceView; utilizando los métodos lockCanvas() y unlockCanvasAndPost() disponibles en el SurfaceHolder que contiene la vista.

Si esto es todo lo que quiere hacer, puede lograrlo con poca dificultad. Sin embargo, esto no es lo mismo que capturar video. Actualmente, Android no proporciona ganchos para que usted pueda transmitir marcos en un contenedor de video codificado (MPEG4, 3GP, etc.) en tiempo real. Sus capacidades de captura de video están estrechamente ligadas al MediaRecorder que controla el proceso desde la captura de fotogramas hasta la escritura del video codificado. Necesitará una biblioteca de 3ra parte como FFMPEG (que se ha construido y ejecutado usando la capa NDK varias veces en las aplicaciones de Android) para ayudar en el proceso de codificación de sus marcos modificados.

Sé que tiene un objetivo 2.2, pero Android 4.0 proporciona algo de alivio aquí ya que han lanzado una nueva versión del NDK que permite tener más voz en lo que sucede al leer datos de una secuencia antes de entregarla a la capa de presentación. Sin embargo, no he pasado el tiempo suficiente para saber si podría recomendarse para su situación.

+0

Realmente no quiero ver un video, usar la vista previa es genial para mí. ¡Gracias! –

+0

hola, ¿cómo puedo crear un video usando una serie de imágenes de mapa de bits? ¿cómo puedo renderizarlo? –

5

Puede usar potencialmente Camera.setPreviewCallback con para escuchar los marcos de vista previa que vienen de la cámara.

Código de código de barras 2D escáneres podría ser un punto de partida útil: ZXing

7

Si desea hacer un procesamiento de video en tiempo real más complicado, le recomiendo encarecidamente OpenCV for Android.

OpenCV es una biblioteca de visión por computadora que le permite procesar video en tiempo real, y tiene bibliotecas para realizar tareas simples como detectar bordes o tareas más complicadas como detectar rostros y funciones coincidentes.

Puede hacer que OpenCV trabaje en su teléfono celular Android en un día, especialmente porque incluye una amplia documentación y ejemplos.

Cuestiones relacionadas