I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Puoi utilizzare la sfocatura del volto per nascondere il volto di una persona, in un video o in un'immagine, per diversi motivi. I problemi di privacy e sicurezza sono i più predominanti. La maggior parte delle piattaforme di condivisione video e dei software di editing video dispone di funzionalità di sfocatura del volto integrate.

Puoi creare il tuo programma di sfocatura del viso da zero usando Python e le librerie OpenCV e NumPy.

Configurazione dell'ambiente

Per seguire questo articolo, è necessario avere familiarità con il basi di Python e avere una conoscenza di base di utilizzando la libreria NumPy.

Apri qualsiasi IDE Python con cui ti senti a tuo agio. Crea un ambiente virtuale in cui installerai le librerie richieste. Crea un nuovo file Python. Passare al terminale ed eseguire il seguente comando per installare le librerie richieste. Passa le librerie come un elenco delimitato da spazi.

instagram viewer
pip installa OpenCV-python NumPy

Utilizzerai OpenCV per prendere e pre-elaborare l'input video e NumPy per lavorare con gli array.

Dopo aver installato le librerie, attendi che l'IDE aggiorni gli scheletri del progetto. Quando l'aggiornamento è completo e l'ambiente è pronto, sei libero di iniziare a programmare.

Il codice sorgente completo è disponibile in a Deposito GitHub.

Importazione delle librerie richieste

Inizia importando le librerie OpenCV e NumPy. Ciò ti consentirà di chiamare e utilizzare tutte le funzioni che supportano. Importa OpenCV-python come cv2.

importare cv2
importare intorpidito COME np

I moduli OpenCV-python utilizzano il nome cv2 come convenzione stabilita dalla comunità OpenCV. OpenCV-python è un wrapper Python della libreria OpenCV che è scritto in C++.

Prendendo il tuo contributo

Crea una variabile e inizializza il file Acquisizione video oggetto. Passa zero come argomento se desideri utilizzare la fotocamera principale del tuo computer come sorgente di input. Per utilizzare una fotocamera esterna collegata al tuo computer, passane uno. Per eseguire la sfocatura del volto su un video preregistrato, passa invece il percorso del video. A utilizzare una videocamera remota, passare l'URL della telecamera contenente l'indirizzo IP e il numero di porta.

cap = cv2.VideoCapture(0)

Per eseguire la sfocatura del viso sull'input, avrai bisogno di tre funzioni:

  • Una funzione che pre-elaborerà l'input.
  • Una funzione che sfocerà il volto nell'input.
  • Una funzione principale che controllerà il flusso del programma e visualizzerà l'output.

Preelaborazione dell'ingresso video

Crea una funzione di pre-elaborazione dell'input che prenderà come input ogni fotogramma del video in ingresso. Inizializza la classe CascadeClassifier che utilizzerai per il rilevamento dei volti. Ridimensiona la cornice a 640 per 640 pixel. Converti la cornice ridimensionata in scala di grigi per un'elaborazione più semplice e infine rileva i volti nell'input e uniscili con rettangoli.

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

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

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

face_rects = face_detector.detectMultiScale(
immagine_grigia, 1.04, 5, dimensione minima=(20, 20))

ritorno resized_image, face_rects

Questa funzione restituisce una tupla contenente l'immagine ridimensionata e un elenco di rettangoli che rappresentano i volti rilevati.

Sfocatura del viso

Crea una funzione di sfocatura che offuschi i volti nel tuo input. La funzione accetta come input la cornice ridimensionata e l'elenco di rettangoli che delimitano le facce restituite dalla funzione di pre-elaborazione. Loop su ogni rettangolo faccia. Calcola il centro di ogni rettangolo e il raggio del cerchio sfocato. Crea un'immagine nera con le stesse dimensioni del fotogramma ridimensionato inizializzando tutti i pixel a zero. Disegna un cerchio bianco sull'immagine nera il cui centro si trova nel rettangolo della faccia utilizzando il raggio calcolato. Infine, sfoca l'immagine sul cerchio bianco.

defface_blur(resized_frame, face_rects):
per (x, y, w, h) In face_rects:
# Specificare il centro e il raggio
# del cerchio sfocato
centro_x = x + w // 3
centro_y = y + h // 3
raggio = h // 1

# creando un'immagine nera con simili
# dimensioni come la cornice
maschera = np.zeros((resized_frame.shape[:3]), np.uint8)

# disegna un cerchio bianco nella regione del viso della cornice
cv2.circle (maschera, (centro_x, centro_y), raggio,
(255, 255, 255), -1)

# sfocando l'intero fotogramma
immagine_sfocata = cv2.medianBlur (resized_frame, 99)

# ricostruendo il telaio:
# - i pixel della cornice sfocata se mask > 0
# - altrimenti, prendi i pixel dal fotogramma originale
resized_frame = np.where (maschera > 0, immagine_sfocata,
telaio_ridimensionato)

ritorno resized_frame

La funzione utilizza NumPy Dove() funzioneper ricostruire il fotogramma durante la sfocatura.

Controllo del flusso del tuo programma

Crea una funzione principale che fungerà da punto di ingresso del tuo programma. Controllerà quindi il flusso del programma. La funzione avvierà un ciclo infinito per catturare continuamente i fotogrammi dell'ingresso video. Chiama il metodo read dell'oggetto cap per leggere un fotogramma dalla fotocamera.

La funzione passerà quindi il fotogramma alla funzione di pre-elaborazione e passerà i valori restituiti a un'altra funzione, face_blur, per ottenere un'immagine sfocata. Quindi ridimensiona il fotogramma restituito dalla funzione di sfocatura e visualizza l'output.

defprincipale():
MentreVERO:
successo, frame = cap.read()
resized_input, face_rects = image_preprocess (frame)
immagine_sfocata = sfocatura_faccia (resized_input, face_rects)

# Visualizzazione dell'immagine sfocata
cv2.imshow("Immagine sfocata", cv2.resize (immagine_sfocata, (500, 500)))

Se cv2.waitKey(1) == ord("Q"):
rottura

La funzione termina anche la visualizzazione dell'output quando l'utente preme il tasto q.

Esecuzione del programma

Assicurati che la funzione principale venga eseguita per prima quando esegui lo script. Questa condizione sarà falsa se importi lo script come modulo in un altro programma.

Se __nome__ == "__principale__":
principale()

Ciò consente di utilizzare lo script come modulo o di eseguirlo come programma autonomo. Quando il programma viene eseguito, dovresti vedere un output simile a questo:

Il viso è sfocato e irriconoscibile.

Applicazioni del mondo reale della sfocatura del viso

Puoi applicare la sfocatura del viso in molti tipi di applicazioni per proteggere la privacy delle persone. I servizi di Street View e mapping utilizzano la sfocatura per offuscare i volti delle persone nelle immagini che catturano. Le forze dell'ordine utilizzano l'offuscamento del volto per proteggere l'identità dei testimoni.

Molte piattaforme di condivisione video hanno anche integrato una funzione di sfocatura del volto per i propri utenti. Confrontare l'uso della sfocatura del viso in queste aree ti aiuterà a osservare come altre piattaforme integrano la tecnologia.