OpenCV 4.0 и 4.1 — что нового?
Мы возвращаемся к рассказу об open source библиотеке компьютерного зрения OpenCV. Проект живет и развивается, движимый командой разработчиков, работающих в компании Intel, а также неугасающей поддержкой community. В конце 2018 года увидел свет первый стабильный релиз из ветки 4.х, а буквально месяц назад вышло новое обновление — версия 4.1. Мы попросили авторов библиотеки перечислить кратко, что нового привнесли эти две версии в функционал OpenCV.
OpenCV 4.0
Выход OpenCV 4.0 завершил жизненный цикл версии 3.x — для исправления ошибок и незначительных доработок была создана ветка 3.4, от которой будут создаваться уже минорные 3.4.x версии (по аналогии с 2.4.x).
OpenCV 4.0 final
- OpenCV теперь является C++11 библиотекой и требует C++11-совместимого компилятора;
- Удалены многие функции устаревшего C API (из OpenCV 1.0), старые константы и объявления функций вынесены в отдельные заголовочные файлы (imgproc_c.h) и теперь должны включаться пользователем явно (#include
); - Все CUDA-модули были перенесены в репозиторий opencv_contrib;
- Persistence API для записи и чтения данных в файл переписан на C++, старые функции были удалены;
- Добавлен новый модуль G-API, позволяющий выстраивать графы из операций над изображениями и применять различные оптимизации на них;
- В модуль dnn добавлена поддержка Deep Learning Deployment Toolkit (в том числе opensource-версии), включая использование Intel Movidius Neural Compute Stick или Intel Neural Compute Stick 2 на Raspberri Pi 3;
- В модуль dnn добавлена поддержка сетей в формате ONNX (Open Neural Network Exchange);
- В модуль dnn добавлена экспериментальная поддержка вычислений через Vulkan;
- Добавлена реализация алгоритма real-time обработки 3D сцен/моделей KinectFusion (с оптимизацией под CPU и GPU/OpenCL);
- В модуль objdetect добавлена поддержка детектирования и декодирования QR-кодов (декодер использует библиотеку QUirc) — этим летом в рамках летней интернатуры будет проделана работа над улучшением качества и, возможно, добавлен режим одновременного детектирования-декодирования более одного QR кода на изображении.;
- Очень эффективный и при этом высокоточный алгоритм оптического потока DIS перенесен из opencv_contrib в модуль video главного репозитория.
OpenCV 4.1
- Добавлены диспетчеризованные оптимизированные реализации многих алгоритмов в модулях core и imgproc;
- Улучшения в модуле dnn:
- Внедрена поддержка запуска сетей на Intel Neural Compute Stick 2 (с использованием DLDT);
- Уменьшено максимальное потребление памяти, внедрена поддержка множества новых сетей из TensorFlow
- В модуле videoio добавлена поддержка Android Media NDK API для чтения видео файлов/потоков на Android устройствах из C++ кода (полезно для тестирования алгоритмов);
- Добавлен новый модуль для анализа качества изображений (opencv_contrib/quality). В нём реализованы как базовые алгоритмы (PSNR, SSIM), так и новые специализированные алгоритмы (вроде алгоритма оценки качества без использования исходных изображений BRISQUE — Blind/Referenceless Image Spatial Quality Evaluator);
- Реализовано несколько новых алгоритмов: Robust local optical flow, Quasi Dense Stereo, калибрация камеры привязанной к манипулятору (Hand-Eye);
Более подробную информацию о библиотеке можно найти на изменившемся до неузнаваемости сайте проекта.
Количество патчей с 4.0.0 по 4.1.0: 462 (около 5.3 патчей в день, не считая выходные и праздники). Изменений, как вы видите, много, и они существенны. Если у вас есть вопросы по поводу внедренного функционала, либо, наоборот, не внедренного — добро пожаловать в комментарии, разработчики OpenCV постараются на них ответить.