Привет, Хабр!
Мы рады сообщить, что 2 ноября увидела свет новая версия OpenCV, свободной библиотеки компьютерного зрения. Этот пост написан разработчиками библиотеки, работающими в компании Itseez. Мы перечислим основные нововведения с момента выхода предыдущей версии, стоит отметить, что их достаточно много: новые алгоритмы, ускорение существующих, поддержка новых платформ, обновление процесса разработки, интеграции и тестирования, а так же обновлённая документация. За время подготовки релиза было закрыто более 210 задач на трекере (hackathon, release candidate, release): патчи, исправления ошибок, расширение существующей функциональности.
Веб-ресурсы
У OpenCV наконец-то появился свой дом в сети интернет по адресу opencv.org. На этом сайте вы можете узнать последние события в жизни библиотеки и найти ссылки на все остальные веб-ресурсы, связанные с ней. Для автоматической подписки на новости можно использовать наш публичный RSS канал или твиттер.
Более специализированная информация для разработчиков библиотеки сосредоточена на сайте code.opencv.org, созданном на оcнове ChiliProject. Здесь вы можете найти всю информацию о расписании следующих релизов библиотеки или о решениях, принимаемых разработчиками во время ежеденельных митингов. Информация создается и редактируется в режиме wiki, поэтому чаще всего является наиболее актуальной. Также здесь живет основной git репозиторий OpenCV (но мы рекомендуем пользоваться зеркалом на гитхабе, об этом — ниже) и баг-трекер. Поэтому, если у вас возникают проблемы с использованием библиотеки, не стесняйтесь сообщить нам через этот ресурс.
Также совсем недавно мы открыли еще один сайт, направленный на поддержку пользователей. Это форум, созданный в стиле StackOverflow и посвященный решению проблем при работе с OpenCV и компьютерному зрению вообще. Несмотря на свою короткую историю на ресурсе уже было обсуждено более тысячи вопросов.
Не стоит забывать и про сайт с онлайн-документацией библиотеки, который содержит всю необходимую информацию для последних выпущенных версий.
Интегрированная поддержка многопоточности
Теперь писать параллельный код стало удобнее благодаря новому универсальному примитиву parallel_for_, который умеет использовать различные бэкенды:
Таким образом, появилась возможность наслаждаться улучшенной производительностью даже если у вас отсутствует TBB, но поддерживается другой фреймвок из вышеперечисленных. Так, например на
Windows и Mac OSX, вам не потребуется устанавливать что-то дополнительно, поскольку используются стандартные технологии, поставляемые вместе со средой разработки. Ряд алгоритмов OpenCV, использовавших TBB, были приведены к новому parallel_for_ или распараллелены впервые.
OpenCL
В состав библиотеки добавлен экспериментальный модуль ocl, который реализует алгоритмы компьютерного зрения с помощью технологии OpenCL. На текущий момент доступны следующие алгоритмы, запускаемые пока только на GPU:
- арифметические операции;
- различные фильтры (Sobel, Scharr, GaussianBlur, boxFilter, bilateralFilter);
- различные виды геометрических трансформаций (resize, remap, и др.);
- касадный классификатор (для детекции лиц в первую очередь);
- алгоритм optical flow (Pyramidal Lucas-Kanade method).
Для модуля уже доступна документация, за подробностями предлагаем обратиться к ней.
CUDA / GPU
В GPU модуль в этот раз добавлено много полезных алгоритмов:
- Подавление шумов на изображениях:
- Bilateral Filter;
- Non Local Means Brute Force — реализация не быстрая, однако полностью следует оригинальной статье;
- Fast Non Local Means — в этой реализации опущено взвешивание Гауссом, что позволило использовать подход с бегущими суммами и ускорить алгоритм в десятки раз.
- Алгоритмы выделения фона: ViBe, GMG, FGD, MOG (Mixture of Gaussians).
- В каскадный классификатор добавлена поддержка каскадов с LBP фичами (Local Binary Patterns), которые уже давно присутствуют на CPU;
- Hough Lines, Hough Circles and Generalized Hough Transform;
- Connected Components Labeling / Generalized Floating Range FloodFill.
Также в этом релизе мы сделали публичным так называемый “device layer” — набор заголовочных файлов, содержащий шаблонные функции и классы, написанные на CUDA и предназначенные для компилятора nvcc. Это будет полезно разработчикам, которые сами пишут на CUDA. Теперь, комбинируя фукнциональность device layer со своим кодом, пользователю проще реализовывать на CUDA новые алгоритмы обработки изображений.
Android
Команда OpenCV for Android, поддерживаемая NVIDIA, существенно обновила библиотеку, сделав её более удобной и снабдив более полной документацией. Кроме того, платформа Tegra 3 теперь использует ряд оптимизаций, позволяющих существенно повысить производительность конечных приложений.
- Был опубликован ряд материалов касательно OpenCV for Android. Среди них:
- Создана официальная страница проекта: http://opencv.org/android.
- Доклад на главной европейской конференции по компьютерному зрению ECCV2012.
- Значительно улучшены Android-туториалы для начинающих разработчиков.
- Обновлена Javadoc-документация для Java API библиотеки.
- В новой версии OpenCV Manager требует гораздо меньше кликов от конечного пользователя, кроме того не требуется перезапуск OpenCV-зависимых приложений. Теперь OpenCV Manager поставляется вместе с динамическими библиотеками, поэтому мы избавились от инсталляции дополнительных бинарных пакетов с Google Play. Из соображений совместимости старые пакеты будут оставаться на Google Play до выпуска версии 2.5, однако Android-разработчикам самостоятельно рекомендуется переключиться на версию OpenCV 2.4.3;
- Последняя версия Android, Jelly Bean, отныне вошла в список поддерживаемых. OpenCV камера, работающая на нативном уровне ОС, стала поддерживать большее количество устройств;
- Новый фреймворк для приложений на Java. Мы рекомендуем ознакомиться с новой архитектурой и обновлёнными примерами приложений. Новый фреймворк обеспечивает единую базу для Computer Vision приложений, включающую в себя: Java и native камеру, код для визуализации изображений на экране устройства, простая инициализация OpenCV Manager, правильная обработка событий: пауза, продолжение, поворот и т.д;
- Проделана большая работа по оптимизации производительности для платформы NVIDIA Tegra 3. Вы можете убедиться в этом сами, скачав приложение OpenCV Tegra Demo с Google Play. Полный список оптимизаций доступен в документе по ссылке, Chapter 17. OpenCV for Tegra вошла в пакет NVIDIA Tegra Android Development Pack, поэтому если вы только начинаете разработку под Android, рекомендуем вам воспользоваться, поскольку это освобождет от длительной установки всех необходимых пакетов.
iOS
OpenCV for iOS получила ряд долгожданных нововведений:
- Благодаря работе Eduard Feicho в рамках Google Summer of Code 2012 значительно изменился код для работы с видеокамерой. Теперь он является частью модуля highgui и доступен в виде класса CvVideoCamera;
- Претерпели измения и скрипты для создания OpenCV framework для iOS, поэтому теперь OpenCV поддерживает iOS 6.0 и новую архитектуру armv7s (iPhone 5);
- При построении OpenCV для iOS включен “забытый” в 2.4.2 ключ оптимизации “O3”, поэтому ваши приложения будут работать ещё быстрее;
- Благодаря новому механизму многопоточности, поддерживающему GCD, несколько важных алгоритмов работают быстрее на двухъядерных чипах (A5, A5X, …);
- Кроме того, мы добавили обучающие материалы об основах использования OpenCV для мобильных устройств компании Apple и провели подробный тренинг обо всех нововведениях для iOS в рамках ECCV2012.
Python
В рамках Google Summer of Code 2012 Александр Мордвинцев из Санкт-Петербурга добавил несколько замечательных примеров продвинутого использования Python с OpenCV:
- регистрация изображений при сильных перспективных искажениях с помощью ASIFT;
- распознавание рукописных цифр;
- компенсация размытия при движении камеры;
- использование Amazon PiCloud.
Buildbot
В качестве системы непрерывной интеграции в OpenCV используется Buildbot. Ежедневно собираются более полусотни различных конфигураций: для 32- и 64- битных платформ под Windows, Linux, Mac OS, Android, iOS, с использованием TBB, SSE и GPU оптимизиций. На каждой конфигурации запускаются около пяти тысяч различных тестов. Пятнадцать наиболее популярных конфигураций собираются дважды в сутки. Автоматически собираются tarball, инсталлятор для Windows и фреймворк для iOS, подсчитывается покрытие кода и проверяется бинарная совместимость. Как видите, мы проделали большую работу, чтобы обеспечить высокую стабильность библиотеки 🙂
Любое изменение, попадающее в репозиторий, вызывает запуск нескольких быстрых сборок. В случае удачного исхода делается достаточно достоверное предположение о том, что и на других конфигурациях код будет компилироваться и проходить большинство тестов.
После выхода OpenCV 2.4.2, как и было обещано, мы сменили систему контроля версий. Теперь наш репозиторий живёт под управлением git. Логичным следствием этого шага стало создание зеркала на github, которое позволило привлечь ещё больше сторонних разработчиков к развитию библиотеки. Github предоставляет удобный механизм pull request, так что любой пользователь сервиса может стать соавтором OpenCV. Каждый pull request проходит через автоматическую сборку и в случае успеха попадает к разработчику из команды OpenCV на рецензию. Он проверяет код, задаёт необходимые вопросы автору и принимает решение о том, внести или отклонить предлагаемые изменения.
Отметим, что за несколько недель до выхода описываемого релиза все штатные разработчики также вносили свои изменения через pull request, чтобы оценить достоинства и недостатки такой практики с точки зрения сторонних разработчиков. В одном из постов мы планируем подробно рассказать о непрерывной интеграции в проекте OpenCV. Свои вопросы на эту тему вы можете задать в комментариях, а мы постараемся ответить на них как можно подробнее.
Планы
Следующий релиз под номером 2.5 ожидается весной 2013 года. По сравнению с 2.4.3 в нём произойдут значительные изменения, и бинарная совместимость будет нарушена с целью модернизации архитектуры и API библиотеки.
Среди запланированных работ выделим следующие:
- разбиение функциональности на “микромодули”, поддержка пользовательских микромодулей;
- удаление устаревшего кода (перенос в отдельные неподдерживаемые модули);
- продолжение работ по распараллеливанию и оптимизации;
- новые алгоритмы для работы с Kinect, восстановления 3D, вычислительной фотографии, трекинга и т.д.;
- улучшенная документация и навигация по примерам использования OpenCV.
Заключение
В конце нам хочется поблагодарить всё сообщество разработчиков, которое внесло вклад в состоявшийся релиз, особенно участников Google Summer of Code 2012. Вместе мы постарались сделать билиотеку по-настоящему удобной и полезной. Присоединяйтесь к процессу разработки, сейчас это стало удобно, как никогда ранее!
Полезные ссылки
- Основной сайт
- Форум в стиле StackOverflow
- OpenCV Change Logs
- Документация:
- HTML-версия, ночной билд, предыдущие релизы (2.4.2, 2.4.1, 2.4, 2.3)
- Reference Manual (pdf)
- Tutorials (pdf)
- User Guide (pdf)
- Cheatsheet (pdf)
- Java API, Android Manager (pdf)
- Ресурсы для разработчиков:
ссылка на оригинал статьи http://habrahabr.ru/company/itseez/blog/157281/
Добавить комментарий