Подтвердить что ты не робот

Основные различия между Core Image и GPUImage

В чем основные отличия между базовыми форматами Core Image и GPUImage (помимо GPUImage, являющихся открытым исходным кодом)? С первого взгляда их интерфейсы кажутся довольно похожими... Применение серии фильтров для ввода для создания вывода. Я вижу несколько небольших различий, таких как простой в использовании LookupFilter, который имеет GPUImage. Я пытаюсь выяснить, почему кто-то выбирает один из них для приложения для фильтрации фотографий.

4b9b3361

Ответ 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. Я работаю над функциями распознавания и отслеживания объектов, и в направлении, в котором я буду постоянно развивать структуру. Однако у вас есть код для рамки, поэтому вам не нужно полагаться на меня.

Ответ 2

Это старый поток, но я считаю, что стоит упомянуть, что у GPUImage также есть некоторые функции, которых нет в Core Image: в частности, преобразование hough и несколько фильтров обнаружения границ.

Основное изображение похоже на применение фильтров и эффектов - и хорошо видеть, что GPUImage больше анализирует анализ изображений/видео, что становится более похожим на openCV, но более эффективным способом.