Как создать систему распознавание объектов на Python
Python является одним из самых перспективных языков, позволяющий воплощать искусственный интеллект в жизнь. В уроке мы создадим систему распознавание объектов при помощи Python и ImageAI.
Одна из самых перспективных наук о компьютерах и программах – компьютерное зрение. Его смысл заключается в способности ПК к распознанию и определению сути картинки. Это важнейшая область в искусственном интеллекте, включающая сразу несколько действий: распознание содержимого фотографии, определение предмета и его классификация или генерация. Поиск объектов на картинке, скорее всего, является важнейшей областью компьютерного зрения.
Определение вещей или живых существ на фотографии активно используется в следующих сферах:
- Поиск автомобилей;
- Система распознания людей;
- Поиск и подсчёт количества пешеходов;
- Усиление системы безопасности;
- Создание беспилотных автомобилей и т. д.
Сегодня удалось разработать много методов для поиска объектов, которые применяются в зависимости от целевой области. В этой сфере, как и в других направлениях использования ИТ-технологий, многое напрямую зависит от программиста. Это отличный инструмент для творчества, с которым «творение» может получить собственный ум. Как использовать интеллект программы уже зависит от творческого мышления разработчика.
Технология действительно перевернула представление об искусственном интеллекте. В дальнейшем она стала основой для следующих методов R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet. Среди них и высокоточные, быстрые методы - SSD и YOLO. Для применения перечисленных алгоритмов, в основе которых глубокое обучение, требуется наличие глубоких познаний в математике и доскональное понимание фреймворков.
Начнем
Рассмотрение советов следует начинать с функциональной библиотеки ImageAI, написанной на Python. Данный фреймворков позволяет с лёгкостью интегрировать инновационные достижения в сфере компьютерного зрения в уже разработанные или новые программы.
Установка Python
Без инсталляции Python 3 здесь не обойтись. Нужно всего лишь загрузить файл с оф. сайта и запустить процесс установки.
Создание зависимостей
Сейчас самое время для того, чтобы посредством pip установить зависимости. Принцип создания команды прост: pip install и название библиотеки (основные фреймворки описаны в списке ниже). Как это выглядит:
pip install tensorflow # устанавливает программную среду Tensorflow.
Какие фреймворки нужно добавить:
- Numpy;
- SciPy;
- OpenCV (opencv-python);
- Pillow;
- Matplotlib;
- H5py;
- Keras;
- ImageAI (ссылка).
Просмотреть все фреймворки и команды для их установки вы можете на официальном сайте с документацией по ImageAI.
Retina Net
Теперь стоит скачать файл для модели Retina Net. Он участвует в процессе идентификации объектов на изображениях.
Как только зависимости установлены, уже есть возможность написать первые строки кода для вычисления предметов на картинках. Следует создать файл FirstDetection с расширением .py. В созданный файл следует вставить код из следующего раздела. Ещё нужно скопировать файл из модели Retina и добавить картинку для обработки в папку с файлом Python.
Тестирование
Создайте файл и разместите в нем следующий код:
from imageai.Detection import ObjectDetection import os exec_path = os.getcwd() detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath(os.path.join( exec_path, "resnet50_coco_best_v2.0.1.h5") ) detector.loadModel() list = detector.detectObjectsFromImage( input_image=os.path.join(exec_path, "objects.jpg"), output_image_path=os.path.join(exec_path, "new_objects.jpg"), minimum_percentage_probability=90, display_percentage_probability=True, display_object_name=False )
Осталось запустить код и ожидать появление результатов работы в консоли. Дальше следует пройти в каталог, где установлен файл FirstDetection.py. Здесь же должна появиться новая фотография или несколько. Чтобы лучше понимать, что произошло, следует открыть изначальную и новую картинку.
Время рассмотреть принцип работы кода:
from imageai.Detection import ObjectDetection import os exec_path = os.getcwd()
- 1 строка: перенос ImageAI и класса для поиска предмета;
- 2 строка: импорт Python os;
- 4 строка: создание переменной, в которой указывается путь к директории с файлом Python, RetinaNet, моделью и образом.
detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath(os.path.join( exec_path, "resnet50_coco_best_v2.0.1.h5") ) detector.loadModel() list = detector.detectObjectsFromImage( input_image=os.path.join(exec_path, "objects.jpg"), output_image_path=os.path.join(exec_path, "new_objects.jpg"), minimum_percentage_probability=90, display_percentage_probability=True, display_object_name=False )
- 1 строка: объявление нового класса для поиска объектов;
- 2 строка: установка типа модели RetinaNet;
- 3 строка: указание пути к модели RetinaNet;
- 6 строка: загрузка модели внутрь класса для поиска;
- 8 строка: вызов функции обнаружения (распознавания объектов) и запуск парсинга пути начального и конечного изображений.
ImageAI имеет поддержку массы различных настроек для поиска объектов. Например, можно настроить извлечение всех найденных объектов во время обработки картинки. Класс поиска способен создать отдельную папку с названием image, а затем извлечь, сохранить и вернуть массив с путём ко всем объектам.
list, extracted_images = detector.detectObjectsFromImage (input_image=os.path.join(execution_path , "objects.jpg"), output_image_path=os.path.join(execution_path , "new_objects.jpg"), extract_detected_objects=True)
Видео обзор
Для более детального рассмотрения библиотеки советуем просмотреть видео обзор этой библиотеки. В ходе видео будет показано не только распознавание объектов на фото, но также вы узнаете про рассмотрение объектов на видео.
- Установка Python;
- Установка Pip;
- Редактор PyCharm;
- Большой курс по языку Python;
- ImageAI GitHub;
- ImageAI документация.
В ходе урока было создано распознавание объектов на видео. Код приведен ниже:
from imageai.Detection import VideoObjectDetection import os execution_path = os.getcwd() detector = VideoObjectDetection() detector.setModelTypeAsYOLOv3() detector.setModelPath( os.path.join(execution_path , "yolo.h5")) detector.loadModel() video_path = detector.detectObjectsFromVideo( input_file_path=os.path.join(execution_path, "traffic.mp4"), output_file_path=os.path.join(execution_path, "traffic_detected"), frames_per_second=20, log_progress=True ) print(video_path)
Заключение
В конце советов по глубокому изучению следует добавить небольшую выборку из самых полезных функций ImageAI, ведь её возможности выходят далеко за пределы обычного обнаружения объектов:
- Установка порога минимальной вероятности: стандартные настройки исключают из выборки все объекты с вероятностью до
50%. Они даже не записываются в лог. При желании можно изменить в большую или меньшую сторону вероятности для определённых случаев; - Особые настройки обнаружения:с помощью класса CustomObject, есть возможность попросить приложение передавать информацию об определении некоторых уникальных объектов;
- Скорость поиска: существует возможность вручную снизить время, которое затрачивает приложение для сканирования фотографии. Есть 3 режима работы: fast, faster, fastest;
- Входящие типы: поддерживает указание в качесиве пути картинке – Numpy-массива, а также файлового потока;
- Выходные типы: можно установить, чтобы функция
detectObjectsFromImageвозвращала картинки файлом или массивом Numpy.
Конечно, охватить всё компьютерное зрение нереально даже за целую книгу, но основные понятия, надеемся, мы смогли донести
Источник: https://itproger.com/news/raspoznavanie-obaektov-na-python-glubokoe-mashinnoe-obuchenie