Как создать простую систему распознавания объектов с помощью Python и ImageAI |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-12-08 04:10 Создание практичной системы распознавания изображений и видеообъектов с помощью всего нескольких строк кода с использованием Python и ImageAI Мы все можем согласиться с тем, что распознавания объектов - одна из самых популярных тем в компьютерном зрении. Проблема в том, что создание системы распознавания объектов с нуля требует глубоких технических знаний в области глубокого обучения и огромного количества ресурсов на вашем оборудовании.
Если вы посмотрите на распространенные модели распознавания объектов, такие как ResNet, YOLO, NASNet или RCNN, все они имеют глубокий стек слоев. Это требует технических знаний, а также огромного количества времени, чтобы заставить их работать. Все эти факторы могут стать проблемой для людей, которые просто хотят реализовать алгоритмы обнаружения объектов для решения своих проблем.
К счастью, в настоящее время мы можем легко реализовать алгоритмы распознавания объектов, даже используя всего несколько строк кода. С помощью библиотеки ImageAI мы можем быстро и легко создать нашу систему обнаружения изображений или видеообъектов. Я покажу вам, как это сделать, в этой статье.
Ниже приведены шаги того, что мы собираемся сделать в этой статье:
- Введение
- Создание детектора объекта изображения
- Создание детектора видеообъекта
Итак, приступим прямо сейчас.
Введение
Как упоминалось ранее, мы собираемся создать изображение и систему обнаружения видеообъектов с помощью ImageAI. ImageAI - это библиотека Python, которая позволяет специалистам по машинному обучению создавать систему обнаружения объектов с помощью всего нескольких строк кода.
Прежде чем мы начнем, нам нужно установить некоторые зависимости, которые нам понадобятся для правильного запуска ImageAI. Эти зависимости:
После установки всех этих библиотек мы можем начать установку библиотеки ImageAI, введя следующую команду в командной строке:
Далее мы готовы построить нашу систему обнаружения объектов для изображения и для видео.
Создание системы распознавания объектов
Чтобы начать создание системы распознавания объектов , сначала давайте импортируем библиотеки, которые мы собираемся использовать, а также установим наш текущий рабочий каталог.
Поскольку мы хотим реализовать распознавания объектов простым и быстрым способом, мы будем использовать предварительно обученную модель, специфичную для обнаружения объектов, которая была обучена на наборе данных COCO. С ImageAI можно выбрать три разные предварительно обученные модели: RetinaNet, YOLOv3 и tinyYOLOv3. Вы можете скачать понравившуюся модель здесь. После того, как вы скачали модель, поместите файл h5 в тот же каталог, что и ваш скрипт Python. Теперь ваш рабочий каталог должен иметь следующую структуру.
Вернемся к нашему скрипту Python, теперь мы можем создать экземпляр класса ObjectDetection, который мы импортировали ранее. В зависимости от модели, которую вы скачали ранее, нам нужно вызвать соответствующий метод из класса ObjectDetection. Ниже приведена реализация кода для этого.
Затем мы можем начать загрузку модели, указав сначала путь к нашей модели. Поскольку наша модель находится в том же каталоге, что и наш скрипт Python, здесь я покажу вам, как загрузить модель RetinaNet. Если вы используете YOLOv3 или tinyYOLOv3, вам необходимо соответственно изменить имя файла h5.
Наконец, мы можем приступить к созданию системы обнаружения объектов изображения. Для этого нам нужно указать две вещи: во-первых, каталог и имя файла нашего входного изображения, а во-вторых, каталог и имя файла выходного изображения. В следующей реализации кода входным изображением будет изображение с именем «traffic.jpg», которое находится в том же каталоге, что и сценарий Python. Между тем, результат обнаружения будет сохранен в файле с именем «traffic_detected.jpg» в том же каталоге.
И это код, который нам нужен для создания экземпляра нашей системы обнаружения объектов изображения. Ниже приведена полная реализация кода шагов, которые мы рассмотрели выше:
from imageai.Detection import ObjectDetection
Если вы запустите полный код, приведенный выше, вы получите более или менее похожий результат на выбранном вами изображении.
Настройка детектора объектов изображения
Если вы используете значение по умолчанию, которое мы видели в приведенной выше реализации, вы можете подумать, что каким-то образом результат обнаружения объекта неправильный, с несколькими ограничивающими прямоугольниками, перекрывающими друг друга. Чтобы уменьшить беспорядок в результате распознавания, вы можете настроить детектор объектов так, чтобы он отображал только тот объект, который действительно важен для вас.
Давайте возьмем изображение выше в качестве примера. Допустим, я хочу, чтобы детектор объектов предсказывал только людей и велосипеды. Для этого нам нужно создать экземпляр метода CustomObjects. Затем мы передаем имя объектов, которые мы хотим, чтобы система обнаружила в качестве аргумента.
Затем мы можем приступить к созданию системы обнаружения объектов с помощью метода detectCustomObjectsFromImage. Мы передаем нашу настраиваемую переменную, путь и имя нашего входного изображения, а также путь и имя нашего выходного изображения.
Более того, мы также можем дополнительно удалить беспорядок, игнорируя прогнозы, у которых значения вероятности ниже определенного порогового значения. Допустим, вы хотите игнорировать прогнозы со значением вероятности ниже 70%. Это можно сделать, добавив аргумент minimum_percentage_probability в метод detectCustomObjectsFromImage.
Ниже приведена полная реализация кода, когда мы хотим обнаруживать только людей и велосипед по нашему изображению, и мы также хотим показать обнаружение только там, где значение вероятности превышает 70%.
from imageai.Detection import ObjectDetection
Если вы запустите приведенный выше код, вы получите примерно такой результат:
Вот и все! Теперь, используя всего несколько строк кода, вы можете реализовать систему обнаружения объектов для своего собственного изображения. Однако что, если вы хотите обнаруживать объекты на видео или даже с веб-камеры вместо изображения? Давайте узнаем, как создать подобное обнаружение объектов для видео с помощью ImageAI, в следующем разделе.
Создание системы обнаружения видеообъектов
Вы не поверите, но код для создания системы обнаружения видеообъектов с ImageAI очень похож на систему обнаружения объектов изображения, которую мы создали ранее. Все, что нам нужно сделать, это изменить 3 строки кода. Первый - это библиотека, которую мы должны импортировать. Поэтому вместо ObjectDetection нам нужно импортировать VideoObjectDetection.
Второе изменение, которое мы должны применить, - это шаг, на котором мы создаем экземпляр класса обнаружения объекта. Вместо использования ObjectDetection () мы должны использовать VideoObjectDetection ().
Далее, третье или последнее изменение, которое мы должны применить, - это когда мы создаем систему обнаружения объектов. В нашем предыдущем коде мы использовали метод detectObjectsFromImage. Если мы хотим обнаруживать объекты на видео, нам нужно вместо этого использовать detectObjectsFromVideo.
Как видите, аргумент, который нам нужно передать этому методу, остался прежним. Во-первых, нам нужно указать путь к нашему каталогу с видео и имя файла нашего видео. Во-вторых, нам также необходимо указать путь и имя файла для выходного видео.
Ниже представлена полная реализация кода для создания системы обнаружения видеообъектов.
from imageai.Detection import VideoObjectDetection
Теперь, если вы запустите приведенную выше реализацию кода, вы получите более или менее аналогичный результат, как показано ниже.
Примечание.
Если вы каким-то образом не получаете тот же цветовой формат в выходном видео, т.е. вы получаете выходное видео в формате BGR вместо формата RGB, вы можете использовать приведенный ниже код для преобразования выходного видео обратно в формат RGB.
Все, что вам нужно сделать, это указать путь и имя файла видео, которое вы хотите преобразовать, а также преобразованного видео.
import cv2
Настройка обнаружения видеообъектов
Так же, как наша система обнаружения объектов изображения, мы также можем немного настроить нашу систему обнаружения видеообъектов. У нас есть возможность выбрать, какие объекты мы хотим обнаружить, и выбрать порог для значения вероятности, которое должно отображаться. Допустим, мы хотим обнаруживать только людей и велосипед для нашей системы обнаружения видеообъектов. Кроме того, мы хотим отображать только те обнаружения, которые имеют значение вероятности выше 70%. Мы можем сделать это, сначала создав экземпляр переменной для хранения объектов, которые мы хотим наблюдать.
Затем мы можем создать нашу систему обнаружения видеообъектов с нашими пользовательскими объектами. Для этого мы вызываем метод detectCustomObjectsFromVideo. В качестве аргументов этого метода мы передаем нашу настраиваемую переменную, путь и имя файла для нашего входного и выходного видео, кадров в секунду, а также минимальный порог для значения вероятности.
Ниже приведена полная реализация кода, если вы хотите обнаруживать только людей и велосипед со значением вероятности выше 70%.
from imageai.Detection import VideoObjectDetection
Создание обнаружения видеообъектов с веб-камеры
А что, если вы хотите создать систему обнаружения объектов, используя в качестве входных данных изображения с камеры? Создать эту систему с ImageAI также очень просто. Сам код очень похож на нашу систему обнаружения видеообъектов. Вам нужно всего лишь добавить одну строку кода, а также изменить одну строку кода для этого. Во-первых, нам нужно создать переменную для создания экземпляра библиотеки OpenCV для захвата кадра непосредственно с нашей веб-камеры.
Наконец, нам нужно изменить аргумент в методе detectObjectsFromVideo. Вместо указания пути к входному файлу нам нужно указать вход камеры, который является переменной камеры, которую мы создали выше.
Ниже приведена полная реализация кода для создания системы распознавания объектов прямо с веб-камеры.
from imageai.Detection import VideoObjectDetection Опять же, если вы каким-то образом получаете другой формат цвета в выходном видео, вы можете использовать вышеупомянутый код для преобразования вывода из формата BGR в формат RGB.
Заключительные замечания
Теперь вы уже знаете, как создать быструю и простую систему распознавания объектов с помощью ImageAI. Как вы видели, библиотека ImageAI позволяет нам создавать систему распознавания объектов, не сталкиваясь со сложностью модели распознавания объектов, такой как ResNet или YOLO.
Обратите внимание, что с предварительно обученной моделью, поддерживаемой ImageAI, детектор объектов может обнаруживать 80 различных объектов. Эти объекты:
Теперь вопрос в том, что если вы хотите создать собственную систему распознавания объектов со своей собственной меткой, которая не включена в список выше?
Вы также можете создать собственное обнаружение настраиваемых объектов с помощью ImageAI.
Я покажу вам, как это сделать, в другом посте. На этом пока все, и я надеюсь, что эта статья будет вам чем-то полезна.
Комментарии: |
|