В этой главе были рассмотрены общие понятия компьютерного зрения, показаны возможности и методы, существующие на сегодняшний день. Также были показаны преимущества использования компьютерного зрения в бизнесе – где применяются и в каких отраслях экономики. Были рассмотрены и проблемы, с которыми сталкиваются разработчики ИИ и машинного зрения. Показаны применения методов машинного обучения и компьютерного зрения в промышленности. На основе собранного материала была написана обзорная статья.
АНАЛИЗ СРЕДСТВ РАСПОЗНАВАНИЯ ОБРАЗОВ НА
ИЗОБРАЖЕНИИ
РАСПОЗНОВАНИЕ ФИГУР С ИСПОЛЬЗОВАНИЕМ БИБЛИОТЕКИ РЕАЛИЗОВАННОЙ НА ЯП PYTHON – OPENCV
Из первой главы мы узнали, что язык программирования Python хорошо подойдет для написания алгоритма по распознаванию и подсчёту количества труб в пачке. Рассмотрим библиотеки данного языка необходимые для написания алгоритма.
OpenCV была создана в Intel в 1999 году Гари Бредски, а первый релиз вышел в 2000 году [8]. Вадим Писаревский присоединился к Гари Бредски, чтобы руководить российской командой Intel по разработке программного обеспечения OpenCV. В 2005 году OpenCV был использован на автомобиле Stanley, победившем в конкурсе DARPA Grand Challenge 2005 года. В дальнейшем его активная разработка продолжалась при поддержке Willow Garage, а руководили проектом Гари Бредский и Вадим Писаревский. Сейчас OpenCV поддерживает множество алгоритмов, связанных с компьютерным зрением и машинным обучением, и расширяется с каждым днем [35].
OpenCV поддерживает широкий спектр языков программирования, таких как C++, Python, Java и т.д., и доступен на различных платформах, включая Windows, Linux, OS X, Android и iOS. Также активно разрабатываются интерфейсы для высокоскоростных операций на GPU на основе CUDA и OpenCL.
OpenCV-Python - это Python API для OpenCV, сочетающий в себе лучшие качества OpenCV C++ API и языка Python.
OpenCV-Python - это библиотека привязана к языку Python, предназначенная для решения задач компьютерного зрения [11].
Python - это язык программирования общего назначения, созданный Гвидо ван Россумом, который очень быстро стал популярным, в основном
благодаря своей простоте и читаемости кода. Он позволяет программисту выражать идеи в меньшем количестве строк кода без снижения читабельности. По сравнению с такими языками, как C/C++, Python более медленный.
Тем не менее, Python может быть легко расширен с помощью C/C++, что позволяет нам писать код с интенсивными вычислениями на C/C++ и создавать обертки для Python, которые могут быть использованы как модули Python. Это дает нам два преимущества: во-первых, код будет таким же быстрым, как и оригинальный код на C/C++ (поскольку это настоящий код на C++, работающий в фоновом режиме), а во-вторых, код на Python проще, чем на C/C++. OpenCV-Python - это Python-обертка для оригинальной реализации OpenCV на C++ [16].
OpenCV-Python использует Numpy, которая является высоко оптимизированной библиотекой для численных операций с синтаксисом в стиле MATLAB. Все структуры массивов OpenCV преобразуются в массивы Numpy и обратно. Это также облегчает интеграцию с другими библиотеками, использующими Numpy, такими как SciPy и Matplotlib.
OpenCV (Open Source Computer Vision Library) - это программная библиотека компьютерного зрения и машинного обучения с открытым исходным кодом. OpenCV была создана для обеспечения общей инфраструктуры для приложений компьютерного зрения и ускорения использования машинного восприятия в коммерческих продуктах. Будучи продуктом с лицензией BSD, OpenCV упрощает использование и модификацию кода для коммерческих организаций [11].
Библиотека содержит более 2500 оптимизированных алгоритмов, которые включают в себя полный набор как классических, так и современных алгоритмов компьютерного зрения и машинного обучения [15]. Эти алгоритмы могут использоваться для обнаружения и распознавания лиц, идентификации объектов, классификации действий человека в видео, отслеживания движения камеры, отслеживания движущихся объектов,
извлечения 3D-моделей объектов, создания 3D-облаков точек со стереокамер,
сшивки изображений для получения изображения всей сцены в высоком разрешении, поиска похожих изображений из базы данных изображений, удаления красных глаз с изображений, сделанных с использованием вспышки, отслеживания движения глаз, распознавания пейзажей и установки маркеров для наложения на них дополненной реальности и т.д. Сообщество пользователей OpenCV насчитывает более 47 тысяч человек, а количество загрузок превышает 18 миллионов. Библиотека активно используется в компаниях, исследовательских группах и правительственных органах.
Наряду с такими известными компаниями, как Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda, Toyota, которые используют эту библиотеку, существует множество стартапов, таких как Applied Minds, VideoSurf и Zeitera, которые широко используют OpenCV. Области применения OpenCV охватывают широкий диапазон: от сшивки изображений Streetview, обнаружения вторжений в видео наблюдения в Израиле, мониторинга шахтного оборудования в Китае, помощи роботам в навигации и подборе объектов в Willow Garage, обнаружения несчастных случаев при утоплении в бассейне в Европе, запуска интерактивного искусства в Испании и Нью- Йорке, проверки взлетных полос на наличие мусора в Турции, проверки этикеток на продуктах на фабриках по всему миру до быстрого обнаружения лиц в Японии.
Она имеет интерфейсы C++, Python, Java и MATLAB и поддерживает Windows, Linux, Android и Mac OS. OpenCV в основном ориентирован на приложения для зрения в реальном времени и использует преимущества инструкций MMX и SSE, когда они доступны. В настоящее время активно разрабатываются полнофункциональные интерфейсы CUDA и OpenCL. Существует более 500 алгоритмов и примерно в 10 раз больше функций, составляющих или поддерживающих эти алгоритмы. OpenCV написан на родном языке C++ и имеет шаблонизированный интерфейс, который легко работает с контейнерами STL.
Для решения задачи с распознованием геометрических фигур мы будем применять преобразование Хафа. Данный метод существует в библиотеке OpenCV. Рассмотрим его подробнее ниже.
Преобразование Хафа - это метод выделения признаков для обнаружения простых форм, таких как круги, линии и т.д. на изображении.
Простая фигура - это фигура, которая может быть представлена всего несколькими параметрами. Например, линия может быть представлена двумя параметрами (наклон, перехват), а окружность имеет три параметра - координаты центра и радиус (x, y, r). Преобразование Хафа отлично справляется с поиском таких фигур на изображении.
Давайте посмотрим, как работает преобразование Хафа на примере.
Рисунок 6 – Линия в оси Oxy6
Для преобразований Хафа мы будем выражать линии в системе координат Oxy (рисунок 6). Следовательно, уравнение линии [12] может быть записано как:
, (1)
6 Составлено автором по: [11]
, (2)
где r – радиус.
В общем случае для каждой точки (x0,y0) мы можем определить семейство прямых, проходящих через эту точку, как:
, (3)
Это означает, что каждая пара (rθ,θ) представляет каждую линию, проходящую через (x0,y0).
Если для заданного (x0,y0) построить семейство линий, проходящих через него, то мы получим синусоиду [13]. Например, для x0=8 и y0=6 мы получим следующий график (в плоскости θ - r), представлено на рисунке 7:
Рисунок 7-График синусоиды7
Мы рассматриваем только точки, такие что r>0 и 0<θ<2π.
Мы можем проделать ту же операцию для всех точек изображения. Если кривые двух разных точек пересекаются в плоскости θ - r, это означает, что обе точки принадлежат одной прямой[13]. Например, следуя приведенному
примеру и построив график еще для двух точек (рисунок 8): x1=4, y1=9 и x2=12, y2=3, получим:
Рисунок 8 – График для двух других точек8
Три графика пересекаются в одной точке (0.925,9.6), эти координаты являются параметрами (θ,r) или линией, на которой лежат (x0,y0), (x1,y1) и (x2,y2).
Что означает все вышеперечисленное? Это значит, что в общем случае линию можно определить, найдя количество пересечений между кривыми. Чем больше кривых пересекается, тем больше точек у линии, представленной этим пересечением. В общем, мы можем определить порог минимального количества пересечений, необходимых для обнаружения линии.
Именно это и делает линейное преобразование Хафа. Оно отслеживает пересечения между кривыми каждой точки изображения [12]. Если число пересечений превышает некоторый порог, то оно объявляет их линией с параметрами (θ,rθ) точки пересечения.
Библиотека OpenCV включает в себя метод распознавания окружностей, которую будем использовать на практике и рассмотрим подробно в главе 3.
Do'stlaringiz bilan baham: |