37 votes

Le Cœur de filtres d'Image dans iOS 5.0 assez rapide pour la vidéo en temps réel de traitement?

Maintenant que Apple a porté l'Image principale-cadre sur iOS 5.0, je me demandais: est au Cœur de l'Image est assez rapide pour appliquer des filtres en direct et des effets à la vidéo de la caméra?

Aussi, ce serait un bon point de départ pour apprendre la Base de l'Image de cadre pour iOS 5.0?

55voto

Brad Larson Points 122629

Maintenant que l'Image principale a été sur iOS pendant un certain temps, on peut parler de certaines données de performance. J'ai créé un test d'application dans le cadre de l'essai pour mon GPUImage cadre, et dressé le portrait de la performance brute du PROCESSEUR à base de filtres, de Base de filtres d'Image, et GPUImage filtres avec des flux vidéo en direct. Les points suivants ont été les temps (en millisecondes) ont, appliquer un filtre gamma sur une 640x480 image de la vidéo de la la caméra de l'iPhone (pour les deux différents modèles de matériel de course de deux différentes versions de système d'exploitation):

             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)

De Base de l'Image, cela se traduit par un maximum de 9,4 FPS pour un simple filtre gamma sur l'iPhone 4, mais bien plus de 60 FPS pour la même sur un iPhone 4S. C'est le plus simple de l'Image principale du filtre, vous pouvez mettre en place, de sorte que les performances vont certainement varier avec des opérations plus complexes. Cela semble indiquer que l'Image principale ne peut pas faire vivre de traitement assez rapide pour correspondre à la la caméra de l'iPhone de taux sur l'iPhone 4 sous iOS 5, mais à partir de iOS 6, il traite des vidéos de plus de suffisamment rapide pour faire vivre le filtrage sur l'iPhone 4S et au-dessus.

La source de ces critères peut être trouvé dans mon dépôt GitHub), si vous souhaitez voir où j'ai obtenu ces chiffres de.

J'ai mis à jour cette réponse de mon original, qui a été trop critique de Base de l'Image de la performance. Le sépia filtre, j'ai été en utilisant comme base de comparaison n'était pas d'effectuer la même opération que la mienne, donc c'était une mauvaise référence. La performance de Base des filtres d'Image a également amélioré de façon significative dans iOS 6, qui a contribué à rendre plus que assez rapide pour traiter de la vidéo en direct sur l'iPhone 4S et jusqu'. Aussi, depuis, j'ai trouvé plusieurs cas, comme à grand rayon de flou, où l'Image de manière significative surpasse mon GPUImage cadre.

La réponse précédente, pour la postérité:

Comme avec n'importe quel de performance liés à la question, la réponse dépendra de la complexité de vos filtres, la taille de l'image filtrée, et les caractéristiques de performance de l'appareil que vous utilisez.

Parce que l'Image a été disponible pendant un certain temps sur le Mac, je peux vous au Cœur de l'Image Guide de Programmation comme une ressource pour l'apprentissage de la cadre. Je ne peux pas commenter sur l'iOS éléments spécifiques, compte tenu de la LDN, mais je vous recommande fortement de regarder la vidéo pour la WWDC 2011 Session 422 - Utilisation de Core Image sur iOS et Mac OS X.

Core Image (pour la plupart) utilise le GPU pour le traitement de l'image, de sorte que vous pourriez regarder à quelle vitesse OpenGL ES 2.0 shaders poignée de traitement de l'image sur les dispositifs existants. J'ai fait quelques travaux dans ce domaine récemment, et a constaté que l'iPhone 4 pourrait faire 60 FPS traitement à l'aide d'un simple shader sur la vidéo en temps réel sont nourris en à une résolution de 480 x 320. Vous pouvez télécharger mon exemple d'application et essayez de personnaliser le shader et / ou de l'entrée vidéo de taille pour déterminer si votre périphérique particulier peut gérer cette transformation à un framerate décent. Core Image peut ajouter un peu de surcharge, mais il a aussi quelques petits malins optimisation de la façon dont il organise des chaînes de filtres.

Le plus lent des appareils compatibles là serait l'iPhone 3G S et la 3ème génération de l'iPod touch, mais ils ne sont pas beaucoup plus lente que celle de l'iPhone 4. L'iPad 2 coups tout loin avec son énorme fragment de la puissance de traitement.

6voto

cocoatoast Points 58

À mon humble avis, de l'Image principale est toujours la première option depuis iOS6.0. Il y a de bonnes caractéristiques, vous r va l'aime, telles que:

  1. De base de l'Image d'entrée params soutien glTexture2d;
  2. De base de l'Image de sortie params soutien glTexture2d;
  3. Vous pouvez choisir d'utiliser CI exclusivement avec des GPU; init un CIContext par exemple. _CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts];
  4. De nombreux filtres sont maintenant disponibles à la plate-forme iOS, 93 filtres ou pas?
  5. Vous pouvez choisir de traiter tampon exclusivement avec la CPU lors de votre demande sont temporairement en cours d'exécution en arrière-plan, qui n'est cependant pas recommandé.

Ce sont tous mentionnés dans WWDC2012 session de la vidéo, de l'Image principale de la partie. Un coup d'oeil, vous y trouverez peut être votre solution.

3voto

David Points 2299

Il sera presque en temps réel dans l'iPhone 4 et de l'avant. l'iPhone 3GS sera un peu saccadée. iPhone 3 et avant n'est pas recommandé.

Recherche ultime pour votre Code d'Image et iOS questions

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X