Введение. История развития машинного зрения
Скачать 1.5 Mb.
|
ВведениеКомпьютерное зрение – это наука о компьютерах и программных системах, которые могут распознавать и понимать изображения. Оно является одной из важных областей искусственного интеллекта и состоит из различных аспектов, таких как распознавание изображения, обнаружение предмета, классификация / генерация изображения и т. д. Обнаружение объектов, вероятно, является наиболее важным аспектом компьютерного зрения. Обнаружение предмета широко применяется в таких областях: распознавание лиц; обнаружение автомобилей; подсчет пешеходов; системы безопасности; беспилотные авто и т. д. Существует масса способов обнаружения объектов, которые могут быть использованы в различных областях. Как и любая другая компьютерная технология, широкий спектр творческого применения зависит от разработчиков программного обеспечения. Прорыв в 2012 году позволил создать такие мощные методы, как R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet, быстрые и очень точные SSD и YOLO. Использование этих методов и алгоритмов, основанных на глубоком обучении, требует серьезных знаний в математике и понимание фреймворков глубокого обучения. История развития машинного зрения Компьютерное зрение оформилось как самостоятельная дисциплина к концу 60х годов. Это направление возникло в рамках искусственного интеллекта в тот его период, когда еще были горячи споры о возможности создания мыслящей машины. Оно выделилось из работ по распознаванию образов. [Зуева, 2008] Кратко история развития машинного зрения представлена на рисунке 1. Рис. 1. История машинного зрения В истории развития машинного зрения можно выделить следующие этапы: · 1955 г. - профессор Массачусетского технологического института (МТИ) Оливер Селфридж опубликовал статью «Глаза и уши для компьютера». В ней автор выдвинул теоретическую идею оснащения компьютера средствами распознавания звука и изображения. · 1958 г. - психолог Фрэнк Розенблатт из Корнеллского университета создал компьютерную реализацию персептрона (от perception - восприятие) - устройства, моделирующего схему распознавания образов человеческим мозгом. Персептрон был впервые смоделирован в 1958 году, причем его обучение требовало около получаса машинного времени на ЭВМ IBM-704. Аппаратный вариант - Mark I Perceptron - был построен в 1960 г. и предназначался для распознавания зрительных образов [Компьютерное зрение, 2010] . Однако рассмотрение задач машинного зрения носило скорее умозрительный характер, так как ни техники, ни математического обеспечения для решения таких сложных задач еще не было. · 1960-е гг.- появление первых программных систем обработки изображений (в основном для удаления помех с фотоснимков, сделанных с самолетов и спутников), стали развиваться прикладные исследования в области распознавания печатных символов. Однако все еще существовали ограничения в развитии данной области науки, такие как отсутствие дешевых оптических систем ввода данных, ограниченность и довольно узкая специализация вычислительных систем. Бурное развитие систем компьютерного зрения на протяжении 60-х годов можно объяснить расширением использования вычислительных машин и очевидной потребностью в более быстрой и эффективной связи человека с ЭВМ. К началу 60-х годов задачи компьютерного зрения в основном охватывали область космических исследований, требовавших обработки большого количества цифровой информации. · 1970-е гг. - Лавренсе Робертс, аспирант МТИ, выдвинул концепцию машинного построения трехмерных образов объектов на основе анализа их двумерных изображений. На данном этапе стал проводиться более глубокий анализ данных. Начали развиваться различные подходы к распознаванию объектов на изображении, например структурные, признаковые и текстурные. · 1979 г. - профессор Ганс-Хельмут Нагель из Гамбургского университета заложил основы теории анализа динамических сцен, позволяющей распознавать движущиеся объекты в видеопотоке. · В конце 1980-х годов были созданы роботы, способные более-менее удовлетворительно оценивать окружающий мир и самостоятельно выполнять действия в естественной среде · 80-е и 90-е годы ознаменовались появлением нового поколения датчиков двухмерных цифровых информационных полей различной физической природы. Развитие новых измерительных систем и методов регистрации двухмерных цифровых информационных полей в реальном масштабе времени позволило получать для анализа устойчивые во времени изображения, генерируемые этими датчиками. Совершенствование же технологий производства этих датчиков позволило существенным образом снизить их стоимость, а значит, значительно расширить область их применения · С начала 90-х годов в алгоритмическом аспекте последовательность действий по обработке изображения принято рассматривать в согласии с так называемой модульной парадигмой. Эта парадигма, предложенная Д. Марром на основе длительного изучения механизмов зрительного восприятия человека, утверждает, что обработка изображений должна опираться на несколько последовательных уровней восходящей информационной линии: от «иконического» представления объектов (растровое изображение, неструктурированная информация) – к их символическому представлению (векторные и атрибутивные данные в структурированной форме, реляционные структуры и т. п.). [Визильтер и др., 2007] · В середине 90-х годов появились первые коммерческие системы автоматической навигации автомобилей. Эффективные средства компьютерного анализа движений удалось разработать в конце XX века · 2003 г. - на рынок были выпущены первые достаточно надежные корпоративные системы распознавания лиц. 2.3. Основные задачи машинного зрения В целом, в задачи систем машинного зрения входит получение цифрового изображения, обработка изображения с целью выделения значимой информации на изображении и математический анализ полученных данных для решения поставленных задач. Однако машинное зрение позволяет решать множество задач, которые условно можно разделить на четыре группы (Рис.2) [Лысенко, 2007] : Распознавание положения Цель машинного зрения в данном применении - определение пространственного местоположения (местоположения объекта относительно внешней системы координат) или статического положения объекта (в каком положении находится объект относительно системы координат с началом отсчета в пределах самого объекта) и передача информации о положении и ориентации объекта в систему управления или контроллер. Примером такого приложения может служить погрузочно-разгрузочный робот, перед которым стоит задача перемещения объектов различной формы из бункера. Интеллектуальная задача машинного зрения заключается, например, в определении оптимальной базовой системы координат и ее центра для локализации центра тяжести детали. Полученная информация позволяет роботу захватить деталь должным образом и переместить ее в надлежащее место. • Измерение В приложениях данного типа основная задача видеокамеры заключается в измерении различных физических параметров объекта. Примером физических параметров может служить линейный размер, диаметр, кривизна, площадь, высота и количество. Пример реализации данного задачи - измерение различных диаметров горлышка стеклянной бутылки. • Инспекция В приложениях, связанных с инспекцией, цель машинного зрения - подтвердить определенные свойства, например, наличие или отсутствие этикетки на бутылке, болтов для проведения операции сборки, шоколадных конфет в коробке или наличие различных дефектов. • Идентификация В задачах идентификации основное назначение видеокамеры - считывание различных кодов (штрих-кодов, 2D-кодов и т. п.) с целью их распознавания средствами камеры или системным контроллером, а также определение различных буквенно-цифровых обозначений. Кроме того к задачам данной группы можно отнести системы, выполняющие задачи безопасности, такие как идентификация личности и техники, детекторы движения. Исходя из задач, которые решает машинное зрение, можно выделить множество областей применения машинного зрения. Однако стоит отметить, что сегодняшняя структура спроса определяется пока еще ограниченными возможностями современных систем машинного зрения. Ниже приведена структура рыночного спроса по проектной тематике (Рис.3) [Бобровский, 2004] : Компоненты системы Типовая система машинного зрения состоит из одной или нескольких цифровых или аналоговых камер (черно-белые или цветные) с подходящей оптикой для получения изображений, подсветки и объекта (рис. 4), оборудования ввода/вывода или каналы связи для доклада о полученных результатах. Кроме того, важна и программная составляющая систем машинного зрения, а именно программное обеспечение для подготовки изображений к обработке (для аналоговых камер это оцифровщик изображений), специфичные приложения программного обеспечения для обработки изображений и обнаружения соответствующих свойств. Рис.4. Состав типовой системы машинного зрения Матрица чувствительных элементов , входящих в состав видеокамеры, предназначена для получения цифрового изображения. В состав матрицы чувствительного элемента входит множество аналого-цифровых преобразователей, предназначенных для преобразования информации о световой интенсивности в цифровое значение. Объектив позволяет камере фокусироваться на определенном расстоянии и получать четкое изображение объекта. В случае, когда объект находится вне фокусного расстояния, изображение получается нерезким (размытым, с нечеткими краями), что ухудшает возможность обработки видеоряда. В отличие от обычных цифровых фотоаппаратов с объективами, поддерживающими функции автофокусировки, в машинном зрении применяется оптика с фиксированным фокусным расстоянием или ручной настройкой фокуса. Существуют различные типы объективов для самых разных задач (стандартные, телескопические, с широким углом обзора, с увеличением и другие), и выбор правильного типа оптики - важный этап при проектировании системы машинного зрения. Подсветка - еще один важный элемент в машинном зрении. Благодаря использованию различных типов освещения можно расширить круг задач, решаемых машинным зрением. Существует различные типы подсветок, но наиболее популярным является светодиодная - в связи с ее высокой яркостью. При этом современный уровень развития светодиодной техники обеспечивает большой срок службы устройства и малое энергопотребление. 3.3. Принципы функционирования систем машинного зрения Последовательность действий, выполняемых системой машинного зрения, можно представить в следующем виде: Рис.5. Последовательность действий системы машинного зрения Изображение, полученное с камеры, попадает в захватчик кадров или в память компьютера. Захватчик кадров - это устройство, которое преобразует выходные данные с камеры в цифровой формат (как правило, это двумерный массива чисел) и размещает изображения в памяти компьютера, так чтобы оно могло быть обработано с помощью программного обеспечения для машинного зрения. Программное обеспечение, как правило, совершает несколько шагов для обработки изображений. Часто изображение для начала обрабатывается с целью уменьшения шума или конвертации множества оттенков серого в простое сочетание черного и белого (бинаризации). После первоначальной обработки программа будет считать, производить измерения и/или определять объекты, размеры, дефекты и другие характеристики изображения. В качестве последнего шага, программа пропускает или забраковывает деталь в соответствии с заданными критериям. Если деталь идет с браком, программное обеспечение подает сигнал механическому устройству для отклонения детали; другой вариант развития событий, система может остановить производственную линию и предупредить человека работника для решения этой проблемы, и что привело к неудаче. Хотя большинство систем машинного зрения полагаться на «черно-белые» камеры, использование цветных камер становится все более распространенным явлением. Кроме того, все чаще системы машинного зрения используют цифровые камеры прямого подключения, а не камеры с отдельным захватчиком кадров, что сокращает расходы и упрощает систему. 4. Смежные области Машинное зрение относится к инженерным автоматизированным системам визуализации в промышленности и на производстве, и в этом качестве машинное зрение, связано с самыми разными областями компьютерных наук: компьютерное зрение, оборудования для управления, базы данных, сетевые системы и машинное обучение. Не стоит путать машинное и компьютерное зрения. Компьютерное зрение является более общей областью исследований, тогда как машинное зрение является инженерной дисциплиной связанной с производственными задачами. Рассмотрим подробнее смежные науки и их взаимодействие с машинным зрением. 4.1. Компьютерное зрение Компьютерное зрение представляет собой научную дисциплину, изучающую теорию и базовые алгоритмы анализа изображений и сцен. Машинное зрениеследует рассматривать как гораздо более комплексную и технологическую область научных и инженерных знаний, охватывающую все проблемы разработки практических систем: выбор схем освещения исследуемой сцены, выбор характеристик датчиков, их количества и геометрии расположения, вопросы калибровки и ориентирования, выбор или разработка оборудования для оцифровки и процессорной обработки, разработка собственно алгоритмов и их компьютерная реализация – то есть весь круг сопутствующих задач. Кроме того, фигурирует такое понятие как зрение роботов. Это более узкая область технологий машинного зрения, а именно часть, которая обеспечивает функционирование систем машинного зрения в условиях жестких временных ограничений. Например, оборудуя роботов нового поколения мобильными камерами и алгоритмами стереовидения, многие компании работают над созданием интеллектуальных роботов, способных не только свободно ориентироваться в квартире и узнавать своих хозяев, но и выполнять определенные задачи по дистанционно подаваемым командам. 4.2. Обработка и анализ изображений Обработка изображений - любая форма обработки информации, для которой входные данные представлены изображением, например, фотографиями или видеокадрами. Обработка изображений может осуществляться как для получения изображения на выходе, так и для получения другой информации (например, распознание текста, подсчёт числа и типа клеток в поле микроскопа и т. д.). Кроме статичных двухмерных изображений, обрабатывать требуется также изображения, изменяющиеся со временем, например видео. В последнее время традиционный термин «обработка изображений » чаще употребляется не как обозначение научной дисциплины, а как указатель на предметную область. Наметилась также тенденция использования этого термина для обозначения обработки нижнего уровня, когда результатом обработки изображения снова является изображение. В то же время термин «понимание изображений » употребляется для обработки верхнего уровня. Цифровая фотограмметрия , бурно развивающаяся в последние годы дисциплина, пришла на смену аналитической фотограмметрии. В то время как классическая аналитическая фотограмметрия изучала в основном метрические соотношения между точками снимков и реальной сцены, современная цифровая фотограмметрия ставит самые сложные задачи анализа и 3D'описания сцены по видеоданным оптических сенсоров. Цифровая фотограмметрия концентрируется прежде всего не на вопросах «понимания» сцены или обнаружения объектов, а на вопросах высокоточного измерения различных ее элементов и реконструкции форм трехмерных поверхностей с использованием стерео и многокамерной съемки, а также специального структурированного подсвета. 4.3. Машинное обучение Машинное обучение - обширный подраздел искусственного интеллекта, изучающий методы построения алгоритмов, способных обучаться. Целью машинного обучения является частичная или полная автоматизация решения сложных профессиональных задач в самых разных областях человеческой деятельности. Машинное обучение имеет широкий спектр приложений, среди которых есть приложения распознавания изображений - область, которой занимается машинное зрение. 5. Наиболее интересные примеры систем машинного зрения 5.1. Видеонаблюдение Автоматические и автоматизированные системы видеонаблюдения являются одной из ключевых составляющих современных комплексных систем безопасности. Задача видеонаблюдения подразумевает визуальный контроль заданной области пространства при помощи одной или нескольких видеокамер, позволяющий сохранять и просматривать цифровые видеоданные, а также постоянно оценивать состояние контролируемой территории, выделяя так называемые охранные события. Охранное видеонаблюдение сегодня имеет два самых важных направления развития - полный переход на цифровые системы видеонаблюдения и развитие функций видеоаналитики. Цифровое (IP) видеонаблюдение предполагает отказ от аналоговых камер и средств передачи данных. Видеоаналитика представляет развитие функций систем видеонаблюдения, позволяя сократить объем регистрируемых данных. Современная система видеонаблюдения включает в себя значительное количество различных технологий компьютерного зрения. Технология интеллектуального видеонаблюдения должна включать следующие основные элементы и программно-алгоритмические модули: • визуальные датчики различного типа для дистанционного видеонаблюдения • средства распределенного сбора информации, сжатия, обработки и передачи цифровой видеоинформации по локальным и глобальным сетям в реальном времени • автоматическое выделение объектов интереса (люди, транспортные средства, другие объекты) · автоматическое слежение за движущимися объектами в зоне наблюдения · биометрическое распознавание персонала, биометрический контроль доступа в критические зоны объекта наблюдения • автоматическую идентификацию транспортных средств, грузов и оборудования на основе распознавания идентификационных меток (регистрационных номеров, штриховых кодов, других технологических маркировок) • методы оценки сценариев поведения наблюдаемых объектов и групп объектов • формирование «тревожных» сообщений оператору в случае реализации неблагоприятных или нестандартных сценариев развития событий в зоне видеонаблюдения · программно-аппаратные средства для реализации методов и алгоритмов сбора и обработки видеоинформации. Рассмотрим ряд примеров создания систем видеонаблюдения и их элементов. 5.1.1. Система обнаружения и сопровождения движущихся объектов по признаку их движения Технология детектирования движения в поле зрения камеры, или motion detection, стала одной из первых коммерческих технологий на потребительском рынке Web-камер [Морзеев, 2002] . Принцип работы технологии очень простой, поскольку предполагается, что камера неподвижна, а следовательно, неподвижен и фон. Движутся только объекты. Хотя существуют и такие технологии, которые позволяют детектировать движущиеся объекты на движущемся фоне. Разработанная в ИИТ (Институт информационных технологий) система предназначена для автоматического выделения и сопровождения малоразмерных объектов по признаку их движения на изображениях, получаемых с подвижной видеокамеры. Система, реализованная на базе персонального компьютера, осуществляет ввод с видеокамеры, визуализацию и обработку цифровых изображений движущихся сцен в реальном времени. Система производит оценку и компенсацию общего сдвига изображения сцены, происходящего за счет собственного относительного движения приемника изображения, а также выделение движущихся малоразмерных объектов по признаку их движения и одновременное сопровождение движения нескольких обнаруженных объектов. На рис.6 показаны: слева – кадр видеопоследовательности с выделенными движущимися объектами; справа – стадии выделения движущихся объектов. НачнемРассматривать советы по глубокому обучению мы начнем с компьютерного зрения и Python-библиотеки ImageAI, позволяющей легко интегрировать современные технологии компьютерного зрения в свои существующие и новые приложения. Установка PythonНеобходимо установить Python 3 с официального сайта. Установка зависимостейСледующий шаг – установка зависимостей через pip: Tensorflow: pip install tensorflow Numpy: pip install numpy SciPy: pip install scipy OpenCV: pip install opencv-python Pillow: pip install pillow Matplotlib: pip install matplotlib H5py: pip install h5py Keras: pip install keras ImageAI: pip install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl Retina NetЗагрузите файл модели Retina Net, который будет использоваться для обнаружения объектов. После установки зависимостей мы продолжаем разбирать советы по глубокому обучению и приступаем к написанию первого кода для обнаружения объектов. Создайте файл FirstDetection.py, а затем впишите в него приведенный ниже код. Скопируйте файл новой модели Retina и изображение, которое требуется обработать, в папку, содержащую файл Python. Тестированиеfrom imageai.Detection import ObjectDetection import os execution_path = os.getcwd() detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5")) detector.loadModel() detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg")) for eachObject in detections: print(eachObject["name"] + " : " + eachObject["percentage_probability"] ) Запустите код и подождите результатов в консоли. После этого перейдите в папку, в которой расположен FirstDetection.py – там вы найдете новое изображение. Давайте посмотрим на оба изображения: Результаты, обнаружения для картинки:person : 55.8402955532074 person : 53.21805477142334 person : 69.25139427185059 person : 76.41745209693909 bicycle : 80.30363917350769 person : 83.58567953109741 person : 89.06581997871399 truck : 63.10953497886658 person : 69.82483863830566 person : 77.11606621742249 bus : 98.00949096679688 truck : 84.02870297431946 car : 71.98476791381836 Результаты, обнаружения для картинки:person : 71.10445499420166 person : 59.28672552108765 person : 59.61582064628601 person : 75.86382627487183 motorcycle : 60.1050078868866 bus : 99.39600229263306 car : 74.05484318733215 person : 67.31776595115662 person : 63.53200078010559 person : 78.2265305519104 person : 62.880998849868774 person : 72.93365597724915 person : 60.01397967338562 person : 81.05944991111755 motorcycle : 50.591760873794556 motorcycle : 58.719027042388916 person : 71.69321775436401 bicycle : 91.86570048332214 motorcycle : 85.38855314254761 Теперь разберемся, как работает этот код. from imageai.Detection import ObjectDetection import os execution_path = os.getcwd() 1я строка: импорт ImageAI и класса обнаружения объектов; 2я строка: импорт класса Python os; 3я строка: определение переменной, содержащей путь к папке с нашим Python-файлом, RetinaNet файл, модели и образы. detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5")) detector.loadModel() detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg")) 1я строка: объявили класс обнаружения объектов; 2я строка: установили тип модели в RetinaNet; 3я строка: установили путь к модели RetinaNet; 4я строка: загружаем модель в класс обнаружения объектов; 5я строка: вызываем функцию обнаружения, а также парсим путь входного и выходного изображений. for eachObject in detections: print(eachObject["name"] + " : " + eachObject["percentage_probability"] ) 1я строка: переберем все результаты, возвращенные методом detectObjectsFromImage; 2я строка: выводим название и процентную вероятность на каждом объекте, обнаруженном на изображении. ImageAI поддерживает массу настроек процесса обнаружения объектов. Одной из них является возможность извлечения каждого объекта, обнаруженного на изображении. Класс обнаружения объектов создаст папку image, извлечет, сохранит и вернет массив, содержащий путь к каждому из изображений. detections, extracted_images = detector.detectObjectsFromImage (input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True) Советы по глубокому обучению завершает список возможностей ImageAI, т. к. кроме элементарного обнаружения он умеет еще кое-что:Регулировка минимальной вероятности: по умолчанию объекты, обнаруженные с вероятностью менее 50, не будут отображаться, и такие события не попадут в лог. Это значение можно увеличить или уменьшить для различных случаев. Пользовательские настройки обнаружения: используя класс CustomObject, вы можете попросить сообщать об обнаружениях одного или нескольких уникальных объектов. Скорость обнаружения: вы можете уменьшить время, необходимое для обнаружения изображения, установив скорость обнаружения “fast”, “faster” и “fastest”. Входящие типы: вы можете указать в пути к файлу изображения Numpy массив или файловый поток в качестве входного изображения. Выходные типы: можно указать, что функция detectObjectsFromImage должна возвращать изображение в виде файла или массива Numpy. Компьютерное зрение связано с моделированием и копированием человеческого зрения с использованием компьютерного программного и аппаратного обеспечения. В этой главе вы узнаете подробно об этом. Компьютерное зрение Компьютерное зрение — это дисциплина, которая изучает, как реконструировать, прерывать и понимать трехмерную сцену по ее 2-мерным изображениям с точки зрения свойств структуры, присутствующей в сцене. Иерархия компьютерного зрения Компьютерное зрение делится на три основные категории следующим образом: Низкоуровневое зрение — включает изображение процесса для извлечения объектов. Видение промежуточного уровня — включает распознавание объектов и интерпретацию трехмерных сцен Видение высокого уровня — включает концептуальное описание сцены, такой как активность, намерение и поведение. Низкоуровневое зрение — включает изображение процесса для извлечения объектов. Видение промежуточного уровня — включает распознавание объектов и интерпретацию трехмерных сцен Видение высокого уровня — включает концептуальное описание сцены, такой как активность, намерение и поведение. Computer Vision Vs Обработка изображений Обработка изображений изучает преобразование изображения в изображение. Вход и выход обработки изображения оба изображения. Компьютерное зрение — это построение явных, значимых описаний физических объектов по их изображению. Результатом компьютерного зрения является описание или интерпретация структур в трехмерной сцене. Приложения Компьютерное зрение находит применение в следующих областях — робототехника Локализация — определить местоположение робота автоматически навигация Избегание препятствий Сборка (колышек, сварка, покраска) Манипуляции (например, робот-манипулятор PUMA) Human Robot Interaction (HRI): интеллектуальная робототехника для взаимодействия и обслуживания людей Локализация — определить местоположение робота автоматически навигация Избегание препятствий Сборка (колышек, сварка, покраска) Манипуляции (например, робот-манипулятор PUMA) Human Robot Interaction (HRI): интеллектуальная робототехника для взаимодействия и обслуживания людей Лекарственное средство Классификация и обнаружение (например, классификация повреждения или клеток и обнаружение опухоли) 2D / 3D сегментация 3D реконструкция человеческого органа (МРТ или УЗИ) Визуальная робототехника Классификация и обнаружение (например, классификация повреждения или клеток и обнаружение опухоли) 2D / 3D сегментация 3D реконструкция человеческого органа (МРТ или УЗИ) Визуальная робототехника Безопасность Биометрия (радужная оболочка, отпечаток пальца, распознавание лица) Наблюдение — обнаружение определенных подозрительных действий или поведения Транспорт Автономное транспортное средство Безопасность, например, мониторинг бдительности водителя Применение промышленной автоматизации Промышленный контроль (обнаружение дефектов) сборочный Считывание штрих-кода и этикетки на упаковке Сортировка объектов Понимание документа (например, OCR) Установка полезных пакетов Для компьютерного зрения с Python вы можете использовать популярную библиотеку OpenCV (Open Source Computer Vision). Это библиотека функций программирования, в основном предназначенная для компьютерного зрения в реальном времени. Он написан на C ++, а его основной интерфейс — на C ++. Вы можете установить этот пакет с помощью следующей команды — pip install opencv_python-X.X-cp36-cp36m-winX.whl Здесь X представляет версию Python, установленную на вашем компьютере, а также win32 или 64-битную версию, которую вы используете. Если вы используете среду anaconda , используйте следующую команду для установки OpenCV: conda install -c conda-forge opencv Чтение, запись и отображение изображения Большинство приложений CV должны получать изображения в качестве входных данных и выводить изображения в качестве выходных. В этом разделе вы узнаете, как читать и писать файл изображения с помощью функций, предоставляемых OpenCV. Функции OpenCV для чтения, отображения, записи файла изображения OpenCV предоставляет следующие функции для этой цели — Функция imread () — это функция для чтения изображения. OpenCV imread () поддерживает различные форматы изображений, такие как PNG, JPEG, JPG, TIFF и т. Д. Функция imshow () — это функция для отображения изображения в окне. Окно автоматически подгоняется под размер изображения. OpenCV imshow () поддерживает различные форматы изображений, такие как PNG, JPEG, JPG, TIFF и т. Д. Функция imwrite () — это функция для записи изображения. OpenCV imwrite () поддерживает различные форматы изображений, такие как PNG, JPEG, JPG, TIFF и т. Д. Функция imread () — это функция для чтения изображения. OpenCV imread () поддерживает различные форматы изображений, такие как PNG, JPEG, JPG, TIFF и т. Д. Функция imshow () — это функция для отображения изображения в окне. Окно автоматически подгоняется под размер изображения. OpenCV imshow () поддерживает различные форматы изображений, такие как PNG, JPEG, JPG, TIFF и т. Д. Функция imwrite () — это функция для записи изображения. OpenCV imwrite () поддерживает различные форматы изображений, такие как PNG, JPEG, JPG, TIFF и т. Д. пример В этом примере показан код Python для чтения изображения в одном формате — показ его в окне и запись того же изображения в другом формате. Рассмотрим шаги, показанные ниже — Импортируйте пакет OpenCV, как показано на рисунке — import cv2 Теперь для чтения определенного изображения используйте функцию imread () — image = cv2.imread('image_flower.jpg') Для показа изображения используйте функцию imshow () . Название окна, в котором вы можете видеть изображение, будет image_flower . cv2.imshow('image_flower',image) cv2.destroyAllwindows() Теперь мы можем записать то же изображение в другой формат, скажем .png, используя функцию imwrite () — cv2.imwrite('image_flower.png',image) Вывод True означает, что изображение было успешно записано в виде файла .png также в той же папке. True Примечание. Функция destroyallWindows () просто уничтожает все созданные нами окна. Преобразование цветового пространства В OpenCV изображения не сохраняются с использованием обычного цвета RGB, а хранятся в обратном порядке, то есть в порядке BGR. Следовательно, код цвета по умолчанию при чтении изображения — BGR. Функция преобразования цвета cvtColor () предназначена для преобразования изображения из одного цветового кода в другой. пример Рассмотрим этот пример для преобразования изображения из BGR в оттенки серого. Импортируйте пакет OpenCV , как показано на рисунке — import cv2 Теперь для чтения определенного изображения используйте функцию imread () — image = cv2.imread('image_flower.jpg') Теперь, если мы видим это изображение с помощью функции imshow () , то мы можем видеть, что это изображение в BGR. cv2.imshow('BGR_Penguins',image) Теперь используйте функцию cvtColor () для преобразования этого изображения в градации серого. image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.imshow('gray_penguins',image) Обнаружение края Люди, увидев черновой набросок, могут легко распознать многие типы объектов и их позы. Вот почему края играют важную роль в жизни людей, а также в приложениях компьютерного зрения. OpenCV предоставляет очень простую и полезную функцию Canny () для обнаружения ребер. пример В следующем примере показана четкая идентификация ребер. Импортируйте пакет OpenCV, как показано на рисунке — import cv2 import numpy as np Теперь для чтения определенного изображения используйте функцию imread () . image = cv2.imread('Penguins.jpg') Теперь используйте функцию Canny () для определения краев уже прочитанного изображения. cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300)) Теперь, чтобы показать изображение с краями, используйте функцию imshow (). cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’)) Эта программа на Python создаст изображение с именемdge_penguins.jpg с обнаружением краев. Обнаружение Лица Обнаружение лица является одним из увлекательных приложений компьютерного зрения, которое делает его более реалистичным и футуристическим. OpenCV имеет встроенную функцию для распознавания лиц. Мы собираемся использовать каскадный классификатор Хаара для обнаружения лиц. Данные каскада Хаара Нам нужны данные, чтобы использовать каскадный классификатор Хаара. Вы можете найти эти данные в нашем пакете OpenCV. После установки OpenCv вы можете увидеть имя папки haarcascades . Там были бы .xml файлы для другого приложения. Теперь скопируйте их все для различного использования и вставьте в новую папку в текущем проекте. пример Ниже приведен код Python, использующий каскад Хаара для обнаружения лица Амитабха Бачча, показанный на следующем изображении. Импортируйте пакет OpenCV , как показано на рисунке — import cv2 import numpy as np Теперь используйте HaarCascadeClassifier для обнаружения лица — face_detection= cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/ haarcascade_frontalface_default.xml') Теперь для чтения определенного изображения используйте функцию imread () — img = cv2.imread('AB.jpg') Теперь, преобразуйте его в оттенки серого, потому что он будет принимать серые изображения — gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) Теперь, используя face_detection.detectMultiScale , выполните фактическое обнаружение лица faces = face_detection.detectMultiScale(gray, 1.3, 5) Теперь нарисуйте прямоугольник вокруг всего лица — for (x,y,w,h) in faces: img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3) cv2.imwrite('Face_AB.jpg',img) Эта программа на Python создаст изображение с именем Face_AB.jpg с распознаванием лиц, как показано Обнаружение глаз Обнаружение глаз — еще одно увлекательное применение компьютерного зрения, которое делает его более реалистичным и футуристическим. OpenCV имеет встроенное средство для обнаружения глаз. Мы собираемся использовать каскадный классификатор Хаара для обнаружения глаз. пример В следующем примере приведен код Python, использующий каскад Хаара для обнаружения лица Амитабха Бачча, приведенный на следующем рисунке: Импортируйте пакет OpenCV, как показано на рисунке — import cv2 import numpy as np Теперь используйте HaarCascadeClassifier для обнаружения лица — eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml') Теперь для чтения определенного изображения используйте функцию imread () img = cv2.imread('AB_Eye.jpg') Теперь, преобразуйте его в оттенки серого, потому что он будет принимать серые изображения — gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) Теперь с помощью eye_cascade.detectMultiScale выполните фактическое распознавание лица eyes = eye_cascade.detectMultiScale(gray, 1.03, 5) Теперь нарисуйте прямоугольник вокруг всего лица — for (ex,ey,ew,eh) in eyes: img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2) cv2.imwrite('Eye_AB.jpg',img) Заключение Машинное зрение достаточно неоднозначная тематика. С одной стороны, в этой области получены впечатляющие результаты и решены многие поставленные задачи. Системы машинного зрения справляются с автоматизацией производства, видеонаблюдением, анализом медицинских снимков. С другой стороны, машинному зрению все еще далеко до человеческого. Многие высоты достигнуты, многие еще впереди. Поэтому существует два взгляда на развитие машинного зрения. Одни говорят, что машины достигнут небывалых высот и разовьют огромную мощь, опередят человека. Другие утверждают, что машины никогда не превзойдут человека и машинное зрение так и останется непригодным для решения некоторых проблем, где необходимо вмешательство человека. Несовершенство машинного зрения обусловлено отчасти техническими причинами, однако идет бурное развитие информационных технологий и находится все больше решений технических проблем. Системы машинного зрения становятся все более актуальны, так как призваны решать наиболее актуальные проблемы человечества, такие как безопасность, медицинские вопросы, вопросы качества продукции. Список литературы · [Бобровский, 2004] Бобровский С. «Когда машины прозреют» - http://www.pcweek.ru/themes/detail.php?ID=66663&sphrase_id=12198 · [Визильтер и др., 2007] Визильтер Ю. В., Желтов С. Ю., Князь В. А., Ходарев А. Н., Моржин А. В. Обработка и анализ цифровых изображений с примерами на LabVIEW IMAQVision. – М.: ДМК Пресс, 2007. · [Зуева, 2008] Зуева Е.Ю. «Компьютерное зрение в ИПМ им. В.М. Келдыша РАН – история развития» - http://www.keldysh.ru/papers/2009/art04/Zueva_09.htm · [Катыс , 1990] Катыс Г.П. Обработка визуальной информации. – М.: Машиностроение, 1990г. · [Компьютерное зрение ] Компьютерное (машинное) зрение (computer vision) http://es-prof.com/m_mvision.php · [Лысенко, 2007] Лысенко О. Машинное зрение от SICK/IVP // Компоненты и технологии. 2007. № 1 · [Морзеев, 2002] Морзеев Ю. "Зачем компьютеру зрение" - http://www.compress.ru/article.aspx?id=10656&iid=434 · [Талан, 2007] Талан А. Перспективы машинного зрения, 2007 - http://www.mirf.ru/Articles/art2170.htm · [Davies, 2004] Davies E. R. Machine Vision : Theory, Algorithms, Practicalities. Academic Press, 2004. · [Computer Vision, 2010] Computer Vision - http://www.graphicon.ru/oldgr/ru/library/cv/cv_intro.html · [ Wikipedia , 2010] Машинное зрение - http://en.wikipedia.org/wiki/Machine_vision |