Компьютерное зрение - это среда, с помощью которой компьютеры видят и идентифицируют объекты. Цель компьютерного зрения - дать возможность компьютерам анализировать объекты на изображениях и видео, чтобы решать различные проблемы со зрением. Сегментация объектов проложила путь для удобного анализа объектов в изображениях и видео, внося огромный вклад в различные области, такие как медицина, зрение в беспилотных автомобилях и редактирование фона в изображениях и видео.
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.
Свяжитесь со мной через:
Электронная почта: [email protected]
Twitter: @AyoolaOlafenwa
Facebook: Айула Олафенва
Linkedin: Айула Олафенва
Ознакомьтесь с этими статьями о том, как использовать PixelLib для семантической сегментации, сегментации экземпляров и фонового редактирования изображений и видео.