Vous pouvez utiliser le floutage du visage pour masquer le visage d'une personne, dans une vidéo ou une image, pour plusieurs raisons. Les questions de confidentialité et de sécurité sont les plus prédominantes. La plupart des plates-formes de partage de vidéos et des logiciels de montage vidéo intègrent une fonctionnalité de floutage des visages.
Vous pouvez créer votre propre programme de flou de visage à partir de zéro en utilisant Python et les bibliothèques OpenCV et NumPy.
Configuration de votre environnement
Pour suivre cet article, vous devez vous familiariser avec le bases de Python et avoir une compréhension de base de en utilisant la bibliothèque NumPy.
Ouvrez n'importe quel IDE Python avec lequel vous êtes à l'aise. Créez un environnement virtuel dans lequel vous installerez les bibliothèques requises. Créez un nouveau fichier Python. Accédez au terminal et exécutez la commande suivante pour installer les bibliothèques requises. Passez les bibliothèques sous forme de liste délimitée par des espaces.
pip installer OpenCV-python NumPy
Vous utiliserez OpenCV pour prendre et pré-traiter l'entrée vidéo et NumPy pour travailler avec des tableaux.
Une fois que vous avez installé les bibliothèques, attendez que l'IDE mette à jour les squelettes du projet. Lorsque la mise à jour est terminée et que l'environnement est prêt, vous êtes libre de commencer à coder.
Le code source complet est disponible dans un Référentiel GitHub.
Importation des bibliothèques requises
Commencez par importer les bibliothèques OpenCV et NumPy. Cela vous permettra d'appeler et d'utiliser toutes les fonctions qu'ils prennent en charge. Importez OpenCV-python en tant que cv2.
importer cv2
importer numpy comme np
Les modules OpenCV-python utilisent le nom cv2 comme convention établie par la communauté OpenCV. OpenCV-python est un wrapper Python de la bibliothèque OpenCV qui est écrite en C++.
Prendre votre contribution
Créer une variable et initialiser le Capture vidéo objet. Passez zéro comme argument si vous souhaitez utiliser la caméra principale de votre ordinateur comme source d'entrée. Pour utiliser une caméra externe connectée à votre ordinateur, passez-en une. Pour effectuer un flou de visage sur une vidéo préenregistrée, passez plutôt le chemin de la vidéo. Pour utiliser une caméra à distance, transmettez l'URL de la caméra contenant son adresse IP et son numéro de port.
cap = cv2.VideoCapture(0)
Pour effectuer un flou de visage sur l'entrée, vous aurez besoin de trois fonctions :
- Une fonction qui prétraitera l'entrée.
- Une fonction qui va flouter le visage dans l'entrée.
- Une fonction principale qui contrôlera le déroulement du programme et affichera la sortie.
Prétraitement de l'entrée vidéo
Créez une fonction de prétraitement d'entrée qui prendra chaque image de la vidéo d'entrée comme entrée. Initialisez la classe CascadeClassifier que vous utiliserez pour la détection de visage. Redimensionnez le cadre à 640 par 640 pixels. Convertissez le cadre redimensionné en niveaux de gris pour un traitement plus facile, et enfin détectez les visages dans l'entrée et liez-les avec des rectangles.
définitivementimage_preprocess(cadre):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')resized_image = cv2.resize (frame, (640, 640))
gray_image = cv2.cvtColor (image_redimensionnée,
cv2.COLOR_BGR2GRAY)face_rects = face_detector.detectMultiScale(
gray_image, 1.04, 5, taille min=(20, 20))
retour image_redimensionnée, face_rects
Cette fonction renvoie un tuple contenant l'image redimensionnée et une liste de rectangles représentant les visages détectés.
Brouiller le visage
Créez une fonction de flou qui brouillera les visages dans votre entrée. La fonction prend en entrée le cadre redimensionné et la liste des rectangles délimitant les faces renvoyés par la fonction de prétraitement. Boucles sur chaque rectangle de face. Calcule le centre de chaque rectangle et le rayon du cercle flou. Crée une image noire ayant les mêmes dimensions que le cadre redimensionné en initialisant tous les pixels à zéro. Dessine un cercle blanc sur l'image noire dont le centre est au rectangle de la face en utilisant le rayon calculé. Enfin, il floute l'image sur le cercle blanc.
définitivementface_blur(resized_frame, face_rects):
pour (x, y, l, h) dans face_rects :
# Spécifier le centre et le rayon
# du cercle flou
centre_x = x + w // 3
center_y = y + h // 3
rayon = h // 1# création d'une image noire ayant des similitudes
# dimensions comme le cadre
mask = np.zeros((resized_frame.shape[:3]), np.uint8)# dessinez un cercle blanc dans la région du visage du cadre
cv2.circle (mask, (center_x, center_y), rayon,
(255, 255, 255), -1)# flouter tout le cadre
blur_image = cv2.medianBlur (resized_frame, 99)# reconstruction du cadre :
# - les pixels du cadre flou si masque > 0
# - sinon, prend les pixels du cadre d'origine
resized_frame = np.où (masque > 0, image_floue,
cadre_redimensionné)
retour cadre_redimensionné
La fonction utilise le NumPy où() fonction pour reconstruire le cadre pendant le floutage.
Contrôler le déroulement de votre programme
Créez une fonction principale qui agira comme point d'entrée de votre programme. Il contrôlera alors le déroulement du programme. La fonction lancera une boucle infinie pour capturer en continu les images de l'entrée vidéo. Appelez la méthode read de l'objet cap pour lire une image de la caméra.
La fonction passera ensuite le cadre à la fonction de prétraitement et passera les valeurs de retour à une autre fonction, face_blur, pour obtenir une image floue. Il redimensionne ensuite le cadre renvoyé par la fonction de flou et affiche la sortie.
définitivementprincipal():
alors queVrai:
succès, frame = cap.read()
resized_input, face_rects = image_preprocess (frame)
blur_image = face_blur (resized_input, face_rects)# Affichage de l'image floue
cv2.imshow("Image floue", cv2.resize (image_floue, (500, 500)))
si cv2.waitKey(1) == ordre("q"):
casser
La fonction met également fin à l'affichage de la sortie lorsque l'utilisateur appuie sur la touche q.
Exécution du programme
Assurez-vous que la fonction principale s'exécute en premier lorsque vous exécutez le script. Cette condition sera fausse si vous importez le script en tant que module dans un autre programme.
si __nom__ == "__principal__":
principal()
Cela vous permet d'utiliser le script en tant que module ou de l'exécuter en tant que programme autonome. Lorsque le programme s'exécute, vous devriez voir une sortie semblable à celle-ci :
Le visage est flou et méconnaissable.
Applications réelles du flou du visage
Vous pouvez appliquer le floutage du visage dans de nombreux types d'applications pour protéger la vie privée des personnes. Les services de Street View et de cartographie utilisent le flou pour flouter les visages des personnes dans les images qu'ils capturent. Les forces de l'ordre utilisent le floutage des visages pour protéger l'identité des témoins.
De nombreuses plateformes de partage de vidéos ont également intégré une fonctionnalité de floutage des visages pour leurs utilisateurs. La comparaison de l'utilisation du flou des visages dans ces zones vous aidera à observer comment d'autres plates-formes intègrent la technologie.