Программное обеспечение с открытым исходным кодом удовлетворяет широкие потребности разработчиков робототехнического зрения
Эта статья является частью специального проекта AspenCore по роботам с визуальным управлением.
Приложения для машинного зрения могут выдвигать сложный набор требований, но библиотеки с открытым исходным кодом готовы предоставить решения практически для любых нужд. Разработчики могут найти пакеты с открытым исходным кодом, начиная от базовой обработки изображений и распознавания объектов до планирования движения и предотвращения столкновений, и многое другое, что, возможно, можно упомянуть, гораздо меньше, учитывая их полную информацию, в краткой статье. Тем не менее, вот несколько ключевых пакетов обработки изображений с открытым исходным кодом, которые могут помочь разработчикам реализовать сложные роботизированные системы. (Примечание:в этом отчете основное внимание уделяется библиотекам для более фундаментальных алгоритмов, основанных на изображениях, и, в частности, исключается программное обеспечение с открытым исходным кодом для машинного зрения на основе искусственного интеллекта.)
Ни одна статья о программном обеспечении для машинного зрения не может не выделить Библиотеку компьютерного зрения с открытым исходным кодом (OpenCV) [источник]. Среди доступных пакетов программного обеспечения с открытым исходным кодом OpenCV, пожалуй, является наиболее широко используемым и функционально богатым. Распространение OpenCV, реализующее более 2500 алгоритмов, удовлетворяет требования к обработке изображений с помощью ряда модулей, которые включают, среди прочего, следующие:
-
ядро, которое определяет основные структуры данных и функции, используемые всеми другими модулями;
-
imgproc, который предоставляет функции обработки изображений, включая линейную и нелинейную фильтрацию изображений, преобразования геометрических изображений, преобразование цветового пространства, гистограммы и т. д.;
-
видео, которое поддерживает оценку движения, вычитание фона и алгоритмы отслеживания объектов;
-
calib3d, который предоставляет базовые алгоритмы геометрии, калибровку камеры, оценку положения объекта и многое другое;
-
features2d, который предоставляет детекторы функций, дескрипторы и совпадения дескрипторов;
-
objdetect, который обеспечивает обнаружение объектов и экземпляров предопределенных классов;
Написанный на C ++, OpenCV доступен с интерфейсами для C ++, Python, Java и Matlab и поддерживает Windows, Linux, Android и Mac OS. Наряду с поддержкой наборов инструкций с одной инструкцией и несколькими данными (SIMD), OpenCV обеспечивает ускорение графического процессора на основе CUDA для многих функций через модуль графического процессора и ускорение OpenCL через модуль ocl. Недавно выпущенный OpenCV 4.0 содержит ряд улучшений производительности и возможностей, включая реализацию популярного алгоритма Kinect Fusion.
Для своей функциональности OpenCV может потребовать кривой обучения, превышающей терпение разработчиков, стремящихся быстро продвигаться с помощью видения роботов. Для этих разработчиков ответом может быть SimpleCV [источник] на основе Python. SimpleCV, построенный на OpenCV, обеспечивает функциональность, требуемую продвинутыми разработчиками роботизированного зрения, но предоставляет доступную структуру, которая помогает менее опытным разработчикам исследовать базовые функции машинного зрения с помощью простых вызовов функций Python. Например, разработчики могут быстро реализовать часто используемые функции, такие как определение порога изображения, используя простой встроенный метод в классе SimpleCV Image (img.binarize () в листинге ниже) и, наконец, отображать результаты, показанные на рисунке 1.
from SimpleCV import Image, Color, Display # Создайте функцию, которая выполняет половину и половину image.def halfsies (left, right):result =left # обрезать правое изображение, чтобы оно было только правой стороной. crop =right.crop (right.width / 2.0,0, right.width / 2.0, right.height) # теперь вставьте кадрирование на левое изображение. result =result.blit (crop, (left.width / 2,0)) # вернуть результаты. return result # Загрузить изображение из imgur.img =Image ('http://i.imgur.com/lfAeZ4n.png') # преобразовать изображение в двоичную форму с использованием порогового значения 90 # и инвертировать результаты. output =img.binarize ( 90) .invert () # создать параллельное изображение image.result =halfsies (img, output) # показать получившееся изображение.result.show () # сохранить результаты в файл .result.save ('juniperbinary.png' )
Рис. 1. Перечисленные выше результаты кода Python (Источник:SimpleCV)
Помимо основных функций обработки изображений, OpenCV и SimpleCV реализуют ряд высокоуровневых алгоритмов обработки изображений, которые необходимы роботизированным системам для работы с объектами или безопасной работы в своей физической среде. Одной из фундаментальных структур данных, используемых во многих из этих вычислений, является облако точек - совокупность многомерных точек данных, представляющих объект (рисунок 2). Облако точек объекта, полученное с камер, используется для фундаментальных роботизированных операций, таких как идентификация объекта, выравнивание и подгонка. Для работы с облаками точек библиотека облаков точек (PCL) [источник] реализует алгоритмы фильтрации, подгонки, извлечения ключевых точек, сегментации и многого другого.
Рис. 2. Набор данных облака точек для базового тора. (Источник:Wikimedia Commons / Kieff).
Интернет вещей
- Обновления программного обеспечения в IoT:введение в SOTA
- GE запускает компанию IIoT стоимостью 1,2 млрд долларов
- Все идет IoT
- Там, где старое встречается с IoT, интеграция SaaS
- Software AG прогнозирует будущее Интернета вещей
- В промышленной сфере надежное программное обеспечение означает безопасность
- Tata превозносит преимущества IIoT
- Проблемы тестирования программного обеспечения устройств Интернета вещей
- 10 признаков того, что ваше программное обеспечение ERP нуждается в улучшении
- Использование DevOps для решения проблем встроенного программного обеспечения