Наложение солнцезащитных очков и усов на статическое или динамическое изображение, как в веб-камере
Цель проекта ::: Создание 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. Он должен открыть веб-камеру на вашем ПК, и все готово. Дайте мне знать, если у вас возникнут трудности в комментариях.