Leser wie Sie helfen, MUO zu unterstützen. Wenn Sie über Links auf unserer Website einen Kauf tätigen, erhalten wir möglicherweise eine Affiliate-Provision. Weiterlesen.

Sie können Gesichtsunschärfe verwenden, um das Gesicht einer Person in einem Video oder einem Bild aus mehreren Gründen zu verbergen. Datenschutz- und Sicherheitsprobleme sind die vorherrschenden. Die meisten Video-Sharing-Plattformen und Videobearbeitungsprogramme verfügen über eine integrierte Funktion zum Verwischen von Gesichtern.

Mit Python und den OpenCV- und NumPy-Bibliotheken können Sie Ihr eigenes Programm zum Verwischen von Gesichtern von Grund auf neu erstellen.

Einrichten Ihrer Umgebung

Um diesen Artikel durchzuarbeiten, müssen Sie mit dem vertraut sein Grundlagen von Python und haben ein grundlegendes Verständnis von mit der NumPy-Bibliothek.

Öffnen Sie eine beliebige Python-IDE, mit der Sie vertraut sind. Erstellen Sie eine virtuelle Umgebung, in der Sie die erforderlichen Bibliotheken installieren. Erstellen Sie eine neue Python-Datei. Navigieren Sie zum Terminal und führen Sie den folgenden Befehl aus, um die erforderlichen Bibliotheken zu installieren. Übergeben Sie die Bibliotheken als durch Leerzeichen getrennte Liste.

instagram viewer

pip installiere OpenCV-python NumPy

Sie verwenden OpenCV, um die Videoeingabe aufzunehmen und vorzuverarbeiten, und NumPy, um mit Arrays zu arbeiten.

Nachdem Sie die Bibliotheken installiert haben, warten Sie, bis die IDE die Projektskelette aktualisiert hat. Wenn das Update abgeschlossen und die Umgebung bereit ist, können Sie mit dem Programmieren beginnen.

Der vollständige Quellcode ist verfügbar in a GitHub-Repository.

Importieren der erforderlichen Bibliotheken

Beginnen Sie mit dem Importieren von OpenCV- und NumPy-Bibliotheken. Dadurch können Sie alle unterstützten Funktionen aufrufen und verwenden. Importieren Sie OpenCV-Python als cv2.

importieren Lebenslauf2
importieren taub als np

Die OpenCV-Python-Module verwenden den Namen cv2 als Konvention, die von der OpenCV-Community festgelegt wurde. OpenCV-python ist ein Python-Wrapper der OpenCV-Bibliothek, der in C++ geschrieben ist.

Nehmen Sie Ihre Eingabe entgegen

Erstellen Sie eine Variable und initialisieren Sie die Videoaufnahme Objekt. Übergeben Sie Null als Argument, wenn Sie die Hauptkamera Ihres Computers als Eingabequelle verwenden möchten. Um eine an Ihren Computer angeschlossene externe Kamera zu verwenden, geben Sie eine ein. Übergeben Sie stattdessen den Pfad des Videos, um Gesichter unkenntlich zu machen. Zu Verwenden Sie eine Remote-Kamera, übergeben Sie die URL der Kamera, die ihre IP-Adresse und Portnummer enthält.

cap = cv2.VideoCapture (0)

Um eine Gesichtsunschärfe an der Eingabe durchzuführen, benötigen Sie drei Funktionen:

  • Eine Funktion, die die Eingabe vorverarbeitet.
  • Eine Funktion, die das Gesicht in der Eingabe verwischt.
  • Eine Hauptfunktion, die den Ablauf des Programms steuert und die Ausgabe anzeigt.

Vorverarbeitung des Videoeingangs

Erstellen Sie eine Eingabevorverarbeitungsfunktion, die jeden Frame des Eingabevideos als Eingabe verwendet. Initialisieren Sie die CascadeClassifier-Klasse, die Sie für die Gesichtserkennung verwenden werden. Ändern Sie die Größe des Rahmens auf 640 x 640 Pixel. Konvertieren Sie den in der Größe geänderten Rahmen zur einfacheren Verarbeitung in Graustufen und erkennen Sie schließlich die Gesichter in der Eingabe und binden Sie sie mit Rechtecken.

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

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

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

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

zurückkehren resized_image, face_rects

Diese Funktion gibt ein Tupel zurück, das das in der Größe geänderte Bild und eine Liste von Rechtecken enthält, die die erkannten Gesichter darstellen.

Das Gesicht verwischen

Erstellen Sie eine Unschärfefunktion, die die Gesichter in Ihrer Eingabe unkenntlich macht. Die Funktion verwendet den in der Größe geänderten Rahmen und die Liste der Rechtecke, die die Flächen begrenzen, die von der Vorverarbeitungsfunktion als Eingabe zurückgegeben werden. Schleifen über jedem Gesichtsrechteck. Berechnet den Mittelpunkt jedes Rechtecks ​​und den Radius des Unschärfekreises. Erstellt ein schwarzes Bild mit den gleichen Abmessungen wie der in der Größe geänderte Rahmen, indem alle Pixel auf Null initialisiert werden. Zeichnet mit dem berechneten Radius einen weißen Kreis auf das schwarze Bild, dessen Mittelpunkt auf dem Gesichtsrechteck liegt. Schließlich verwischt es das Bild auf dem weißen Kreis.

defface_blur(resized_frame, face_rects):
für (x, y, b, h) In face_rects:
# Mittelpunkt und Radius angeben
# des Unschärfekreises
center_x = x + w // 3
center_y = y + h // 3
Radius = h // 1

# Erstellen eines schwarzen Bildes mit ähnlichem
# Abmessungen als Rahmen
mask = np.zeros((resized_frame.shape[:3]), np.uint8)

# Zeichnen Sie einen weißen Kreis im Gesichtsbereich des Rahmens
cv2.circle (Maske, (Mitte_x, Mitte_y), Radius,
(255, 255, 255), -1)

# Den gesamten Rahmen verwischen
blurred_image = cv2.medianBlur (resized_frame, 99)

# Rahmen rekonstruieren:
# - die Pixel aus dem verschwommenen Rahmen, wenn Maske > 0
# - Andernfalls nehmen Sie die Pixel aus dem Originalbild
resized_frame = np.where (Maske > 0, verschwommenes Bild,
verkleinerter_Rahmen)

zurückkehren resized_frame

Die Funktion verwendet die NumPy Wo() Funktion zum Rekonstruieren des Rahmens während des Weichzeichnens.

Steuerung des Ablaufs Ihres Programms

Erstellen Sie eine Hauptfunktion, die als Einstiegspunkt Ihres Programms fungiert. Es steuert dann den Ablauf des Programms. Die Funktion startet eine Endlosschleife, um die Frames des Videoeingangs kontinuierlich zu erfassen. Rufen Sie die read-Methode des Cap-Objekts auf, um einen Frame von der Kamera zu lesen.

Die Funktion übergibt dann den Rahmen an die Vorverarbeitungsfunktion und die Rückgabewerte an eine andere Funktion, face_blur, um ein unscharfes Bild zu erhalten. Anschließend wird die Größe des von der Unschärfefunktion zurückgegebenen Rahmens geändert und die Ausgabe angezeigt.

defhauptsächlich():
währendWAHR:
Erfolg, Rahmen = cap.read()
resized_input, face_rects = image_preprocess (Rahmen)
blurred_image = face_blur (resized_input, face_rects)

# Anzeigen des verschwommenen Bildes
cv2.imshow("Verschwommenes Bild", cv2.resize (blurred_image, (500, 500)))

Wenn cv2.waitKey(1) == ord("Q"):
brechen

Die Funktion beendet auch die Ausgabeanzeige, wenn der Benutzer die q-Taste drückt.

Ausführen des Programms

Stellen Sie sicher, dass die Hauptfunktion zuerst ausgeführt wird, wenn Sie das Skript ausführen. Diese Bedingung ist falsch, wenn Sie das Skript als Modul in ein anderes Programm importieren.

Wenn __name__ == "__hauptsächlich__":
hauptsächlich()

Dadurch können Sie das Skript als Modul verwenden oder als eigenständiges Programm ausführen. Wenn das Programm ausgeführt wird, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

Das Gesicht ist verschwommen und nicht wiederzuerkennen.

Reale Anwendungen von Face Blurring

Sie können Gesichtsunschärfe in vielen Arten von Anwendungen anwenden, um die Privatsphäre von Personen zu schützen. Street View- und Kartendienste verwenden Unschärfe, um die Gesichter von Personen in den von ihnen aufgenommenen Bildern unkenntlich zu machen. Strafverfolgungsbehörden verwenden Gesichtsunschärfe, um die Identität von Zeugen zu schützen.

Viele Video-Sharing-Plattformen haben auch eine Funktion zum Verwischen von Gesichtern für ihre Benutzer integriert. Ein Vergleich der Verwendung von Gesichtsunschärfe in diesen Bereichen hilft Ihnen zu beobachten, wie andere Plattformen die Technologie integrieren.