Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

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

Вы можете создать свою собственную программу размытия лица с нуля, используя Python и библиотеки OpenCV и NumPy.

Настройка вашей среды

Чтобы следовать этой статье, вам необходимо ознакомиться с основы Python и иметь базовое представление о с помощью библиотеки NumPy.

Откройте любую удобную IDE Python. Создайте виртуальную среду, в которой вы будете устанавливать необходимые библиотеки. Создайте новый файл Python. Перейдите к терминалу и выполните следующую команду, чтобы установить необходимые библиотеки. Передайте библиотеки в виде списка, разделенного пробелами.

instagram viewer
pip установить OpenCV-python NumPy

Вы будете использовать OpenCV для получения и предварительной обработки видеовхода и NumPy для работы с массивами.

После установки библиотек подождите, пока IDE обновит скелеты проекта. Когда обновление завершено и среда готова, вы можете приступать к программированию.

Полный исходный код доступен в Репозиторий GitHub.

Импорт необходимых библиотек

Начните с импорта библиотек OpenCV и NumPy. Это позволит вам вызывать и использовать любые функции, которые они поддерживают. Импортируйте OpenCV-python как cv2.

Импортировать cv2
Импортировать пустышка как нп

Модули OpenCV-python используют имя cv2 как соглашение, установленное сообществом OpenCV. OpenCV-python — это Python-оболочка библиотеки OpenCV, написанная на C++.

Ваш вклад

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

крышка = cv2.VideoCapture(0)

Для выполнения размытия лица на входе вам понадобятся три функции:

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

Предварительная обработка видеовхода

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

дефimage_preprocess(рамка):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')

resized_image = cv2.resize (кадр, (640, 640))

gray_image = cv2.cvtColor (измененное_изображение,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
серый_изображение, 1.04, 5, минРазмер=(20, 20))

возвращаться resized_image, face_rects

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

Размытие лица

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

дефface_blur(resized_frame, face_rects):
для (х, у, ш, ч) в face_rects:
# Указание центра и радиуса
# размытого круга
center_x = х + ш // 3
center_y = у + ч // 3
радиус = ч // 1

# создание черного изображения, похожего на
# размеры как у рамки
маска = np.zeros((resized_frame.shape[:3]), np.uint8)

# рисуем белый круг в лицевой части кадра
cv2.circle (маска, (center_x, center_y), радиус,
(255, 255, 255), -1)

# размытие всего кадра
blurred_image = cv2.medianBlur (измененный_кадр, 99)

# восстановление кадра:
# - пиксели из размытого кадра, если маска > 0
# - иначе брать пиксели из исходного кадра
resized_frame = np.where (маска > 0, размытое_изображение,
измененный_кадр)

возвращаться resized_frame

Функция использует NumPy где() Функция восстановления кадра во время размытия.

Управление потоком вашей программы

Создайте основную функцию, которая будет точкой входа в вашу программу. Затем он будет контролировать поток программы. Функция запустит бесконечный цикл для непрерывного захвата кадров видеовхода. Вызовите метод read объекта кепки, чтобы прочитать кадр с камеры.

Затем функция передает кадр функции предварительной обработки, а возвращаемые значения — другой функции, face_blur, для получения размытого изображения. Затем он изменяет размер кадра, возвращаемого функцией размытия, и отображает результат.

дефосновной():
покаИстинный:
успех, фрейм = cap.read()
resized_input, face_rects = image_preprocess (кадр)
blurred_image = face_blur (resized_input, face_rects)

# Отображение размытого изображения
cv2.imshow («Размытое изображение», cv2.resize (размытое_изображение, (500, 500)))

если cv2.waitKey(1) == порядок("к"):
перерыв

Функция также завершает отображение вывода, когда пользователь нажимает клавишу q.

Запуск программы

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

если __имя__ == "__основной__":
основной()

Это позволяет использовать скрипт как модуль или запускать его как отдельную программу. Когда программа запустится, вы должны увидеть вывод, похожий на этот:

Лицо размыто и неузнаваемо.

Реальные приложения размытия лица

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

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