Une étude préliminaire de la détection de visage en python
- Types de détection de visage
- Application de la détection de visage dans la vie
- Détection de visage et reconnaissance de visage
- Comment utiliser OpenCV pour la détection de visage
- Démonstration de l'effet de la détection de visage
- Explication du déroulement du programme
- Comment améliorer la vitesse de reconnaissance faciale?
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.
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:
- 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.
- 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.
- 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.
- Libre-service: comme l'authentification par nom réel en libre-service, l'ouverture de compte à distance en libre-service, etc.
- 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
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:
-
Où est le visage? Détection de visage (processus de localisation de la zone du visage dans l'image)
-
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.
Il existe deux référentiels de code dans OpenCV.
Données 1 : opencv / data / cascades
Données 2 : opencv_contrib / modules / face / data / cascades
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.
La méthode d'utilisation du modèle est relativement simple. Commencez par charger le HaarCascade
fichier 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
On CascadeClassifier
passe le HaarCascade
fichier 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
ROI
est Region Of Interest
utilisé 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. ROI
Il s'agit essentiellement de Tuple类型
données, qui (x,y)
représentent les coordonnées du coin supérieur gauche de la zone rectangulaire où se trouve le visage, w
représentent la largeur h
du 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.
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 .
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:
- HighGUI lit les images et les convertit en niveaux de gris
- CascadeClassifier charge le fichier de modèle en cascade (xml) pour la détection de visage
- CascadeClassifier utilise le modèle pour détecter les visages dans les images en niveaux de gris et renvoie les visages
- Dessiner traverse les faces et dessine la zone rectangulaire du visage sur l'image couleur
- HighGUI crée une fenêtre appelée Face
- HighGUI affiche l'image dans la fenêtre Face (après avoir dessiné la zone rectangulaire du visage)
- HighGUI attend toute pression sur une touche
- 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?
**
- Réduisez la plage de recherche et regardez autour du rectangle où se trouve la face de l'image précédente.
- Zoomez, recherchez à basse résolution, puis identifiez progressivement la position.