Распознавание объектов на 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.
Конечно, охватить всё компьютерное зрение нереально даже за целую книгу, но основные понятия, надеемся, мы смогли донести.
Больше интересных новостей

Лучшие сайты, созданные на C# ASP .NET

Вся правда об NFT и его популярности

Игровые движки: лучшие из лучших

Что такое программирование и как оно соотносится с нашей жизнью?
Комментарии (1)
аскар 27 января 2023 в 18:20
Input image with path C:\Users\asqar\Desktop\Projects\Object\Object.jpg not a valid file
ошибка такая, че делать?(
Владимир 24 сентября 2023 в 16:34
Распознавание образов в Python. Часть I — введение
Далее распакуйте архив и переместите директорию «images» туда, где вы будете создавать ваш код. Таким образом, у нас теперь есть некоторое количество тестовых изображений, которые мы и будем использовать. Также у нас отдельно есть изображения цифр в папке «numbers» .
Теперь нам необходим язык Python. Хотя данная серия статей создавалась на Python 2.7, все это также можно повторить без каких-либо проблем и на Python 3.
Далее нам потребуются библиотеки Matplotlib , NumPy и PIL (или иначе Pillow ). Простейший способ их установки — через пакетный менеджер pip .
После установки Python перейдите в командную строку, cmd.exe для Windows или bash для Linux, и наберите в ней:
pip install numpy pip install matplotlib
Если есть какие-то проблемы, можно, например, почитать пособие по этому пакетному менеджеру.
Теперь, все установив, мы готовы переходить к следующей части.
Как написать программу для распознавания тестов по фотографии?
Есть идея создать что-то на подобии ZipGrade (https://www.zipgrade.com/) — это мобильное приложение которое по фотографии сделанной специальной формы распознает ответы на вопросы и считает количество правильных и не правильных ответов. Вопрос заключается в том как можно реализовать приблизительно такой функционал распознавания ответов в форме по фото на python (если можно, то показать минимальный пример распознавания по фотографий в формах)?
Отслеживать
задан 19 мая в 15:40
Для этого стоит использовать обученную модель компьютерного зрения, я знаю что есть библиотеки с уже обученными моделями, распознающими текст по фото, но не уверен, что есть такие, которые распознают выбранные ответы со специальной формы(посмотрел форму по ссылке). Поэтому есть 2 варианта, либо использовать более простую форму, использующую пары № вопроса — ответ, либо заняться обучением модели самому и научить ее распознавать по фото номер вопроса и ответ. Для этого подойдет библиотека cv2
19 мая в 15:46
1 ответ 1
Сортировка: Сброс на вариант по умолчанию

Минимальный пример кода:
import cv2 import numpy as np # загрузка изображения img = cv2.imread('123.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Бинаризация изображения ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV) # Поиск внешних контуров contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) lst = [] for inx, contour in enumerate(reversed(contours), 1): # Получение координат и размеров описывающего прямоугольника x, y, w, h = cv2.boundingRect(contour) # Выделение области roi = thresh[y:y+h, x:x+w] # Подсчет количества черных пикселей внутри прямоугольника black_pixels = cv2.countNonZero(roi) #print(black_pixels) q = 0 if black_pixels > 2700: #print(inx) q = 1 # Отображение результата на изображении cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) lst.append(q) chunks = [lst[i:i + 5] for i in range(0, len(lst), 5)] for inx, chunk in enumerate(chunks,1): max_index = chunk.index(1)+1 print(f'вопрос ответ ') # Отображение результата cv2.imshow("Result", img) cv2.waitKey(0) cv2.destroyAllWindows() вопрос 1 ответ 3 вопрос 2 ответ 4
Распознавание объектов на фото и видео

Нейросети умеют распознавать образы на фото. Например, если отдать модели на вход фотографии разных людей, она сможет найти соответствия фотографиям в базе, если обучить модель распознавать мебель, то она отличит стол от шкафа.
У Сбера есть собственная система распознавания Layer, которая умеет работать с изображениями и видео. Платформа может распознать, например, какая одежда на человеке, и найти похожую в каталоге партнёров. Посмотрим, как это работает и какие возможности даёт программа.
Видеозвонки в SberJazz
Общайтесь с друзьями и близкими везде, где есть Интернет
Попробовать сейчас
Как работает технология распознавания образов
Нейросети, которые работают с распознаванием образов с картинки, сравнивают данные с базой изображений и ищут соответствия. Работа сервиса распознавания объектов базируется на уникальном алгоритме на основе технологий AI и Computer Vision.
Обнаружение объектов
Перед тем как что-то распознать, это что-то нужно найти на изображении или видео. Для этого используется нейросеть-детектор. Представьте себе сцену из фильма: кроме героев, на экране показаны предметы мебели, здания. Чтобы понять, что конкретно мы видим на изображении, нужен детектор, который разбивает общую картину на отдельные образы.
После того как все объекты найдены через графический распознаватель, этим предметам присваивается какой-то класс. Например, модель может различить одежду, мебель на видео — это разные классы объектов.

Дальше нейросети будут искать в своей базе похожие объекты в зависимости от класса. Определить, какой актёр перед нами или что за предмет мебели в кадре, — задачи для разных нейросетей. В рамках Layer используется также база партнерских товаров, по которой система ищет похожие на распознанные на видео, чтобы обогатить стоп-кадр торговым предложением.
При этом программ-детекторов может быть несколько, каждая берёт на себя какую-то конкретную задачу по поиску образов. В конечном счёте цель — получить как можно больше распознанных объектов с правильно определённым типом.
Отслеживание между кадрами
Здесь мы говорим только про видео, когда система должна находить объекты на меняющихся кадрах. Отслеживание нужно, чтобы не приходилось распознавать объект снова и снова: это экономит много ресурсов программы по распознаванию. Решение позволяет «помнить», что перед нами всё ещё тот же самый предмет.
Для отслеживания уже обнаруженного графического элемента используются специальные нейронные сети, которые присваивают объекту идентификатор и «следят» за ним между кадрами.
Распознавание объекта
После того как программа нашла объект и начала отслеживание, информация о нём передаётся в нейросеть-энкодер, которая распознаёт изображение и ищет в базе аналоги. Так, в рамках Layer возможно распознавание одежды того же цвета и фасона по товарам от партнеров.
Важно упомянуть, что сеть, которая находит похожие образы в базе, работает не с самими изображениями, а с их эмбеддингами. Эмбеддинг — это картинка, преобразованная в ряд чисел по определённому правилу. Сравнивая эти ряды чисел между собой, модель понимает степень похожести изображений — распознаваемого и из базы. Поэтому платье героини сначала превращается в числовой код, и только потом отдаётся в базу данных для поиска аналогичных платьев.
Возможности применения сервиса для бизнеса
Сбер развил идею определения графических объектов, чтобы её можно было использовать в медиапространстве. Так появился сервис Layer, которые позволяет обогащать контент дополнительными данными.
Основная идея в том, чтобы из любого видео — неважно, фильм это, сериал или клип — можно было «вытащить» предметы, которые участвуют в съёмках. Впечатляет? Это уже работает в некоторых видеосервисах. Но обо всех возможностях по порядку.
Layer для e-commerce
Технология Layer будет полезна в e-commerce — для построения рекомендаций к товарам на сайте на основе подбора визуально похожих предложений. С помощью AI система проанализирует каталог и подберёт для пользователя релевантные рекомендации.
Кроме рекомендаций, система может быть использована при модерации изображений — чтобы определить, относится ли заданное изображение к определённому классу.
Если вы продавец, то можете стать партнёром системы, чтобы предлагать свои товары в рамках поиска похожих предложений — это дополнительный способ монетизации. Дальше расскажем, какие товары можно предложить.
Layer для поиска вещи на видео
Первая возможность, которую даёт приложение для распознавания графических объектов, — это поиск вещей. Вот несколько идей, что именно можно находить:
- Одежда на актёрах. Если понравилась юбка или рубашка на актёре, можно нажать на паузу и посмотреть, что это за вещь и где её можно купить. Нейронная сеть найдёт максимально похожие образцы из магазинов партнёров.
- Мебель. Предметы интерьера тоже могут быть товаром, который захочет купить зритель. С помощью программы анализа изображений получится найти такой же диван (ну или очень похожий).
- Аксессуары и декор. Постер, картина, какой-то домашний декор тоже могут быть распознаны, чтобы найти похожее.
Важно понимать, что распознавание ограничивается базой исходных образцов. В частности, в приложение от Сбера включён перечень товаров от компаний-партнёров, на сайте которых можно купить понравившиеся вещи.
В связи с ограниченностью исходной базы, скорее всего, будут найдены не те же товары, но максимально похожие по цвету, форме и другим признакам. Кроме одежды и мебели, Layer от Сбера может распознавать и искать похожую еду. Как насчёт того, чтобы заказать блюдо, которое ест героиня любимого сериала?
В дальнейшем планируется расширять перечень категорий товаров, которые могут распознаваться. Для этого нужно обучать нейронную сеть на новых исходных изображениях, создавать новый класс объектов для определения приложением.
