Распознавание образов на изображении

Одна из самых перспективных наук о компьютерах и программах – компьютерное зрение. Его смысл заключается в способности ПК к распознанию и определению сути картинки. Это важнейшая область в искусственном интеллекте, включающая сразу несколько действий: распознание содержимого фотографии, определение предмета и его классификация или генерация. Поиск объектов на картинке, скорее всего, является важнейшей областью компьютерного зрения.

Определение вещей или живых существ на фотографии активно используется в следующих сферах:

  • Поиск автомобилей;
  • Система распознания людей;
  • Поиск и подсчёт количества пешеходов;
  • Усиление системы безопасности;
  • Создание беспилотных автомобилей и т. д.

Сегодня удалось разработать много методов для поиска объектов, которые применяются в зависимости от целевой области. В этой сфере, как и в других направлениях использования ИТ-технологий, многое напрямую зависит от программиста. Это отличный инструмент для творчества, с которым «творение» может получить собственный ум. Как использовать интеллект программы уже зависит от творческого мышления разработчика.

Технология действительно перевернула представление об искусственном интеллекте. В дальнейшем она стала основой для следующих методов R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet. Среди них и высокоточные, быстрые методы — SSD и YOLO. Для применения перечисленных алгоритмов, в основе которых глубокое обучение, требуется наличие глубоких познаний в математике и доскональное понимание фреймворков.

Начнем

Рассмотрение советов следует начинать с функциональной библиотеки ImageAI , написанной на Python. Данный фреймворков позволяет с лёгкостью интегрировать инновационные достижения в сфере компьютерного зрения в уже разработанные или новые программы.

Установка Python

Без инсталляции Python 3 здесь не обойтись. Нужно всего лишь загрузить файл с оф. сайта и запустить процесс установки.

Создание зависимостей

Сейчас самое время для того, чтобы посредством pip установить зависимости. Принцип создания команды прост: pip install и название библиотеки (основные фреймворки описаны в списке ниже). Как это выглядит:

Какие фреймворки нужно добавить:

Просмотреть все фреймворки и команды для их установки вы можете на официальном сайте с документацией по ImageAI .

Retina Net

Теперь стоит скачать файл для модели Retina Net. Он участвует в процессе идентификации объектов на изображениях.

Как только зависимости установлены, уже есть возможность написать первые строки кода для вычисления предметов на картинках. Следует создать файл FirstDetection с расширением .py . В созданный файл следует вставить код из следующего раздела. Ещё нужно скопировать файл из модели Retina и добавить картинку для обработки в папку с файлом Python.

Тестирование

Создайте файл и разместите в нем следующий код:

Осталось запустить код и ожидать появление результатов работы в консоли. Дальше следует пройти в каталог, где установлен файл FirstDetection.py . Здесь же должна появиться новая фотография или несколько. Чтобы лучше понимать, что произошло, следует открыть изначальную и новую картинку.

Время рассмотреть принцип работы кода:

Описание строк:

  • 1 строка: перенос ImageAI и класса для поиска предмета;
  • 2 строка: импорт Python os;
  • 4 строка: создание переменной, в которой указывается путь к директории с файлом Python, RetinaNet, моделью и образом.

Описание строк:

  • 1 строка: объявление нового класса для поиска объектов;
  • 2 строка: установка типа модели RetinaNet;
  • 3 строка: указание пути к модели RetinaNet;
  • 6 строка: загрузка модели внутрь класса для поиска;
  • 8 строка: вызов функции обнаружения (распознавания объектов) и запуск парсинга пути начального и конечного изображений.
Читайте также:  Megafon настройки мобильного интернета

ImageAI имеет поддержку массы различных настроек для поиска объектов. Например, можно настроить извлечение всех найденных объектов во время обработки картинки. Класс поиска способен создать отдельную папку с названием image, а затем извлечь, сохранить и вернуть массив с путём ко всем объектам.

Видео обзор

Для более детального рассмотрения библиотеки советуем просмотреть видео обзор этой библиотеки. В ходе видео будет показано не только распознавание объектов на фото, но также вы узнаете про рассмотрение объектов на видео.

Ссылки из видео:

В ходе урока было создано распознавание объектов на видео. Код приведен ниже:

Заключение

В конце советов по глубокому изучению следует добавить небольшую выборку из самых полезных функций ImageAI, ведь её возможности выходят далеко за пределы обычного обнаружения объектов:

  • Установка порога минимальной вероятности: стандартные настройки исключают из выборки все объекты с вероятностью до 50% . Они даже не записываются в лог. При желании можно изменить в большую или меньшую сторону вероятности для определённых случаев;
  • Особые настройки обнаружения: с помощью класса CustomObject, есть возможность попросить приложение передавать информацию об определении некоторых уникальных объектов;
  • Скорость поиска: существует возможность вручную снизить время, которое затрачивает приложение для сканирования фотографии. Есть 3 режима работы: fast, faster, fastest;
  • Входящие типы: поддерживает указание в качесиве пути картинке – Numpy-массива, а также файлового потока;
  • Выходные типы: можно установить, чтобы функция detectObjectsFromImage возвращала картинки файлом или массивом Numpy.

Конечно, охватить всё компьютерное зрение нереально даже за целую книгу, но основные понятия, надеемся, мы смогли донести.

Содержание

Направления в распознавании образов [ править | править код ]

Можно выделить два основных направления [1] :

  • Изучение способностей к распознаванию, которыми обладают живые существа, объяснение и моделирование их;
  • Развитие теории и методов построения устройств, предназначенных для решения отдельных задач в прикладных целях.

Формальная постановка задачи [ править | править код ]

Распознавание образов — это отнесение исходных данных к определенному классу с помощью выделения существенных признаков, характеризующих эти данные, из общей массы несущественных данных.

Читайте также:  Разбить таблицу по листам excel

При постановке задач распознавания стараются пользоваться математическим языком, стремясь — в отличие от теории искусственных нейронных сетей [2] , где основой является получение результата путём эксперимента, — заменить эксперимент логическими рассуждениями и математическими доказательствами [3] .

Классическая постановка задачи распознавания образов [4] : Дано множество объектов. Относительно них необходимо провести классификацию. Множество представлено подмножествами, которые называются классами. Заданы: информация о классах, описание всего множества и описание информации об объекте, принадлежность которого к определенному классу неизвестна. Требуется по имеющейся информации о классах и описании объекта установить — к какому классу относится этот объект.

Наиболее часто в задачах распознавания образов рассматриваются монохромные изображения, что дает возможность рассматривать изображение как функцию на плоскости. Если рассмотреть точечное множество на плоскости T , где функция f ( x , y ) выражает в каждой точке изображения его характеристику — яркость, прозрачность, оптическую плотность, то такая функция есть формальная запись изображения.

Множество же всех возможных функций f ( x , y ) на плоскости T есть модель множества всех изображений X . Вводя понятие сходства между образами можно поставить задачу распознавания. Конкретный вид такой постановки сильно зависит от последующих этапов при распознавании в соответствии с тем или иным подходом.

Некоторые методы распознавания графических образов [ править | править код ]

Для оптического распознавания образов можно применить метод перебора вида объекта под различными углами, масштабами, смещениями и т. д. Для букв нужно перебирать шрифт, свойства шрифта и т. д.

Второй подход — найти контур объекта и исследовать его свойства (связность, наличие углов и т. д.)

Ещё один подход — использовать искусственные нейронные сети. Этот метод требует либо большого количества примеров задачи распознавания (с правильными ответами), либо специальной структуры нейронной сети, учитывающей специфику данной задачи.

Персептрон как метод распознавания образов [ править | править код ]

Фрэнк Розенблатт, вводя понятие о модели мозга, задача которой состоит в том, чтобы показать, как в некоторой физической системе, структура и функциональные свойства которой известны, могут возникать психологические явления, описал простейшие эксперименты по различению. Данные эксперименты целиком относятся к методам распознавания образов, но отличаются тем, что алгоритм решения не детерминированный.

Простейший эксперимент, на основе которого можно получить психологически значимую информацию о некоторой системе, сводится к тому, что модели предъявляются два различных стимула и требуется, чтобы она реагировала на них различным образом. Целью такого эксперимента может быть исследование возможности их спонтанного различения системой при отсутствии вмешательства со стороны экспериментатора, или, наоборот, изучение принудительного различения, при котором экспериментатор стремится обучить систему проводить требуемую классификацию.

В опыте с обучением персептрону обычно предъявляется некоторая последовательность образов, в которую входят представители каждого из классов, подлежащих различению. В соответствии с некоторым правилом модификации памяти правильный выбор реакции подкрепляется. Затем персептрону предъявляется контрольный стимул и определяется вероятность получения правильной реакции для стимулов данного класса. В зависимости от того, совпадает или не совпадает выбранный контрольный стимул с одним из образов, которые использовались в обучающей последовательности, получают различные результаты:

  1. Если контрольный стимул не совпадает ни с одним из обучающих стимулов, то эксперимент связан не только с чистым различением, но включает в себя и элементы обобщения.
  2. Если контрольный стимул возбуждает некоторый набор сенсорных элементов, совершенно отличных от тех элементов, которые активизировались при воздействии ранее предъявленных стимулов того же класса, то эксперимент является исследованием чистого обобщения.
Читайте также:  Добавить запись в массив

Персептроны не обладают способностью к чистому обобщению, но они вполне удовлетворительно функционируют в экспериментах по различению, особенно если контрольный стимул достаточно близко совпадает с одним из образов, относительно которых персептрон уже накопил определенный опыт.

Одно из важных современных направлений в программном обеспечении — программы, обладающие компьютерным зрением. Данная технология позволяет анализировать информацию в изображениях и видео-файлах. Например, читать текст или обнаруживать расположение определенных объектов.

Для практического изучения данной технологии мной была поставлена задача определения кружки на фотографии. Для реализации было решено использовать android + OpenCV (http://opencv.org/). OpenCV — это библиотека компьютерного зрения с открытым исходным кодом, разработанная для С++, python, java и многих других языков. Она имеет множество функций, но нас интересует возможность обрабатывать изображения и проводить на них поиск объектов с помощью каскадного алгоритма Виолы-Джонса.

Алгоритм Виолы-Джонса — это метод обнаружения объектов на изображениях, основанный на признаках Хаара. Основные его особенности — высокая скорость работы и низкая частота ложных срабатываний. Изначально алгоритм был разработан для обнаружения лиц на изображениях, но его можно натренировать на обнаружение других объектов. Для своей работы он использует разбиения (splitting) изображения на области, оценку яркости в этих областях и отсечения областей, где классифицируемый объект однозначно не находится. Данный алгоритм реализован в openCV отдельной функцией, которой на вход требуется файл-классификатор, определяющий веса для работы алгоритма и изображение, на котором будет проводиться поиск.

Для тренировки классификатора я использовал программу Cascade-Trainer-GUI (http://amin-ahmadi.com/cascade-trainer-gui/), которая предоставляет оконный интерфейс для стандартных программ из набора OpenCV — opencv_createsamples и opencv_traincascade.

Процесс тренировки начинается с подготовки исходных данных. В качестве исходных данных выступают изображения, содержащие и не содержащие исходный объект. Изображения с объектом считаются позитивными и отправляются в папку p, а те, на которых объект отсутствует — негативными и помещаются в папку n. Стоит заметить, что позитивные изображения должны содержать только распознаваемый объект и ничего больше. Иначе придётся создать файл, который будет содержать координаты объекта на изображении.

opencv_createsamples — это программа, которая генерирует исходные файлы для opencv_traincascade. Негативы формируются по принципу нарезки: из негативной фотографии вырезается случайная область. Позитивы создаются путем помещения какого-нибудь позитивного изображения объекта на негативное, незначительных изменений яркости, поворота и перспективы

После создания этих изображений используется opencv_traincascade, которая принимает полученные образцы и на их основе определяет веса и пропускные пороги для каскадного классификатора. Веса должны быть подобраны так, чтобы сеть отвергала все негативные изображения и принимала все позитивные.

Но это только теория. На практике эти процессы осуществляет Cascade-Trainer-GUI, которому для начала работы требуется только две папки с фотографиями, одна из которых называется p, а другая n. В них хранятся позитивные и негативные образцы соответственно. Для того, чтобы натренировать сеть, мне потребовалось 47 фотографий моего объекта с разным углом камеры, углом падения света, наклоном и яркостью. После этого я удвоил данное число путем зеркального отражения. Негативных фотографий было только 42, но с помощью нарезки изображений было создано 1000 негативных образцов. Часть негативных изображений для разнообразия была взята из интернета.

«>