Une étude préliminaire de la détection et de la reconnaissance des visages en python

Insérez la description de l'image ici

Types de détection de visage

Quels sont les types de reconnaissance faciale? Il peut être divisé en deux types.
Le premier est la reconnaissance faciale statique : il s'agit de la personne reconnue, dans un état statique ou dans un état coopératif, collectant l'image du visage de la personne pour effectuer une reconnaissance d'image. Ce type de coopération nécessite la coopération de la personne, et cela prend généralement 1 à 2 secondes pour que la personne le fasse temporairement. Une partie de celui-ci convient aux lieux qui ne sont pas sensibles au temps ou qui ne sont pas opposés à la collecte de visages, tels que le contrôle d'accès du visage, la lecture d'identité, l'enregistrement de présence, la vérification de la carte d'identité dans les cafés Internet, l'enregistrement des visiteurs, etc.

La seconde est la reconnaissance faciale dynamique : lorsque la personne reconnue est en état de mouvement ou de marche et d'autres situations non coopératives, la vidéo de son visage est collectée pour effectuer la reconnaissance faciale. Ce type ne nécessite pas la coopération des parties, il se réfère donc aux lieux non sensibles des parties, tels que : Aux gares, aéroports, quais et autres endroits où les gens sont concentrés, le contrôle du visage clé peut être réalisé pour éviter les problèmes avant qu'ils ne surviennent.

Application de la détection de visage dans la vie

La reconnaissance faciale est de plus en plus utilisée dans nos vies.
Insérez la description de l'image ici
Vous pouvez scanner votre visage pour déverrouiller votre téléphone, scanner votre visage pour payer, vous pouvez scanner votre visage pour ouvrir la porte, et votre visage devient une information biométrique très importante d'une personne. De nos jours, le développement de la technologie de reconnaissance faciale est de plus en plus mature et les domaines d'application sont de plus en plus répandus. Par exemple, le système de reconnaissance faciale Yunmai peut être appliqué dans les scénarios suivants:

  1. Sécurité et gestion d'entreprise et résidentielle: comme les systèmes de contrôle d'accès et de présence par reconnaissance faciale, les portes antivol de reconnaissance faciale, etc.
  2. Passeport électronique et carte d’identité: le programme chinois de passeport électronique, Ministère de la sécurité publique, accélère sa planification et sa mise en œuvre.
  3. Sécurité publique, justice et enquêtes criminelles: comme l'utilisation de systèmes et de réseaux de reconnaissance faciale pour rechercher des fugitifs à travers le pays.
  4. Libre-service: comme l'authentification par nom réel en libre-service, l'ouverture de compte à distance en libre-service, etc.
  5. Sécurité de l'information: comme la connexion à l'ordinateur, l'administration en ligne et le commerce électronique.

Détection de visage et reconnaissance de visage

Insérez la description de l'image ici
Avant de commencer à expliquer la détection des visages, pour vous aider à résoudre les deux concepts sont souvent confondus: 人脸检测 vs 人脸识别. Remarque! ! Des concepts que tout le monde confond souvent.
Distinguez la différence entre ces deux concepts. En termes simples, leurs principales différences sont:

  1. Où est le visage? Détection de visage (processus de localisation de la zone du visage dans l'image)

  2. Qui est le visage? Reconnaissance faciale (classification pour détecter qui est ce visage)

L'une consiste à comparer la zone de visage obtenue par détection de visage avec une base de données de visages connue ;

L'autre consiste à extraire les valeurs des caractéristiques des images du visage . Le tableau de valeurs de caractéristiques est utilisé pour identifier les informations de visage.

Ce dernier est plus pratique.

En termes de séquence, la détection de visage est effectuée en premier, puis la reconnaissance de visage est effectuée .

Ensuite, nous parlerons d'abord de la façon d'utiliser OpenCV pour la détection de visage aujourd'hui.

Comment utiliser OpenCV pour la détection de visage

À propos de HaarCascade

La reconnaissance faciale dans OpenCV est réalisée par le classificateur en cascade des fonctionnalités de Haar. Il n'y a pas trop d'explications sur les principes sous-jacents de l'algorithme ici.

En fait, il existe de nombreux pré-formés à OpenCV HaarCascade模型(XML文件), tels que la détection de visage, la détection des yeux, la détection du corps entier, la détection du bas du corps, etc.
Insérez la description de l'image ici
Il existe deux référentiels de code dans OpenCV.

Données 1 : opencv / data / cascades
Insérez la description de l'image ici
Données 2 : opencv_contrib / modules / face / data / cascades
Insérez la description de l'image ici

Comment utiliser le classificateur en cascade

En FaceCascade模型entrant dans l'image, nous pouvons obtenir la position rectangulaire de la zone où se trouve le visage.
Insérez la description de l'image ici
La méthode d'utilisation du modèle est relativement simple. Commencez par charger le HaarCascadefichier correspondant . Le format de fichier est xml. Pour votre commodité, j'ai téléchargé le fichier dans le dossier haar et je peux le référencer par un chemin relatif.

├── FaceDetection-v1.py
├── FaceDetection-v2.py
├── face.mp4
├── face.png
├── haar
    ├── haarcascade_eye.xml
    └── haarcascade_frontalface_default.xml

Insérez la description de l'image ici
On CascadeClassifierpasse le HaarCascadefichier correspondant dans

# 载入人脸检测的Cascade模型
FaceCascade = cv2.CascadeClassifier('./haar/haarcascade_frontalface_default.xml')

Contribution

L'étape suivante consiste à y passer l'image en niveaux de gris de l'image FaceCascade模型pour la détection de visage.

# 检测画面中的人脸
faces = FaceCascade.detectMultiScale(gray)


Les faces renvoyées par Output sont le tableau ROI de la région où se trouve la face, par exemple:

[(x1, y1, w1, h1), (x2, y2, w2, h2)]

Bien entendu, vous pouvez définir différents paramètres, tels que la définition du facteur de mise à l'échelle et la définition du seuil minimal du voisin.

# 检测画面中的人脸
faces = FaceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5
) 

Pour la signification et l'utilisation spécifiques des paramètres, veuillez vous référer à la documentation officielle de l'API d'OpenCV:

Document officiel OpenCV: Le nom complet de cascadeclassifier-detectmultiscale
Insérez la description de l'image ici
ROI est Region Of Interestutilisé pour indiquer la sous-zone de l'écran. L'origine (0,0)de l'image entière se trouve dans le coin supérieur gauche de l'image entière. ROIIl s'agit essentiellement de Tuple类型données, qui (x,y)représentent les coordonnées du coin supérieur gauche de la zone rectangulaire se trouve le visage, wreprésentent la largeur hdu rectangle et représentent la hauteur du rectangle.

Démonstration de l'effet de la détection de visage

Détection de visage-V1

Lisez l'image de l'image, reconnaissez le visage et identifiez la zone rectangulaire où se trouve le visage sur l'image.
Insérez la description de l'image ici

Détection de visage-V2

Dans la démonstration de l'effet de la reconnaissance faciale v2, deux modèles HaarCascade sont utilisés, l'un pour reconnaître les visages et l'autre pour reconnaître les yeux .
Insérez la description de l'image ici

Explication du déroulement du programme

Il y a trois modules de base dans le code de reconnaissance de visage v1: partie HighGUI informatique supérieure , Dessiner module de dessin , CascadeClassifier classificateur cascade .

Le déroulement général du programme est le suivant:
Insérez la description de l'image ici

  1. HighGUI lit les images et les convertit en niveaux de gris
  2. CascadeClassifier charge le fichier de modèle en cascade (xml) pour la détection de visage
  3. CascadeClassifier utilise le modèle pour détecter les visages dans les images en niveaux de gris et renvoie les visages
  4. Dessiner traverse les faces et dessine la zone rectangulaire du visage sur l'image couleur
  5. HighGUI crée une fenêtre appelée Face
  6. HighGUI affiche l'image dans la fenêtre Face (après avoir dessiné la zone rectangulaire du visage)
  7. HighGUI attend toute pression sur une touche
  8. HighGUI quitte le programme et ferme toutes les fenêtres

FaceDetection-v1.py

# -*- coding:utf-8 -*-
'''
人脸识别FaceDetection
通过HaarCascade模型,进行人脸识别与眼睛识别,在视频流中绘制矩形,标识人脸
'''
import cv2

# 设置图片路径
img_path = 'face.png'
# 载入带有人脸的图片
img = cv2.imread(img_path)
if img is None:
    # 判断图片是否读入正确
    print("ERROR:请检查图片路径")
    exit(1)
# 将彩色图片转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# 载入人脸检测的Cascade模型
FaceCascade = cv2.CascadeClassifier('./haar/haarcascade_frontalface_default.xml')

# 检测画面中的人脸
faces = FaceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5
)

# 遍历返回的face数组
for face in faces:
    # 解析tuple类型的face位置数据
    # (x, y): 左上角坐标值
    # w: 人脸矩形区域的宽度
    # h: 人脸矩形区域的高度
    (x, y, w, h) = face
    # 在原彩图上绘制矩形
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 4)

# 创建一个窗口 名字叫做Face
cv2.namedWindow('Face',flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED)

# 在窗口Face上面展示图片img
cv2.imshow('Face', img)
# 等待任意按键按下
cv2.waitKey(0)
# 关闭所有的窗口
cv2.destroyAllWindows()

Comment améliorer la vitesse de reconnaissance faciale?

**

  1. Réduisez la plage de recherche et regardez autour du rectangle où se trouve la face de l'image précédente.
  2. Zoomez, recherchez à basse résolution, puis identifiez progressivement la position.

Je suppose que tu aimes

Origine blog.csdn.net/ywsydwsbn/article/details/107714830
conseillé
Classement