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

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

Установите PixelLib и его зависимости:

Установите Tensorflow с помощью: (PixelLib поддерживает tenorflow 2.0 и выше)

  • pip3 установить тензорный поток

Установите PixelLib с

  • pip3 установить pixellib

Если установлено, обновите до последней версии, используя:

  • pip3 install pixellib - обновить

Извлечение объектов из изображений с использованием маски R-CNN COCO Model

import pixellib
from pixellib.instance import instance_segmentation
segment_image=instance_segmentation()
segment_image.load_model(“mask_rcnn_coco.h5”)

Строка1–4: Мы импортировали пакет PixelLib, создали экземпляр класса сегментации экземпляра и загрузили предварительно обученную модель Коко. Скачайте модель отсюда.

segment_image.segmentImage("image_path", extract_segmented_objects=True,                       save_extracted_objects=True, show_bboxes=True,  output_image_name="output.jpg")

Это последняя строка кода, где мы вызвали функцию segmentImage со следующими параметрами:

image_path: это путь к сегментированному изображению.

extract_segmented_objects: это параметр, который указывает функции извлекать сегментированные в изображении объекты, и для него установлено значение true.

save_extracted_objects: это необязательный параметр для сохранения извлеченных сегментированных объектов.

show_bboxes: T это параметр, который показывает сегментированные объекты с ограничивающими рамками. Если установлено значение false, отображаются только маски сегментации.

output_image_name: Это путь для сохранения выходного изображения.

Образец изображения

Полный код для извлечения объекта

Выходное изображение

Извлеченные объекты из изображения

Примечание. Все объекты изображения извлекаются и сохраняются отдельно как изображение. Я показал лишь несколько из них.

Сегментация конкретных классов в модели Коко

Мы используем предварительно обученную кокосовую модель Mask R-CNN для выполнения сегментации изображения. Модель coco поддерживает 80 классов объектов, но в некоторых приложениях мы можем не захотеть сегментировать все поддерживаемые ею объекты. Таким образом, PixelLib позволяет фильтровать неиспользуемые обнаружения и сегментировать определенные классы.

Измененный код для сегментации определенных классов

target_classes = segment_image.select_target_classes(person=True)

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

segment_image.segmentImage("sample.jpg", segment_target_classes=target_classes, extract_segmented_objects=True,save_extracted_objects=True, show_bboxes=True,  output_image_name="output.jpg")

В функции segmentImage мы ввели новый параметр segment_target_classes, для выполнения сегментации целевого класса, вызываемого из select_target_classes, функция .

Ух ты! мы смогли обнаружить только людей на этом изображении.

Что если нас интересует только обнаружение транспортных средств людей, изображенных на этой картинке?

target_classes = segment_image.select_target_classes(car=True, bicycle = True)

Мы изменили целевой класс с человек на автомобиль и велосипед.

Прекрасный результат! Мы обнаружили только велосипеды и автомобили, представленные на этой фотографии.

Примечание. Если вы отфильтруете обнаружение модели кокоса, будут извлечены объекты целевого класса, сегментированные в изображении.

Извлечение объектов из видео с использованием модели Коко

PixelLib поддерживает извлечение сегментированных объектов в видео и каналах камеры.

образец видео

segment_video.process_video("sample.mp4", show_bboxes=True,  extract_segmented_objects=True,save_extracted_objects=True, frames_per_second= 5,  output_video_name="output.mp4")

Это все тот же код, за исключением того, что мы изменили функцию с segmentImage на process_video. Принимает следующие параметры:

  • show_bboxes: T это параметр, который показывает сегментированные объекты с ограничивающими рамками. Если установлено значение false, отображаются только маски сегментации.
  • frames_per_second. Это параметр, который устанавливает количество кадров в секунду для сохраненного видеофайла. В этом случае он установлен на 5, то есть сохраненный видеофайл будет иметь 5 кадров в секунду.
  • extract_segmented_objects: это параметр, который указывает функции извлекать сегментированные в изображении объекты, и для него установлено значение true.
  • save_extracted_objects: это необязательный параметр для сохранения извлеченных сегментированных объектов.
  • output_video_name: Это имя сохраненного сегментированного видео .

Вывод видео

Извлеченные объекты из видео

Примечание. Все объекты в видео извлекаются и сохраняются по отдельности как изображение. Я показал лишь некоторые из них.

Сегментация определенных классов в видео

PixelLib позволяет фильтровать неиспользуемые обнаружения и сегментировать определенные классы в видео и каналах камеры.

target_classes = segment_video.select_target_classes(person=True)
segment_video.process_video("sample.mp4", show_bboxes=True, segment_target_classes= target_classes, extract_segmented_objects=True,save_extracted_objects=True, frames_per_second= 5,  output_video_name="output.mp4")

Целевой класс для обнаружения установлен на человек, и мы смогли сегментировать только людей в видео.

target_classes = segment_video.select_target_classes(car = True)
segment_video.process_video("sample.mp4", show_bboxes=True, segment_target_classes= target_classes, extract_segmented_objects=True,save_extracted_objects=True, frames_per_second= 5,  output_video_name="output.mp4")

Целевым классом для сегментации является автомобиль, и мы смогли сегментировать только автомобили на видео.

Полный код для сегментации определенных классов и извлечения объектов в видео

Полный код для сегментации определенных классов и извлечения объектов в каналах камеры

import cv2 capture = cv2.VideoCapture(0)

Мы импортировали cv2 и включили код для захвата кадров камеры.

segment_camera.process_camera(capture, show_bboxes=True, show_frames=True, extract_segmented_objects=True, save_extracted_objects=True,frame_name="frame", frames_per_second=5, output_video_name="output.mp4")

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

  • show_frames: это параметр, который обрабатывает отображение сегментированных кадров камеры.
  • frame_name: это имя, данное отображаемой рамке камеры.

Извлечение объектов из изображений с использованием пользовательских моделей, обученных с помощью PixelLib

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

import pixellib
from pixellib.instance import custom_segmentation 
segment_image = custom_segmentation()
segment_image.inferConfig(num_classes=2, class_names=['BG', 'butterfly', 'squirrel'])
segment_image.load_model("Nature_model_resnet101.h5")

Строка1–4: мы импортировали пакет PixelLib, создали экземпляр настраиваемого класса сегментации, который называется выводом функция конфигурации (i nferConfig) и загрузила пользовательскую модель. Скачайте кастомную модель здесь. Пользовательская модель поддерживает два класса, а именно:

  • Бабочка
  • Белка
segment_image.segmentImage("image_path", extract_segmented_objects=True,                       ave_extracted_objects=True, show_bboxes=True,  output_image_name="output.jpg")

Мы вызвали ту же функцию segmentImage, которая используется для обнаружения модели кокоса.

Полный код для извлечения объектов с помощью пользовательской модели

образец изображения

Вывод

Извлеченный объект из изображения

Извлечение объектов из видео с использованием пользовательской модели, обученной с помощью PixelLib

образец видео

Полный код для извлечения объектов из видео с использованием пользовательской модели.

Вывод

Извлеченные объекты

Полный код для извлечения объектов в каналах камеры с использованием пользовательской модели

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



Посетите официальный репозиторий PixelLib на github

Посетите официальную документацию PixelLib

Свяжитесь со мной через:

Электронная почта: [email protected]

Twitter: @AyoolaOlafenwa

Facebook: Айула Олафенва

Linkedin: Айула Олафенва

Ознакомьтесь с этими статьями о том, как использовать PixelLib для семантической сегментации, сегментации экземпляров и фонового редактирования изображений и видео.