2012-05-20 2 views
11

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

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

OpenCV

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

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

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

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

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

JavaCV

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

FastCv

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

Wikitude

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

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

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

+1

Кто-то еще работал над аналогичным проектом до: http: //www.cs.brown.edu/courses/csci1290/results/final/sbnguyen/ –

+0

@SamuelAudet вы должны поместить это как официальный ответ, чтобы я мог его перечислить! :) – Peter

+0

@SamuelAudet теперь смотрит на него Кажется, что информация в ссылке устарела. – Peter

ответ

24

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

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

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

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

+0

Спасибо, визирь, это был ответ, который я искал более или менее. – Peter

+0

Кстати, мы можем использовать JavaCPP вместо прямого использования NDK. –

+0

Стоит отметить, что SIFT и SURF являются запатентованными и не бесплатными для коммерческого использования. Не знаю, но, возможно, именно поэтому FastCV опускает их. –

5

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

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

Полный текст документа: here. Это обсуждает, как настроить JavaCV на eclipse - среду Android.

+1

Благодарим вас за ответ, но я не искал библиотеку для использования, но, поскольку название говорит, что я ищу общий компаньон. – Peter

7

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

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

+1

Привет @jav_Rock благодарю вас за ответ, но, как я заявляю выше, я действительно искал серьезный сравнительный анализ. – Peter

3

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

Edit:

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

1

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

0

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

Смежные вопросы