company_banner

OpenCV 2.4.3

    Авторы: Анатолий Бакшеев, Кирилл Корняков(kirillkornyakov), Андрей Морозов(aod314), Вадим Писаревский, Олег Скляров(olegsklyarov), Евгений Таланин, Александр Шишков(AlexanderShishkov).

    image image

    Привет, Хабр!

    Мы рады сообщить, что 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. Среди них:
    • В новой версии 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:


    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. Вместе мы постарались сделать билиотеку по-настоящему удобной и полезной. Присоединяйтесь к процессу разработки, сейчас это стало удобно, как никогда ранее!

    Полезные ссылки


    Intel

    144,00

    Компания

    Поделиться публикацией

    Похожие публикации

    Комментарии 12
      +2
      Отличная новость! Спасибо!
        +1
        Спасибо!
          0
          Спасибо за новость и библиотеку.

          А OpenCL планируется развивать параллельно с CUDA и многопоточностью или потом все на него переедет?
            0
            Планируется параллельное развитие всех этих направлений. У каждого из них есть свои плюсы и минусы.
            +2
            Можете рассказать подробнее про микромодули? В каком виде они будут распространяться? Какие планы по поводу софта добавления пакетов? Будет очень круто, если удастся создать экосистему вроде MatlabCentral или CRAN! На всех парах к reproducible research :)
              0
              Ваши вопросы определенно на отдаленную перспективу :) Экосистема это отличная цель, но к сожалению увидим мы ее не скоро… И прежде чем приступать к ее формированию, нужно решить ряд сугубо технических задач внутри самой библиотеки. И о какой-то конкретике говорить пока еще рано, поэтому обрисуем идею в общих чертах.
              В свое время OpenCV уже пережила серьезную переделку, когда старые модули (core, aux, ml и highgui) были разбиты на ряд модулей поменьше. Это существенно упростило жизнь разработчиков, которые использовали OpenCV в реальных проектах, поскольку вы зависели только от нужных вам модулей. Это позволило упростить поддержку и сэкономить место на конечных устройствах.
              То, что предполагается сделать сейчас — это продолжение этого процесса, когда вся библиотека разбивается на большее количество модулей, но меньшего размера и с более понятными ответственностями. Фактически, разработчики получат возможность собирать свою версию библиотеки, отбирая только необходимые модули, и при необходимости добавляя свои собственные.
              Уже сейчас, конфигурируя сборку OpenCV при помощи CMake вы можете отобрать модули, которые необходимо собрать, и выключая ненужные модули. Это например активно используется при построении под Android, поскольку например CUDA и OpenCL там не поддерживаются, но нужен Java API и несколько специфических модулей. Кстати стоит почитать про «фиктивный» модуль opencv_world, позволяющий упростить себе жизнь при использовании такой кастомной сборки.

              Таким образом, все что изменится на первых порах — это раскладка библиотеки по большему числу узконаправленных модулей. Плюс станет удобно подкладывать свои папочки с кодами таким образом, чтобы OpenCV считала их своими модулями. Впоследствии стабильные сторонние разработки могут добавляться в состав официальной версии библиотеки. Ну а когда будет закончена эта техническая работа, можно будет всерьез задуматься и про экосистему! :)
              +1
              «несколько важных алгоритмов работают быстрее на двухъядерных чипах»
              А можете плз рассказать какие алгоритмы оптимизированы? В частности интересует cvFindContours. Спасибо.
                +1
                Вот findContours скорее всего все еще работает в один поток. В OpenCV сейчас идет попытка вставить многопоточность во все места, где это можно сделать задешево. Например, во многих случаях можно картинку нарезать на полоски, и обрабатывать их независимо. Но даже это еще далеко не везде сделано, и мы продолжаем увеличивать покрытие. Если хотите получить актуальный список функций, которые распараллелены, я бы предложил сделать grep parallel_for по исходникам, вхождений будет не очень много, но как было сказано, это один из приоритетов на будущее :) Ну и конечно, если у вас появится своя реализация, есть все шансы добавить ее в библиотеку!
                0
                Пример 15puzzle на arm v7 и android API v15 запускаться отказался, хм.
                  0
                  Милости просим в нашу группу поддержки, OpenCV4Android. Желательно указать марку устройства, версию ОС и откуда был получен пример (Google Play, SDK, TADP). Попробуем помочь!
                  0
                  Спасибо за многочисленные ссылки.
                  Ну и не забываем про враппер OpenCV под .NET:
                  EMGU
                  sourceforge.net/projects/emgucv/
                    0
                    Классная и удобная штука. Но для андроида она требует установки своего apk. Это ограничение как то можно обойти? Не пускают в продакшн с таким вот безобразием мой код :)

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое