Ответ 1
Как автор GPUImage, вы можете захотеть взять то, что я говорю, с солью. Сначала я должен сказать, что у меня огромное уважение к команде Core Image и как они продолжают обновлять структуру. Я был тяжелым пользователем Core Image до того, как написал GPUImage, и я создал множество элементов дизайна на основе того, как Core Image работал на Mac.
Оба фреймворка постоянно развиваются, поэтому сравнение, сделанное сегодня, может быть неверным через несколько месяцев. Я могу указать на текущие возможности и тесты, но нет никакой гарантии, что не будет переворачиваться, когда кто-то из нас обновит вещи.
Моя философия с GPUImage заключалась в создании облегченной обертки вокруг квадрантов OpenGL (ES), созданных с помощью шейдеров, и сделать это с помощью как можно более простого интерфейса. Как я уже говорил ранее, я затронул аспекты Core Image, которые мне очень понравились, но я также изменил часть своего интерфейса, который сбивал меня с толку в прошлом. Я также немного расширил ситуацию, поскольку Core Image занимается только обработкой изображений, в то время как я подключаюсь к просмотру фильмов, вводу в камеру, записи видео и захвату изображений.
Когда я изначально пинал идею, Core Image еще не пришел в iOS. К тому моменту, когда я выпустил его, Core Image только что был добавлен в iOS. Тем не менее, количество фильтров, поддерживаемых в iOS в то время было довольно ограничено (например, без размытия), а Core Image на iOS не позволяло создавать пользовательские ядра как это было на Mac.
GPUImage предоставил средства для выполнения пользовательских операций с ускорением GPU на изображениях и видео в iOS, где Core Image не сделал этого. Большинство людей, которые начали использовать его, сделали это по этой причине, потому что они имели какой-то эффект, который они не могли сделать с фильтрами Core Image.
Изначально GPUImage также имел значительные преимущества в производительности для многих общих операций. Тем не менее, команда Core Image значительно улучшила скорость обработки с каждой версией iOS, и сейчас все очень близко. Для некоторых операций GPUImage работает быстрее, а для других - Core Image. Они стараются использовать некоторую довольно умную оптимизацию для вещей, таких как размытия, которые я начал реплицировать в таких вещах, как мой GPUImageiOSBlurFilter. Они также комбинируют многоступенчатые операции разумно, когда я обрабатываю шаги фильтра как отдельные и отдельные элементы. В некоторых случаях в iOS это дает мне преимущество, и я попытался уменьшить последствия этой проблемы в последнее время, но они обрабатывают множество типов цепочек фильтров лучше, чем я.
iOS 8 представляет пользовательскую поддержку ядра в Core Image на iOS, которую он всегда имел на Mac. Это позволяет создавать собственные пользовательские фильтры и другие операции в Core Image на iOS, поэтому это больше не будет преимуществом для GPUImage. Конечно, любой, кто хочет настроить таргетинг на более старую версию iOS, по-прежнему будет ограничен тем, что может сделать Core Image, где GPUImage может перенаправляться на iOS 4.0.
У Core Image также есть некоторые опрятные возможности с точки зрения возможности фильтрации, когда приложение iOS находится в фоновом режиме (сначала на базе процессора, но iOS 8 добавляет поддержку GPU для этого сейчас), где GPUImage полагается на OpenGL ES предотвращает его запуск, когда приложение находится в фоновом режиме. Могут быть способы обойти это ограничение в iOS 8, но я еще не обработал всю документацию.
Мои интересы с GPUImage относятся к области машинного зрения. Фильтры изображений - забавное отвлечение, но я хочу использовать эту инфраструктуру для изучения того, что возможно с графическим анализом с ускорением GPU. Я работаю над функциями распознавания и отслеживания объектов, и в направлении, в котором я буду постоянно развивать структуру. Однако у вас есть код для рамки, поэтому вам не нужно полагаться на меня.