Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Du kan bruke ansiktsuskarphet for å skjule en persons ansikt, i en video eller et bilde, av flere grunner. Personvern- og sikkerhetsspørsmål er de mest dominerende. De fleste videodelingsplattformer og videoredigeringsprogramvare har innebygd funksjon for ansiktsuskarphet.

Du kan lage ditt eget ansiktsuskarphetsprogram fra bunnen av ved å bruke Python og OpenCV- og NumPy-bibliotekene.

Sette opp miljøet ditt

For å følge denne artikkelen må du være kjent med grunnleggende om Python og har en grunnleggende forståelse av ved å bruke NumPy-biblioteket.

Åpne hvilken som helst Python IDE du er komfortabel med. Lag et virtuelt miljø der du vil installere de nødvendige bibliotekene. Opprett en ny Python-fil. Naviger til terminalen og kjør følgende kommando for å installere de nødvendige bibliotekene. Send bibliotekene som en mellomromsdelt liste.

pip installer OpenCV-python NumPy

Du vil bruke OpenCV til å ta og forhåndsbehandle videoinngangen og NumPy til å jobbe med arrays.

Når du har installert bibliotekene, vent til IDE-en oppdaterer prosjektskjelettene. Når oppdateringen er fullført og miljøet er klart, kan du begynne å kode.

Den fullstendige kildekoden er tilgjengelig i en GitHub-depot.

Importere de nødvendige bibliotekene

Start med å importere OpenCV- og NumPy-biblioteker. Dette vil gjøre deg i stand til å ringe og bruke alle funksjonene de støtter. Importer OpenCV-python som cv2.

import cv2
import nusset som np

OpenCV-python-modulene bruker navnet cv2 som en konvensjon som OpenCV-fellesskapet etablerte. OpenCV-python er en Python-innpakning av OpenCV-biblioteket som er skrevet i C++.

Tar innspillet ditt

Lag en variabel og initialiser Videoopptak gjenstand. Send null som argument hvis du vil bruke datamaskinens primærkamera som inngangskilde. For å bruke et eksternt kamera som er koblet til datamaskinen, passer du ett. For å gjøre ansiktsuskarphet på en forhåndsinnspilt video, passerer du videobanen i stedet. Til bruk et eksternt kamera, send kameraets URL som inneholder IP-adressen og portnummeret.

cap = cv2.VideoCapture(0)

For å utføre ansiktsuskarphet på inngangen, trenger du tre funksjoner:

  • En funksjon som vil forhåndsbehandle inndata.
  • En funksjon som vil gjøre ansiktet uskarpt i inngangen.
  • En hovedfunksjon som vil kontrollere flyten av programmet og vise utdataene.

Forbehandler videoinngangen

Opprett en inngangsforbehandlingsfunksjon som tar hvert bilde av inngangsvideoen som inngang. Initialiser CascadeClassifier-klassen som du vil bruke for ansiktsgjenkjenning. Endre størrelsen på rammen til 640 x 640 piksler. Konverter den endrede størrelsen på rammen til gråtoner for enklere behandling, og finn endelig ansiktene i inndataene 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å_bilde, 1.04, 5, minSize=(20, 20))

komme tilbake resized_image, face_rects

Denne funksjonen returnerer en tuppel som inneholder bildet med endret størrelse og en liste over rektangler som representerer de oppdagede ansiktene.

Gjør ansiktet uskarpt

Lag en uskarphet funksjon som vil gjøre ansiktene i inndata uskarpe. Funksjonen tar den endrede størrelsen på rammen og listen over rektangler som avgrenser ansiktene som returneres av forbehandlingsfunksjonen som input. Løkker over hvert ansiktsrektangel. Beregner midten av hvert rektangel og radiusen til den uskarpe sirkelen. Oppretter et svart bilde med samme dimensjoner som den endrede størrelsen ved å initialisere alle piksler til null. Tegner en hvit sirkel på det svarte bildet hvis sentrum er i ansiktsrektangelet ved å bruke den beregnede radiusen. Til slutt gjør det bildet uskarpt på den hvite sirkelen.

defface_blur(endret_ramme, ansiktsrett):
til (x, y, w, h) i face_rects:
# Spesifisere senter og radius
# av uskarphet sirkelen
center_x = x + w // 3
center_y = y + h // 3
radius = h // 1

# lage et svart bilde med lignende
# dimensjoner som rammen
maske = np.zeros((resized_frame.shape[:3]), np.uint8)

# tegne en hvit sirkel i ansiktsområdet på rammen
cv2.circle (maske, (center_x, center_y), radius,
(255, 255, 255), -1)

# uskarp hele rammen
blurred_image = cv2.medianBlur (resized_frame, 99)

# rekonstruere rammen:
# - pikslene fra den uskarpe rammen hvis maske > 0
# - ellers, ta pikslene fra den originale rammen
resized_frame = np.where (maske > 0, blurred_image,
endre størrelse_ramme)

komme tilbake endre størrelse_ramme

Funksjonen bruker NumPy hvor() funksjon for å rekonstruere rammen under uskarphet.

Kontroller flyten av programmet ditt

Lag en hovedfunksjon som vil fungere som inngangspunktet for programmet ditt. Den vil da kontrollere flyten av programmet. Funksjonen vil starte en uendelig sløyfe for kontinuerlig å fange opp rammene til videoinngangen. Kalle cap-objektets lesemetode for å lese en ramme fra kameraet.

Funksjonen vil deretter sende rammen til forbehandlingsfunksjonen og sende returverdiene til en annen funksjon, face_blur, for å få et uskarpt bilde. Den endrer deretter størrelsen på rammen som returneres av uskarphet-funksjonen og viser utdataene.

defhoved-():
samtidig somekte:
suksess, ramme = cap.read()
resized_input, face_rects = image_preprocess (ramme)
blurred_image = face_blur (resized_input, face_rects)

# Viser det uskarpe bildet
cv2.imshow("uskarpt bilde", cv2.resize (blurred_image, (500, 500)))

hvis cv2.waitKey(1) == ord("q"):
gå i stykker

Funksjonen avslutter også utgangsvisningen når brukeren trykker på q-tasten.

Kjøre programmet

Sørg for at hovedfunksjonen kjører først når du kjører skriptet. Denne betingelsen vil være falsk hvis du importerer skriptet som en modul i et annet program.

hvis __navn__ == "__hoved__":
hoved()

Dette lar deg bruke skriptet som en modul eller kjøre det som et frittstående program. Når programmet kjører, bør du se utdata som ligner på dette:

Ansiktet er uskarpt og ugjenkjennelig.

Real-World-applikasjoner for ansiktsuskarphet

Du kan bruke ansiktsuskarphet i mange typer applikasjoner for å beskytte folks personvern. Gatevisning og karttjenester bruker uskarphet for å gjøre ansiktene til folk uskarpe i bildene de tar. Rettshåndhevelse bruker ansiktsuskarphet for å beskytte identiteten til vitner.

Mange videodelingsplattformer har også integrert en funksjon for sløring av ansikter for brukerne sine. Å sammenligne bruken av ansiktsuskarphet i disse områdene vil hjelpe deg å observere hvordan andre plattformer integrerer teknologien.