Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

Du kan bruge ansigtssløring til at skjule en persons ansigt, i en video eller et billede, af flere årsager. Privatlivs- og sikkerhedsspørgsmål er de mest fremherskende. De fleste videodelingsplatforme og videoredigeringssoftware har indbygget funktion til sløring af ansigter.

Du kan oprette dit eget ansigtsslørende program fra bunden ved hjælp af Python og OpenCV- og NumPy-bibliotekerne.

Opsætning af dit miljø

For at følge denne artikel skal du være bekendt med det grundlæggende i Python og har en grundlæggende forståelse for ved hjælp af NumPy-biblioteket.

Åbn enhver Python IDE, du er fortrolig med. Opret et virtuelt miljø, hvor du vil installere de nødvendige biblioteker. Opret en ny Python-fil. Naviger til terminalen og kør følgende kommando for at installere de nødvendige biblioteker. Send bibliotekerne som en mellemrumssepareret liste.

instagram viewer
pip installer OpenCV-python NumPy

Du vil bruge OpenCV til at tage og forbehandle videoinput og NumPy til at arbejde med arrays.

Når du har installeret bibliotekerne, skal du vente på, at IDE'en opdaterer projektskeletterne. Når opdateringen er færdig, og miljøet er klar, er du fri til at begynde at kode.

Den fulde kildekode er tilgængelig i en GitHub-depot.

Import af de nødvendige biblioteker

Start med at importere OpenCV- og NumPy-biblioteker. Dette vil give dig mulighed for at ringe og bruge alle de funktioner, de understøtter. Importer OpenCV-python som cv2.

importere cv2
importere nusset som np

OpenCV-python-modulerne bruger navnet cv2 som en konvention, som OpenCV-fællesskabet etablerede. OpenCV-python er en Python-indpakning af OpenCV-biblioteket, som er skrevet i C++.

Tager dit input

Opret en variabel og initialiser VideoCapture objekt. Angiv nul som argument, hvis du vil bruge din computers primære kamera som inputkilde. For at bruge et eksternt kamera, der er tilsluttet din computer, skal du bestå et. For at udføre sløring af ansigter på en forudindspillet video skal du gå forbi videoens sti i stedet. Til bruge et fjernkamera, videregive kameraets URL, der indeholder dets IP-adresse og portnummer.

cap = cv2.VideoCapture(0)

For at udføre ansigtssløring på inputtet skal du bruge tre funktioner:

  • En funktion, der vil forbehandle inputtet.
  • En funktion, der vil sløre ansigtet i inputtet.
  • En hovedfunktion, der vil styre programmets flow og vise outputtet.

Forbehandling af videoinput

Opret en input-forbehandlingsfunktion, der tager hvert billede af input-videoen som input. Initialiser CascadeClassifier-klassen, som du vil bruge til ansigtsgenkendelse. Tilpas rammens størrelse til 640 x 640 pixels. Konverter den ændrede størrelse ramme til gråtoner for lettere behandling, og registrer endelig ansigterne i inputtet og bind dem med rektangler.

defimage_preprocess(ramme):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')

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

grey_image = cv2.cvtColor (resized_image,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
gråt_billede, 1.04, 5, minSize=(20, 20))

Vend tilbage resized_image, face_rects

Denne funktion returnerer en tuple, der indeholder det ændrede størrelsesbillede og en liste over rektangler, der repræsenterer de registrerede ansigter.

Sløring af ansigtet

Opret en sløringsfunktion, der slører ansigterne i dit input. Funktionen tager den ændrede størrelsesramme og listen over rektangler, der afgrænser de ansigter, der returneres af forbehandlingsfunktionen, som input. Løkker over hvert ansigtsrektangel. Beregner midten af ​​hvert rektangel og radius af sløringscirklen. Opretter et sort billede, der har de samme dimensioner som den ændrede ramme ved at initialisere alle pixels til nul. Tegner en hvid cirkel på det sorte billede, hvis centrum er ved ansigtsrektanglet ved hjælp af den beregnede radius. Til sidst slører det billedet på den hvide cirkel.

defansigtssløring(resized_frame, face_rects):
til (x, y, w, h) i face_rects:
# Angivelse af centrum og radius
# af sløringscirklen
center_x = x + w // 3
center_y = y + h // 3
radius = h // 1

# skabe et sort billede med lignende
# dimensioner som rammen
maske = np.zeros((resized_frame.shape[:3]), np.uint8)

# tegn en hvid cirkel i ansigtsområdet på rammen
cv2.circle (maske, (center_x, center_y), radius,
(255, 255, 255), -1)

# sløring af hele rammen
blurred_image = cv2.medianBlur (resized_frame, 99)

# rekonstruere rammen:
# - pixels fra den slørede ramme, hvis maske > 0
# - ellers skal du tage pixels fra den originale ramme
resized_frame = np.where (maske > 0, sløret_billede,
resized_frame)

Vend tilbage resized_frame

Funktionen bruger NumPy hvor() funktion til at rekonstruere rammen under sløring.

Styring af flowet i dit program

Opret en hovedfunktion, der vil fungere som indgangspunktet for dit program. Det vil derefter styre programmets flow. Funktionen starter en uendelig sløjfe for kontinuerligt at fange billederne af videoindgangen. Kald kasketobjektets læsemetode for at læse en ramme fra kameraet.

Funktionen sender derefter rammen til forbehandlingsfunktionen og sender returværdierne til en anden funktion, face_blur, for at opnå et sløret billede. Den ændrer derefter størrelsen på den ramme, der returneres af sløringsfunktionen, og viser outputtet.

defvigtigste():
mensRigtigt:
succes, frame = cap.read()
resized_input, face_rects = image_preprocess (ramme)
blurred_image = face_blur (resized_input, face_rects)

# Viser det slørede billede
cv2.imshow("Sløret billede", cv2.resize (blurred_image, (500, 500)))

hvis cv2.waitKey(1) == ord("q"):
pause

Funktionen afslutter også outputvisningen, når brugeren trykker på q-tasten.

Kørsel af programmet

Sørg for, at hovedfunktionen kører først, når du kører scriptet. Denne betingelse vil være falsk, hvis du importerer scriptet som et modul i et andet program.

hvis __navn__ == "__main__":
hoved()

Dette giver dig mulighed for at bruge scriptet som et modul eller køre det som et selvstændigt program. Når programmet kører, bør du se output svarende til dette:

Ansigtet er sløret og uigenkendeligt.

Anvendelser af ansigtssløring i den virkelige verden

Du kan anvende ansigtssløring i mange typer applikationer for at beskytte folks privatliv. Street view og korttjenester bruger sløring til at sløre ansigter på personer på de billeder, de tager. Retshåndhævende myndigheder bruger ansigtssløring for at beskytte vidners identitet.

Mange videodelingsplatforme har også integreret en funktion til sløring af ansigter til deres brugere. Sammenligning af brugen af ​​ansigtssløring i disse områder vil hjælpe dig med at observere, hvordan andre platforme integrerer teknologien.