Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

U kunt om verschillende redenen gezichtsvervaging gebruiken om iemands gezicht in een video of afbeelding te verbergen. Privacy- en beveiligingskwesties zijn de meest overheersende. De meeste platforms voor het delen van video's en videobewerkingssoftware hebben een ingebouwde functie voor het vervagen van gezichten.

Je kunt je eigen gezichtsvervagende programma helemaal opnieuw maken met behulp van Python en de OpenCV- en NumPy-bibliotheken.

Uw omgeving instellen

Om door te gaan met dit artikel, moet u bekend zijn met de basisprincipes van Python en een basiskennis hebben van met behulp van de NumPy-bibliotheek.

Open een Python IDE waarmee u vertrouwd bent. Creëer een virtuele omgeving waarin u de benodigde bibliotheken installeert. Maak een nieuw Python-bestand. Navigeer naar de terminal en voer de volgende opdracht uit om de vereiste bibliotheken te installeren. Geef de bibliotheken door als een door spaties gescheiden lijst.

instagram viewer
pip installeer OpenCV-python NumPy

Je gebruikt OpenCV om de video-invoer en NumPy te nemen en voor te verwerken om met arrays te werken.

Nadat u de bibliotheken hebt geïnstalleerd, wacht u tot de IDE de projectskeletten bijwerkt. Wanneer de update is voltooid en de omgeving gereed is, kunt u beginnen met coderen.

De volledige broncode is beschikbaar in een GitHub-opslagplaats.

De vereiste bibliotheken importeren

Begin met het importeren van OpenCV- en NumPy-bibliotheken. Hierdoor kunt u bellen en alle functies gebruiken die ze ondersteunen. Importeer OpenCV-python als cv2.

importeren cv2
importeren onnozel als np

De OpenCV-python-modules gebruiken de naam cv2 als een conventie die de OpenCV-gemeenschap tot stand heeft gebracht. OpenCV-python is een Python-wrapper van de OpenCV-bibliotheek die is geschreven in C++.

Uw inbreng nemen

Maak een variabele aan en initialiseer het Video opname voorwerp. Geef nul door als argument als u de primaire camera van uw computer als invoerbron wilt gebruiken. Om een ​​externe camera te gebruiken die op uw computer is aangesloten, moet u er een doorgeven. Om gezichtsvervaging toe te passen op een vooraf opgenomen video, passeert u in plaats daarvan het pad van de video. Naar gebruik een camera op afstand, geeft u de URL van de camera door met het IP-adres en poortnummer.

cap = cv2.VideoCapture(0)

Om gezichtsvervaging op de invoer uit te voeren, hebt u drie functies nodig:

  • Een functie die de invoer voorverwerkt.
  • Een functie die het gezicht in de invoer vervaagt.
  • Een hoofdfunctie die de stroom van het programma regelt en de uitvoer weergeeft.

De video-invoer voorbewerken

Maak een functie voor het voorbewerken van invoer die elk frame van de ingevoerde video als invoer gebruikt. Initialiseer de klasse CascadeClassifier die u gaat gebruiken voor gezichtsdetectie. Verklein het frame naar 640 bij 640 pixels. Converteer het frame met de gewijzigde grootte naar grijstinten voor eenvoudigere verwerking en detecteer ten slotte de gezichten in de invoer en bind ze met rechthoeken.

defimage_preprocess(kader):
gezichtsdetector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')

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

grijze_afbeelding = cv2.cvtColor (verkleinde_afbeelding,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
grijze_afbeelding, 1.04, 5, minGrootte=(20, 20))

opbrengst resized_image, face_rects

Deze functie retourneert een tuple met de afbeelding met de gewijzigde grootte en een lijst met rechthoeken die de gedetecteerde gezichten vertegenwoordigen.

Het gezicht vervagen

Maak een vervagingsfunctie die de gezichten in uw invoer vervaagt. De functie neemt het frame met de gewijzigde grootte en de lijst met rechthoeken die de vlakken begrenzen die door de voorbewerkingsfunctie worden geretourneerd, als invoer. Loopt over elke gezichtsrechthoek. Berekent het middelpunt van elke rechthoek en de straal van de vervagende cirkel. Creëert een zwarte afbeelding met dezelfde afmetingen als het frame met de gewijzigde grootte door alle pixels op nul te initialiseren. Tekent een witte cirkel op de zwarte afbeelding waarvan het middelpunt zich in de gezichtsrechthoek bevindt met behulp van de berekende straal. Ten slotte vervaagt het de afbeelding op de witte cirkel.

defface_blur(resized_frame, face_rects):
voor (x, y, w, h) in face_rects:
# Specificatie van het midden en de straal
# van de vervagende cirkel
centrum_x = x + w // 3
centrum_y = y + h // 3
straal = h // 1

# een zwarte afbeelding maken met vergelijkbare
# afmetingen als het frame
mask = np.zeros((formaat_frame.vorm gewijzigd[:3]), np.uint8)

# teken een witte cirkel in het gezichtsgebied van het frame
cv2.circle (masker, (center_x, center_y), radius,
(255, 255, 255), -1)

# het hele frame vervagen
wazig_beeld = cv2.medianBlur (verkleind_frame, 99)

# het frame reconstrueren:
# - de pixels van het vervaagde kader als masker > 0
# - neem anders de pixels uit het originele frame
aangepast_frame = np.where (masker > 0, wazig_beeld,
aangepast_frame)

opbrengst aangepast_frame

De functie gebruikt de NumPy waar() functie om het kader tijdens het vervagen te reconstrueren.

De stroom van uw programma beheersen

Maak een hoofdfunctie die zal fungeren als het startpunt van uw programma. Het zal dan de stroom van het programma regelen. De functie start een oneindige lus om continu de frames van de video-invoer vast te leggen. Roep de leesmethode van het cap-object aan om een ​​frame van de camera te lezen.

De functie geeft het frame vervolgens door aan de voorverwerkingsfunctie en geeft de retourwaarden door aan een andere functie, face_blur, om een ​​wazig beeld te verkrijgen. Vervolgens wordt het formaat van het frame dat wordt geretourneerd door de vervagingsfunctie aangepast en wordt de uitvoer weergegeven.

defvoornaamst():
terwijlWAAR:
succes, frame = cap.read()
resized_input, face_rects = image_preprocess (frame)
wazig_beeld = face_blur (verkleinde_invoer, face_rects)

# Het wazige beeld weergeven
cv2.imshow("Wazig beeld", cv2.formaat wijzigen (wazig_beeld, (500, 500)))

als cv2.waitKey(1) == volgorde("Q"):
pauze

De functie beëindigt ook de uitvoerweergave wanneer de gebruiker op de toets q drukt.

Het programma uitvoeren

Zorg ervoor dat de hoofdfunctie als eerste wordt uitgevoerd wanneer u het script uitvoert. Deze voorwaarde is onwaar als u het script als een module in een ander programma importeert.

als __naam__ == "__voornaamst__":
voornaamst()

Hierdoor kunt u het script als een module gebruiken of als een op zichzelf staand programma uitvoeren. Wanneer het programma wordt uitgevoerd, zou u uitvoer moeten zien die er ongeveer zo uitziet:

Het gezicht is wazig en onherkenbaar.

Real-world toepassingen van gezichtsvervaging

U kunt gezichtsvervaging toepassen in veel soorten toepassingen om de privacy van mensen te beschermen. Street View- en kaartservices gebruiken vervaging om de gezichten van mensen te vervagen in de afbeeldingen die ze vastleggen. Wetshandhavers gebruiken gezichtsvervaging om de identiteit van getuigen te beschermen.

Veel platforms voor het delen van video's hebben ook een functie voor het vervagen van gezichten voor hun gebruikers geïntegreerd. Door het gebruik van gezichtsvervaging op deze gebieden te vergelijken, kunt u zien hoe andere platforms de technologie integreren.