Android компьютерное зрение JavaCV OpenCV сравнение FastCV

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

Я поделюсь, что я нашел до сих пор.

OpenCV

  • кажется самым продвинутым и самым популярным.

  • обеспечить наибольшее количество функций

  • у него была проблема с обратной совместимостью

  • быстро(по крайней мере, так я слышал, но у меня нет информации об этом)

  • имеет наибольшее количество книг об этом(по крайней мере, для C++ версия)

JavaCV

  • является оболочкой для нескольких других библиотек, включая opencv

FastCv

  • новый с Qualcomm за ним.

Wikitude

  • это больше для augmentedreality, но в его ядре по-прежнему компьютер видение.

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

с уважением, Петр.

6 ответов


в основном есть два варианта: OpenCV и FastCV

OpenCV-более зрелая библиотека с гораздо большей функциональностью, чем FastCV. Для многих задач компьютерного зрения вы можете найти только самые основные функции в FastCV, в то время как вы можете иметь почти все популярные альтернативы, доступные в OpenCV. Например, проверьте доступные детекторы функций. OpenCV имеет Harris, SURF,SIFT, FAST и т. д. FastCV, с другой стороны, имеет только Harris и FAST. OpenCV содержит аппаратное обеспечение оптимизация для различных HW, включая настольные компьютеры и мобильные вычислительные устройства. Возможность использования OpenCV в desktop предоставляет вам более гибкий вариант разработки, так как вы можете настроить и протестировать код на быстром настольном компьютере перед началом работы над мобильной разработкой. Также OpenCV рассматривается как часть предложение группы компьютерного зрения Хронос. Таким образом, если это будет одобрено, OpenCV может стать стандартным API для компьютерного зрения. Насколько я вижу, FastCV обеспечивает превосходную оптимизацию для процессоров Snapdragon. Это может сыграть важную роль в решении в краткосрочной перспективе, но я уверен, что OpenCV очень быстро закроет разрыв, если таковой будет.

Если вы выбираете путь OpenCV, то есть два под-пути: OpenCV с Android NDK против JavaCV с Android SDK. JavaCV-это оболочка вокруг OpenCV на основе JavaCpp. JavaCV в основном обертывает C API, хотя OpenCV также предоставляет объектно-ориентированный C++ API. API C++ обрабатывает освобождение неиспользуемой памяти например, автоматически. Однако C API (следовательно, JavaCV) требует, чтобы вы обрабатывали освобождение неиспользуемых изображений вручную. Также, Когда вы сталкиваетесь с проблемой в JavaCV, трудно решить проблему, потому что слишком много косвенных ответов для проверки. Проблемы легче найти, когда вы используете OpenCV напрямую. Однако, в случае Android, добавленная сложность NDK не должна быть забыта.

Если доступные функции OpenCV необходимы для конкретного приложения, и нет пользовательских необходим код обработки пиксельного уровня, JavaCV-это путь. Однако, если требуется значительное количество пользовательского кода обработки изображений, Java-код замедлит вас, и вам все равно придется переключиться на NDK. В последнем случае OpenCV является альтернативой для выбора.


Я бы использовал OpenCV, поскольку это лучшая библиотека компьютерного зрения прямо сейчас. Вы запрограммируете свои функции на C++, а затем скомпилируете приложение Android с помощью библиотеки JNI. У вас есть информация о том, как это сделать на официальная документация.

Я работал с этой конфигурацией, и производительность OpenCV в android действительно хорошая. Вы заметите преимущества, если вы сделаете некоторые функции в арифметике с фиксированной точкой. Удачи!--3-->


для проекта на базе android легко начать с JavaCV. Он содержит почти все функции, которые доступны на OpenCV.

но нет богатой документации по JavaCV, но OpenCV имеет. Таким образом, вы можете найти соответствующие методы из документации OpenCV и использовать их в JavaCV(те же имена методов).

есть полный документ в здесь. Это обсуждение о том, как настроить JavaCV в среде eclipse - android.


визирь ответил вполне вежливо, но у меня сложилось впечатление, что его анализ ошибочен. Я думаю, он не знает, что Opencv имеет версию для android под названием OpenCV4Android. Это Java-оболочки для функциональности C++, то есть вы можете избежать использования Android NDK и программировать все на Java. Это сделало бы JavaCV "неофициальной" библиотекой избыточной, за исключением того, что этот, помимо упаковки opencv, также обертывает много других хороших CV библиотеки.

Edit:

Это не меняет выводов визиря о рекомендации OpenCV, это фактически добавляет больше очков к его выбору.


есть новая опция для CV на Android, Google Mobile Vision API. API предоставляется через com.google.android.gms.vision и позволяет обнаруживать различные типы объектов (лица, штрих-коды и черты лица) с учетом произвольного растрового изображения.


начните с OpenCV, а затем перенесите важные функции, такие как отслеживание функций, свертки, расширение/разрушение и, возможно, SVM. В случае компиляции для android оберните эти вызовы с помощью #ifdef _ _ ANDROID__, а затем просто вызовите эквивалент FastCV. Абстракция-ваш друг.