Выпуск библиотеки компьютерного зрения OpenCV 4.0

Представлен релиз свободной библиотеки OpenCV 4.0 (Open Source Computer Vision Library), предоставляющей средства для обработки и анализа содержимого изображений. OpenCV предоставляет более 2500 алгоритмов, как классических, так и отражающих последние достижения в области компьютерного зрения и систем машинного обучения. Код библиотеки написан на языке С++ и распространяется под лицензией BSD. Биндинги подготовлены для различных языков программирования, включая Python, MATLAB и Java.

Библиотека может применяться для распознавания объектов на фотографиях и видео (например, распознавание лиц и фигур людей, текста и т.п.), отслеживания движения объектов и камеры, классификации действий на видео, преобразования изображений, извлечения 3D-моделей, формирования 3D-пространства из изображения от стереокамер, создания высококачественных изображений через объединение изображений более низкого качества, поиска на изображении объектов, похожих на представленный набор элементов, применения методов машинного обучения, расстановки маркеров, выявления общих элементов на разных изображениях, автоматического устранения дефектов, таких как эффект красных глаз.

В новом выпуске:

  • Осуществлён переход на C++11 в качестве основного языка для разработки библиотеки. Соответственно, для сборки теперь требуется наличие компилятора, поддерживающего стандарт C++11. Повышены требования к сборочному инструментарию, для сборки теперь необходимо наличие CMake 3.5.1 или более нового выпуска;
  • Проведена чистка C API, удалены многие устаревшие выховы OpenCV 1.x;
  • В основных модулях с языка Си на Си++ полностью переписан код для хранения и чтения структурированных данных в форматах XML, YAML и JSON). Новая реализация потребляет в 3–6 раз меньше памяти;
  • Представлен новый модуль G-API (opencv_gapi), выполняющий функции движка для эффективной обработки изображений с использованием алгоритмов на основе графов;
  • В модуль DNN (Deep Neural Network) с реализацией алгоритмов машинного обучения на основе нейронных сетей добавлен экспериментальный бэкенд для использования графического API Vulkan на платформах без поддержки OpenCL. Добавлена поддержка формата ONNX (Open Neural Network Exchange) для представления моделей машинного обучения. Добавлена поддержка модели Mask-RCNN, для классификации и распознавание изображений. Проведена оптимизация производительности модуля DNN. Улучшено использование OpenCL-ускорения на GPU AMD и NVIDIA;
  • Реализован алгоритм Kinect Fusion для построения 3D-моделей реальных объектов. Реализация оптимизирована для CPU и GPU (OpenCL). В состав также добавлен модуль opencv_contrib/rgbd с поддержкой RGB-D (Red-Green-Blue-Depth) камер, таких как используются в приставке Kinect;
  • В модуль objdetect добавлены детектор и декодировщик QR-кодов;
  • Несколько сотен базовых ядер OpenCV переписаны с использованием универсальных функций, которые сопоставлены с аналогичными функциями расширений SSE2, SSE4, AVX2, NEON и VSX, выбираемых в зависимости от целевой платформы и флагов компиляции. Изменение положительно сказалось на производительности, например, при сборке OpenCV с флагом CPU_BASELINE=AVX2 наблюдается ускорение выполнения некоторых операций обработки изображений на 15–30%;
  • Эффективный и высококачественный алгоритм отслеживания движения объектов DIS (Dense Inverse Search) перемещён из модуля opencv_contrib в модуль video. Более медленный алгоритм оптического потока TV L1 перемещён из opencv в opencv_contrib.

© OpenNet