¿Los filtros de la imagen principal en iOS 5.0 son lo suficientemente rápidos para el procesamiento de video en tiempo real?

Ahora que Apple ha portado el marco de Core Image a iOS 5.0, me pregunto: ¿Core Image es lo suficientemente rápido como para aplicar filtros y efectos en vivo a la cámara de video?

Además, ¿cuál sería un buen punto de partida para aprender el marco de Core Image para iOS 5.0?

Ahora que Core Image ha estado en iOS por un tiempo, podemos hablar sobre algunos números de rendimiento. Creé una aplicación de referencia como parte de las pruebas para mi marco GPUImage , y analicé el rendimiento de los filtros sin procesar basados ​​en CPU, los filtros Core Image y los filtros GPUImage con transmisiones de video en vivo. Los siguientes fueron los tiempos (en milisegundos) que cada uno tomó para aplicar un solo filtro gamma en un cuadro de video de 640×480 desde la cámara del iPhone (para dos modelos de hardware diferentes que ejecutan dos versiones diferentes del sistema operativo):

iPhone 4 (iOS 5) | iPhone 4S (iOS 6) ------------------------------------------------ CPU 458 ms (2.2 FPS) 183 ms (5.5 FPS) Core Image 106 ms (6.7 FPS) 8.2 ms (122 FPS) GPUImage 2.5 ms (400 FPS) 1.8 ms (555 FPS) 

Para Core Image, esto se traduce en un máximo de 9.4 FPS para un filtro de gamma simple en el iPhone 4, pero más de 60 FPS para el mismo en un iPhone 4S. Se trata de la carcasa de filtro de Imagen de núcleo más simple que puede configurar, por lo que el rendimiento variará con operaciones más complejas. Esto parece indicar que Core Image no puede procesar en vivo lo suficientemente rápido para igualar la velocidad de la cámara del iPhone en el iPhone 4 con iOS 5, pero a partir de iOS 6, procesa video más que suficientemente rápido para filtrar en vivo en el iPhone 4S o superior .

La fuente de estos puntos de referencia se puede encontrar en mi repository de GitHub ), si desea ver de dónde obtuve estos números.

He actualizado esta respuesta de mi original, que era demasiado crítica del rendimiento de Core Image. El filtro de tono sepia que estaba usando como base de comparación no estaba realizando la misma operación que la mía, por lo que era un punto de referencia deficiente. El rendimiento de los filtros Core Image también mejoró significativamente en iOS 6, lo que ayudó a hacerlos más que suficientemente rápidos para procesar video en vivo en iPhone 4S en adelante. Además, desde entonces he encontrado varios casos, como desenfoques de radio grande , donde Core Image supera significativamente mi marco GPUImage.

Respuesta anterior, para la posteridad:

Al igual que con cualquier pregunta relacionada con el rendimiento, la respuesta dependerá de la complejidad de sus filtros, el tamaño de la imagen que se filtra y las características de rendimiento del dispositivo en el que se está ejecutando.

Debido a que Core Image ha estado disponible por un tiempo en la Mac, puedo indicarle la Guía de progtwigción de imágenes centrales como un recurso para aprender el marco. No puedo comentar sobre los elementos específicos de iOS, dado el NDA, pero recomiendo ver el video de WWDC 2011 Session 422 – Uso de Core Image en iOS y Mac OS X.

Core Image (en su mayoría) utiliza la GPU para el procesamiento de imágenes, por lo que puede ver qué tan rápido los sombreadores OpenGL ES 2.0 manejan el procesamiento de imágenes en los dispositivos existentes. Hace poco trabajé en esta área y descubrí que el iPhone 4 podía hacer 60 FPS procesando usando un shader simple en video en tiempo real alimentado a 480 x 320. Podrías descargar mi aplicación de muestra allí e intentar personalizar el sombreador y / o tamaño de entrada de video para determinar si su dispositivo en particular podría manejar este procesamiento a una velocidad de fotogtwigs decente. Core Image puede agregar un poco de sobrecarga, pero también tiene algunas optimizaciones inteligentes sobre cómo organiza las cadenas de filtros.

Los dispositivos compatibles más lentos que existen serían el iPhone 3G S y el iPod touch de 3ra generación, pero no son mucho más lentos que el iPhone 4. El iPad 2 los lleva a todos con su poder de procesamiento de fragmentos masivos.

En mi humilde opinión, Core Image es siempre tu primera opción desde iOS6.0. Hay algunas buenas características que le van a gustar, como:

  1. Parámetros de entrada de imagen central compatibles glTexture2d;
  2. Parámetros de salida de Core Image admiten glTexture2d;
  3. Puede optar por utilizar exclusivamente CI con GPU; init a CIContext ej. _CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts] ;
  4. ¿Cuántos filtros están ahora disponibles para la plataforma iOS, 93 filtros más o menos?
  5. Puede elegir procesar el búfer exclusivamente con la CPU cuando su aplicación se ejecuta temporalmente en segundo plano, aunque no es recomendable.

Todo esto se menciona en el video de la sesión de WWDC2012, parte de la Imagen principal. Eche un vistazo, tal vez encuentre su solución allí.

Será casi en tiempo real en el iPhone 4 y posterior. iPhone 3GS estará un poco agitado. iPhone 3 y anteriores no es recomendable.

    Intereting Posts