Добавить в корзинуПозвонить
Найти в Дзене
Машинное обучение

👀 Создание фильтра, использующего компьтерное зрение

Пока я использовал разные фильтры Instagram у меня появилась мысль о создании собственного небольшого игрового фильтра, имитации очистки экранна. для применения имеющихся у меня знаний о компьютерном зрении. В этой статье я хотел бы поделиться тем, как я создал свой собственный фильтр, чему я научился при его создании, а также я хотел бы поделиться своими открытиям. Фильтр эмулирует очистку грязи на стекле экрана. Для этого я использовал MediaPipe, кросс-платформу с открытым исходным кодом для обработки данных различных модальностей, таких как аудио и видео. Отслеживание руки MediaPipe Мой подход обеспечивает отслеживание рук и пальцев для определения 21 ключевой точки в 3 измерениях. Метод MediaPipe обеспечивает высокоточное отслеживание рук и пальцев в режиме реального времени. В этом решении используется конвейер машинного обучения, состоящий из следующих моделей, работающих параллельно : 175 / 5 000 Теперь, когда у нас есть общее представление о модели, давайте разберем

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

Фильтр эмулирует очистку грязи на стекле экрана. Для этого я использовал MediaPipe, кросс-платформу с открытым исходным кодом для обработки данных различных модальностей, таких как аудио и видео.

Отслеживание руки MediaPipe

Мой подход обеспечивает отслеживание рук и пальцев для определения 21 ключевой точки в 3 измерениях. Метод MediaPipe обеспечивает высокоточное отслеживание рук и пальцев в режиме реального времени. В этом решении используется конвейер машинного обучения, состоящий из следующих моделей, работающих параллельно :

  • Модель детектора ладоней: входными данными для этой модели является полное изображение, которое возвращает рамку руки. Для этой реализации используется модель детектора под названием BlazePalm. Модель способна обнаруживать руки разного размера, которые также могут быть частично закрыты. Из-за высокой гибкости руки, в отличие от лица, имеющего контуры глаз, рта и т. д., эта задача становится очень сложной. Средняя точность этой модели при обнаружении ладони составляет 95,7%.
  • Модель ориентира руки: эта модель работает с обрезанным выходным сигналом, который мы получаем от модели детектора ладони. Затем алгоритм возвращает высокоточные трехмерные точки рук. Для обучения этой модели было вручную аннотировано около 30 000 изображений с 21 координатой.
-2

175 / 5 000

  • . Распознаватель жестов: классифицирует ранее вычисленную конфигурацию ключевых точек в дискретный набор жестов.
-3

Теперь, когда у нас есть общее представление о модели, давайте разберемся с реализацией этого фильтра.

Реализация

Для этой реализации я использовал пакеты MediaPipe и OpenCV. Пожалуйста, установите эти пакеты, используя следующие команды.

$ pip install mediapipe==0.8.9.1
$ pip install opencv-python==4.5.5.64

В коде мы сначала импортируем эти пакеты, используя:

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

Функция handsFinder будет отслеживать руки во входных кадрах. Если для draw установлено значение True, ориентиры рук также будут нанесены на изображение. Функция positionFinder находит координаты x и y всех 21 точек руки, которые я буду использовать в этом проекте.

Теперь давайте создадим основную функцию, которая использует OpenCV для захвата видео, после чего у нас есть маска, содержащая грязь поверх нашего исходного изображения кадра. Прочитав кадр за кадром видео с камеры, мы находим руки с помощью функции handTracker и получаем координаты положения ориентиров рук. Как только мы получим положение ориентиров, выберем 2 диагональные ключевые точки на руке так, чтобы они образовывали прямоугольник, аналогичный ткани в нашей руке, которая очищает грязь с маски изображения. Здесь мы устанавливаем значения в этом прямоугольнике как (255, 255, 255), чтобы имитировать поведение очистки экрана. Теперь я использовал взвешенное изображение OpenCV (cv2.addWeighted) для создания выходного замаскированного изображения (т. е. взвешивания маски на изображении с альфа = 0,5) для каждого входного кадра.

Теперь просто вызовите функцию main.

if __name__ == "__main__":
main()

Пока я реализовывал этот проект, я пытался использовать круги (вместо прямоугольников) неэффективным образом без масок изображений, что снижало производительность. Я также пытался использовать линии, которые приводили к артефактам. Поэтому я попытался использовать маски вместе с прямоугольником OpenCV.

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

Machinelearning

#machinelearning #artificialintelligence #ai #datascience #python #programming #technology #deeplearning