J'ai essayé la reconnaissance faciale en temps réel avec une webcam sur Jetson Nano.
Voyons d'abord comment obtenir l'image avec la caméra Web. C'était vraiment facile.
camTest.py
import cv2
#Lancer la caméra
capture = cv2.VideoCapture(0)
while(True):
#Obtenez 1 image de cadre
ret, frame = capture.read()
#Afficher l'image dans la fenêtre
cv2.imshow("frame", frame)
#Arrêter lorsque q est enfoncé
if cv2.waitKey(1) & 0xFF == ord('q'):
break
#Libération
capture.release()
cv2.destroyAllWindows()
Il s'arrête lorsque j'appuie sur q
, mais cela ne fonctionne pas correctement à moins que je n'appuie dessus avec le focus sur la fenêtre au lieu du terminal.
Lorsque vous installez OpenCV, le fichier du classificateur en cascade est inclus, alors utilisez-le. (https://github.com/opencv/opencv/tree/master/data/haarcascades)
La procédure de reconnaissance faciale est la suivante
find_face.py
# -*- coding: utf-8 -*-
import time
import cv2
#Taille du cadre (plus grande rend le traitement plus lourd)
FRAME_W = 320
FRAME_H = 240
#Classificateur en cascade pour la détection de visage (probablement un fichier qui résume les fonctionnalités)
#J'ai eu une erreur lorsque j'ai essayé de lire quelque chose qui se trouvait dans un autre dossier, alors je l'ai copié dans le même dossier
cascadeFilePath = './haarcascade_frontalface_default.xml'
cascade = cv2.CascadeClassifier(cascadeFilePath)
#Les paramètres de la caméra
cam = cv2.VideoCapture(0)
time.sleep(1) #En attente de démarrage (pour le moment)
cam.set(cv2.CAP_PROP_FPS, 60) #Je ne sais pas si c'était 60
cam.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_W)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_H)
while(True):
#Terminer par q
if cv2.waitKey(1) & 0xFF == ord('q'):
break
#Acquisition d'image
ret, frame = cam.read()
#Convertir en échelle de gris
gray_image = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
#Reconnaissance de visage
facerect = cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
#Le visage a-t-il été détecté?
if len(facerect) > 0:
#Couleur de la bordure
line_color = (255, 102, 51)
#Couleur du texte
font_color = (255, 102, 51)
#Écrivez un cadre et des caractères FACE sur le visage détecté
for (x, y, width, height) in facerect:
cv2.rectangle(frame, (x, y), (x + width, y + height), line_color, 2)
cv2.putText(frame, 'FACE', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, font_color, 1, cv2.LINE_AA)
#Afficher dans la fenêtre
cv2.imshow('frame', frame)
#Terminer le traitement
cam.release()
cv2.destroyAllWindows()
Reconnu en temps réel!
Recommended Posts