Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Puteți utiliza estomparea feței pentru a ascunde fața unei persoane, într-un videoclip sau într-o imagine, din mai multe motive. Problemele de confidențialitate și securitate sunt cele mai predominante. Cele mai multe platforme de partajare video și software de editare video au funcționalitate de estompare a feței încorporată.

Vă puteți crea propriul program de estompare a feței de la zero folosind Python și bibliotecile OpenCV și NumPy.

Configurarea mediului

Pentru a continua acest articol, trebuie să fii familiarizat cu elementele de bază ale Python și au o înțelegere de bază a folosind biblioteca NumPy.

Deschideți orice IDE Python cu care vă simțiți confortabil. Creați un mediu virtual în care veți instala bibliotecile necesare. Creați un nou fișier Python. Navigați la terminal și rulați următoarea comandă pentru a instala bibliotecile necesare. Treceți bibliotecile ca o listă delimitată de spațiu.

instagram viewer
pip install OpenCV-python NumPy

Veți folosi OpenCV pentru a prelua și preprocesa intrarea video și NumPy pentru a lucra cu matrice.

Odată ce ați instalat bibliotecile, așteptați ca IDE-ul să actualizeze scheletele proiectului. Când actualizarea este completă și mediul este pregătit, sunteți liber să începeți codarea.

Codul sursă complet este disponibil în a Depozitul GitHub.

Importarea bibliotecilor necesare

Începeți prin a importa bibliotecile OpenCV și NumPy. Acest lucru vă va permite să apelați și să utilizați toate funcțiile pe care le acceptă. Importați OpenCV-python ca cv2.

import cv2
import numpy la fel de np

Modulele OpenCV-python utilizează numele cv2 ca o convenție pe care comunitatea OpenCV a stabilit-o. OpenCV-python este un wrapper Python al bibliotecii OpenCV care este scris în C++.

Luați-vă contribuția

Creați o variabilă și inițializați Captură video obiect. Dați zero ca argument dacă doriți să utilizați camera principală a computerului ca sursă de intrare. Pentru a utiliza o cameră externă atașată la computer, treceți una. Pentru a efectua estomparea feței pe un videoclip preînregistrat, treceți în schimb calea videoclipului. La utilizați o cameră la distanță, transmiteți adresa URL a camerei care conține adresa IP și numărul portului acesteia.

capac = cv2.VideoCapture(0)

Pentru a efectua estomparea feței pe intrare, veți avea nevoie de trei funcții:

  • O funcție care va preprocesa intrarea.
  • O funcție care va estompa fața în intrare.
  • O funcție principală care va controla fluxul programului și va afișa rezultatul.

Preprocesarea intrării video

Creați o funcție de preprocesare a intrării care va lua ca intrare fiecare cadru al videoclipului de intrare. Inițializați clasa CascadeClassifier pe care o veți folosi pentru detectarea feței. Redimensionați cadrul la 640 x 640 pixeli. Convertiți cadrul redimensionat în tonuri de gri pentru o procesare mai ușoară și, în sfârșit, detectați fețele din intrare și legați-le cu dreptunghiuri.

defimagine_preproces(cadru):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ „haarcascade_frontalface_default.xml”)

resized_image = cv2.resize (cadru, (640, 640))

grey_image = cv2.cvtColor (imagine_redimensionată,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
imagine_gri, 1.04, 5, minSize=(20, 20))

întoarcere imagine_redimensionată, face_rects

Această funcție returnează un tuplu care conține imaginea redimensionată și o listă de dreptunghiuri care reprezintă fețele detectate.

Încețoșarea feței

Creați o funcție de estompare care va estompa fețele din intrarea dvs. Funcția ia ca intrare cadrul redimensionat și lista dreptunghiurilor care mărginesc fețele returnate de funcția de preprocesare. Bucle peste fiecare dreptunghi de față. Calculează centrul fiecărui dreptunghi și raza cercului de estompare. Creează o imagine neagră având aceleași dimensiuni ca cadrul redimensionat prin inițializarea tuturor pixelilor la zero. Desenează un cerc alb pe imaginea neagră al cărui centru se află la dreptunghiul feței folosind raza calculată. În cele din urmă, estompează imaginea pe cercul alb.

defface_blur(cadru_redimensionat, face_rects):
pentru (x, y, w, h) în face_rects:
# Specificarea centrului și razei
# din cercul estompat
center_x = x + w // 3
center_y = y + h // 3
raza = h // 1

# crearea unei imagini negre care să aibă similar
# dimensiuni ca cadru
mask = np.zeros((resized_frame.shape[:3]), np.uint8)

# desenați un cerc alb în zona feței cadrului
cv2.cercle (mască, (center_x, center_y), rază,
(255, 255, 255), -1)

# estomparea întregului cadru
blurred_image = cv2.medianBlur (cadru_redimensionat, 99)

# reconstruirea cadrului:
# - pixelii din cadrul neclar dacă masca > 0
# - în caz contrar, luați pixelii din cadrul original
resized_frame = np.where (mască > 0, imagine_neclară,
cadru_redimensionat)

întoarcere cadru_redimensionat

Funcția folosește NumPy Unde() funcția de a reconstrui cadrul în timpul estomparii.

Controlul fluxului programului dvs

Creați o funcție principală care va acționa ca punct de intrare al programului dvs. Apoi va controla fluxul programului. Funcția va începe o buclă infinită pentru a capta în mod continuu cadrele intrării video. Apelați metoda de citire a obiectului capac pentru a citi un cadru de pe cameră.

Funcția va trece apoi cadrul funcției de preprocesare și va transmite valorile returnate către o altă funcție, face_blur, pentru a obține o imagine neclară. Apoi redimensionează cadrul returnat de funcția de estompare și afișează rezultatul.

defprincipal():
in timp ceAdevărat:
succes, frame = cap.read()
resized_input, face_rects = imagine_preprocess (cadru)
blurred_image = face_blur (redimensionare_input, face_rects)

# Afișarea imaginii neclare
cv2.imshow(„Imagine încețoșată”, cv2.resize (imagine_încețoșată, (500, 500)))

dacă cv2.waitKey(1) == ord("q"):
pauză

Funcția oprește, de asemenea, afișarea ieșirii atunci când utilizatorul apasă tasta q.

Rularea Programului

Asigurați-vă că funcția principală rulează mai întâi când rulați scriptul. Această condiție va fi falsă dacă importați scriptul ca modul într-un alt program.

dacă __nume__ == "__principal__":
principal()

Acest lucru vă permite să utilizați scriptul ca modul sau să îl rulați ca program independent. Când programul rulează, ar trebui să vedeți rezultate similare cu aceasta:

Fața este neclară și de nerecunoscut.

Aplicații din lumea reală ale estompării feței

Puteți aplica estomparea feței în multe tipuri de aplicații pentru a proteja confidențialitatea oamenilor. Serviciile Street View și de cartografiere folosesc estomparea pentru a estompa fețele oamenilor din imaginile pe care le captează. Oamenii de aplicare a legii folosesc estomparea feței pentru a proteja identitatea martorilor.

Multe platforme de partajare video au integrat și o funcție de estompare a feței pentru utilizatorii lor. Compararea utilizării încețoșării feței în aceste zone vă va ajuta să observați modul în care alte platforme integrează tehnologia.