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. Абстракция - ваш друг.