Для работы систем компьютерного зрения, им необходимы т.н. «библиотеки образов» (Image Library), где хранятся образцы изображений различных предметов, букв, цифр, людей, пейзажей и пр. Полученные с видеокамер компьютерного зрения изображения, сравниваются с типовыми образами в библиотеке, и система выдает сообщение о том, что она «видит» на изображении с видеокамеры. Кроме того, такие библиотеки обычно содержат не только картинки, но алгоритмы обработки и сравнения изображений.
OpenCV
Библиотека компьютерного зрения с открытым исходным кодом OpenCV (Open Source Computer Vision Library) – библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения. Реализована на языке C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков.
Функции OpenCV:
- интерпретация изображений;
- калибровка камеры по эталону;
- устранение оптических искажений;
- определение сходства;
- анализ перемещения объекта;
- определение формы объекта и слежение за объектом;
- 3D-реконструкция;
- сегментация объекта;
- распознавание жестов.
Рисунок 1. Интерфейс OpenCV
OpenCV выпускается под лицензией BSD и бесплатна как для академического, так и для коммерческого использования. OpenCV имеет интерфейсы для языков C++, Python и Java, может работать под операционными системами Windows, Linux, Mac OS, iOS и Android.
Сообщества пользователей OpenCV насчитывают более 47 тысяч человек. Количество скачиваний платформы превышает 14 миллионов. Область применения варьируется от интерактивного искусства до проверки шахт, сшивания карт в Интернете или передовой робототехники.
PCL (Point Cloud Library)
Библиотека облаков точек PCL (Point Cloud Library) — это крупномасштабный открытый проект для обработки 2D/3D-изображений при помощи технологии облака точек. Платформа PCL содержит множество современных алгоритмов, включая фильтрацию, оценку характеристик, реконструкцию поверхности, регистрацию, подбор модели и сегментацию.
Эти алгоритмы могут использоваться, например, для фильтрации всплесков на фоне зашумлённых данных, сшивания трёхмерных облаков точек, сегментирования соответствующих частей сцены, извлечения ключевых точек и вычисления дескрипторов для распознавания объектов на основе их геометрического вида, создания поверхностей из Облака точек и их визуализации, и других целей.
PCL является программным обеспечением с открытым исходным кодом, т.е. бесплатным для коммерческого и исследовательского использования. Это кроссплатформенный проект, который может быть успешно скомпилирован и развернут на Linux, MacOS, Windows и Android / iOS.
Рисунок 2. Пример визуализации PCL (внизу) для заданного набора облака точек.
Облако точек (pointcloud) – это структура данных, представляющая набор точек, которая обычно используется для представления трёхмерных моделей. В 3D-облаке точек, они обычно представлены координатами X, Y и Z относительно референсной поверхности. Если присутствует информация о цвете (см. рисунок ниже), то облако точек становится четырёхмерным.
Рисунок 3. Пример облаков точек.
Облака точек могут быть получены от аппаратных сенсоров, таких стереокамеры, 3D-сканеры, «летающие» камеры (time-of-flight), или же могут быть сгенерированы программными средствами.
PCL поддерживает интерфейсы OpenNI 3D, и может получать и обрабатывать данные от таких устройств, как 3D-камеры PrimeSensе, Microsoft Kinect, или Asus XTion PRO.
ROS
ROS (Robot Operating System) – это платформа разработки ПО для роботов. Она представляет собой набор инструментов, библиотек и соглашений, которые упрощают разработки сложных и эффективных программ для управления роботами для многих типов роботов.
Разработка действительно эффективных программ для роботов представляет собой довольно сложную задачу. Самые простые для человека действия для робота являются весьма сложными, к тому же они могут сильно зависеть от среды, задачи и расположения робота. Обработка всех возможных вариаций – непосильная задача не только для индивидуального программиста, но и для команды, лаборатории или даже целой организации.
Именно поэтому и была создана библиотека ROS для того, чтобы объединить усилия многих разработчиков и избавить их от необходимости самостоятельно разрабатывать то, что уже было сделано другими. Например, в одной лаборатории могут работать эксперты по маппингу внутренних сред комнат, другая группа может иметь экспертов по использованию данных маппинга для навигации, а ещё одна – может найти алгоритм компьютерного зрения, который хорошо работает в ситуациях распознавания небольших объектов в замкнутых пространствах.
Рисунок 4. Платформа разработки ПО для роботов ROS.
MATLAB
MATLAB — это высокоуровневый язык и интерактивная среда для программирования, расчётов и визуализации результатов. С помощью MATLAB можно анализировать данные, разрабатывать алгоритмы, создавать модели и приложения.
MATLAB широко используется в таких областях, как:
- обработка сигналов и связь,
- обработка изображений и видео,
- системы управления,
- автоматизация тестирования и измерений,
- финансовый инжиниринг,
- вычислительная биология и т.п.
Рисунок 5. Пример распознавания предметов круглой формы на изображении при помощи MATLAB.
MATLAB представляет собой основу семейства продуктов компании MathWorks, и является главным инструментом для решения широкого спектра научных и прикладных задач, в таких областях как: моделирование объектов и разработка систем управления, проектирование коммуникационных систем, обработка сигналов и изображений, измерение сигналов и тестирование, финансовое моделирование, вычислительная биология и др.
CUDA
CUDA (Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.
Значительная часть задач CV – это обработка изображений. Именно под эти задачи создаются графические процессоры GPU и графические ускорители. Поэтому, важной задачей является ускорение работы платформы OpenCV на графических процессорах. Цели этой разработки:
- Обеспечить разработчиков удобной средой для разработки ПО для GPU, а также обеспечить концептуальную совместимость с имеющимся функционалом CPU.
- Достичь наилучшей производительности GPU.
- Законченность и целостность платформы, наличие как можно более широкого функционала.
Рисунок 6. Стек программной платформы CUDA.