Являются ли фильтры Core Image в iOS 5.0 достаточно быстрыми для обработки видео в реальном времени?

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

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

Ответ 1

Теперь, когда 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, я могу указать вам на Руководство по программированию основных изображений в качестве ресурса для обучения рамки. Я не могу комментировать элементы, зависящие от iOS, учитывая NDA, но я настоятельно рекомендую смотреть видео для WWDC 2011 Сессия 422 - Использование ядра Изображение на iOS и Mac OS X.

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

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

Ответ 2

IMHO, Core Image всегда является вашим первым вариантом с iOS6.0. Есть некоторые хорошие функции, которые вам нравятся, например:

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

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

Ответ 3

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