Наложение солнцезащитных очков и усов на статическое или динамическое изображение, как в веб-камере

Доступ к полному закодированному решению здесь

Цель проекта ::: Создание Snapchat как фильтров путем смешивания изображений

Данные поезда: -

Эта папка состоит из четырех файлов изображений
a. Изображение солнцезащитных очков
b. Изображение усов
c. Символ перед изображением
d. Символ после изображения

Данные испытаний: -

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

Файлы классификатора каскада Хаара: -

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

Подход к решению: -

Мы будем использовать Python OpenCV для чтения и смешивания изображений. Мы также будем использовать каскадные классификаторы Хаара для извлечения глаз и носа персонажа.

1.Импорт всех библиотек

Для этого проекта нам понадобятся open-cv, numpy и matplotlib.

2. Импорт каскадных классификаторов Хаара

Что такое Хаарский каскад? Это алгоритм обнаружения объектов, используемый для распознавания лиц на изображении или видео в реальном времени. Алгоритм использует функции обнаружения краев или линий, предложенные Виолой и Джонсом в их исследовательской статье Быстрое обнаружение объектов с использованием усиленного каскада простых функций, опубликованной в 2001 году. Модель, созданная на основе этого обучения, доступна в репозитории OpenCV GitHub https://github.com/opencv/opencv/tree/master/data/haarcascades.

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

Чтобы узнать больше о каскадных классификаторах Хаара: -
i. Быстрое обнаружение объектов с использованием усиленного каскада простых функций
ii. Каскадный классификатор

Мы будем использовать XML-файлы обнаружения глаз и обнаружения носа из вышеуказанного репозитория.

3.Чтение изображения

Использование функции OpenCV imread() для чтения изображения из локального каталога.

4.Извлечение глаз

Использование метода каскадного классификатора detectMultiScale() для обнаружения глаз и последующего рисования прямоугольника с помощью функции OpenCV rectangle() вокруг глаз и отображение изображения с помощью matplotlib.

5.Извлечение носа

Использование метода каскадного классификатора detectMultiScale() для обнаружения носа, а затем рисование прямоугольника с помощью функции OpenCV rectangle() вокруг носа и отображение изображения с помощью matplotlib.

6. Чтение и изменение размера изображений солнцезащитных очков и усов

Использование функции OpenCV imread() для чтения изображений очков и усов из локального каталога. Затем измените размеры изображений стекла и усов в соответствии с размером прямоугольника глаз и носа соответственно.

7.Наложение стекла и усов на изображение персонажа
В этом методе функции blend_transparent() мы выполняем несколько шагов: -< br /> я. Отделение маски прозрачности от информации о цвете → Изображение стекла и усов — это изображение PNG, поэтому оно имеет еще один прозрачный слой в дополнение к трем слоям RGB. Отсюда разделение RGB и прозрачного слоя, чтобы смешаться с изображением персонажа, которое является RGB.

ii. Вычисление обратной маски →Извлечение обратной маски путем вычитания наложения из 255 и вызова ее фоновой маской.

III. Преобразование масок в три канала, чтобы мы могли использовать их в качестве весов → Использование метода OpenCV cvtColor() для преобразования их в каналы BGR.

iv. Создайте замаскированное изображение лица и замаскированное наложение → Мы конвертируем изображения в формат с плавающей запятой в диапазоне 0,0–1,0.

в. И, наконец, просто сложите их вместе и масштабируйте обратно до 8-битного целочисленного изображения →Мы делаем это с помощью функции addWeighted() в OpenCV.

Теперь, используя эту функцию blend_transparent(), мы смешиваем изображение стекла и усов с исходным изображением.

Создание фильтров Snapchat в веб-камере

Мы используем ту же функцию blend_transparent(), что и выше, для создания фильтров реального времени в веб-камере. Использование метода OpenCV VideoCapture() для открытия веб-камеры. Пока веб-камера включена, мы извлекаем глаза и нос с помощью метода detectMultiScale(), как указано выше. Кроме того, мы смешиваем изображение стекла и усов с прямоугольником глаз и носа, как это было сделано выше для статических изображений. А затем, используя метод imshow() OpenCV, мы показываем отфильтрованный кадр. Веб-камера не отключается сама по себе, мы добавили функцию выхода из веб-камеры при нажатии ключевого слова 'q'.
Запустите Файл filter_webcam.py с локальной подсказкой Python. Он должен открыть веб-камеру на вашем ПК, и все готово. Дайте мне знать, если у вас возникнут трудности в комментариях.