Android Computer Vision JavaCV OpenCV Сравнение FastCV

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

Я расскажу, что я нашел до сих пор.

OpenCV

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

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

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

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

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

JavaCV

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

FastCv

  • новый с Qualcomm позади него.

Wikitude

  • это больше для расширенной реальности, но в ее ядре все еще есть компьютер видение.

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

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

Ответ 1

В принципе есть два варианта: OpenCV и FastCV

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

Edit:

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

Ответ 5

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

Ответ 6

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