Являются ли фильтры Core Image в iOS 5.0 достаточно быстрыми для обработки видео в реальном времени? - PullRequest
37 голосов
/ 08 июля 2011

Теперь, когда Apple перенесла Core Core Framework на iOS 5.0, мне интересно: достаточно ли Core Image, чтобы применять живые фильтры и эффекты к видео камеры?

Кроме того, что будетхорошая отправная точка для изучения платформы Core Image для iOS 5.0?

Ответы [ 3 ]

55 голосов
/ 08 июля 2011

Теперь, когда Core Image уже давно работает на iOS, мы можем поговорить о некоторых жестких показателях производительности. Я создал эталонное приложение в рамках тестирования моей платформы GPUImage и профилировал производительность необработанных фильтров на основе ЦП, фильтров Core Image и фильтров GPUImage с помощью видеопотоков в реальном времени. Ниже приведены значения времени (в миллисекундах), в течение которых каждый из них применял один гамма-фильтр к видеокадру 640x480 с камеры iPhone (для двух разных моделей оборудования, работающих под управлением двух разных версий ОС):

             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)

Для Core Image это означает максимум 9,4 FPS для простого гамма-фильтра на iPhone 4, но более 60 FPS для того же на iPhone 4S. Речь идет о простейшем случае фильтра Core Image, который вы можете настроить, поэтому производительность, безусловно, будет зависеть от более сложных операций. Это может указывать на то, что Core Image не может выполнять живую обработку достаточно быстро, чтобы соответствовать частоте камеры iPhone на iPhone 4 под управлением iOS 5, но с iOS 6 она обрабатывает видео более чем достаточно быстро, чтобы выполнять живую фильтрацию на iPhone 4S и выше. .

Источник этих тестов можно найти в моем репозитории GitHub ), если вы хотите узнать, откуда я взял эти цифры.

Я обновил этот ответ из своего оригинала, который слишком критично относился к производительности Core Image. Фильтр тонов сепии, который я использовал в качестве основы для сравнения, не выполнял ту же операцию, что и мой, поэтому это был плохой тест. Производительность фильтров Core Image также значительно улучшилась в iOS 6, что позволило сделать их более чем достаточно быстрыми для обработки живого видео на iPhone 4S и выше. Кроме того, с тех пор я обнаружил несколько случаев , таких как размытие большого радиуса , когда Core Image значительно превосходит мою платформу GPUImage.

Предыдущий ответ для потомков:

Как и для любого вопроса, связанного с производительностью, ответ будет зависеть от сложности ваших фильтров, размера фильтруемого изображения и характеристик производительности устройства, на котором вы работаете.

Поскольку Core Image уже некоторое время доступен на Mac, я могу указать на Руководство по программированию Core Image в качестве ресурса для изучения инфраструктуры. Я не могу комментировать специфичные для iOS элементы, учитывая NDA, но я настоятельно рекомендую посмотреть видео для WWDC 2011 Сессия 422. Использование Core Image в iOS и Mac OS X.

Core Image (в основном) использует графический процессор для обработки изображений, поэтому вы можете посмотреть, как быстро шейдеры OpenGL ES 2.0 обрабатывают изображения на существующих устройствах. Недавно я проделал определенную работу в этой области и обнаружил, что iPhone 4 может выполнять обработку 60 кадров в секунду с помощью простого шейдера для видео в реальном времени, передаваемого с разрешением 480 x 320. Вы можете загрузить мой пример приложения и попытайтесь настроить шейдер и / или размер входного видеосигнала, чтобы определить, может ли ваше конкретное устройство обрабатывать эту обработку с приемлемой частотой кадров. Базовое изображение может добавить немного накладных расходов, но оно также имеет некоторые умные оптимизации для организации цепочек фильтров.

Самыми медленными совместимыми устройствами были бы iPhone 3G S и iPod touch 3-го поколения, но они не намного медленнее, чем iPhone 4. iPad 2 поражает своими мощными возможностями обработки фрагментов.

6 голосов
/ 17 октября 2012

ИМХО, Core Image - это всегда ваш первый вариант с iOS6.0.Есть несколько полезных функций, которые вам понравятся, например:

  1. Поддержка входных параметров Core Image glTexture2d;
  2. Поддержка параметров вывода Core Image glTexture2d;
  3. выбрать использование CI исключительно с GPU;инициировать CIContext, например._CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts];
  4. Многие фильтры теперь доступны для платформы iOS, 93 фильтра или около того?
  5. Вы можете выбрать обработку буфера исключительно с ЦП, когда ваше приложение временно работает в фоновом режиме, что, однако, не рекомендуется.

Все они упоминаются в видео сеанса WWDC2012, часть Core Image.Посмотрите, может быть, вы найдете там свое решение.

3 голосов
/ 08 июля 2011

Это будет почти в реальном времени в iPhone 4 и вперед. iPhone 3GS будет немного изменчивым. iPhone 3 и более ранние версии не рекомендуется.

...