Dans ce didacticiel, nous allons rapidement expliquer comment détecter l’âge et le sexe d’un visage à l’aide d’OpenCV. En vision par ordinateur, détecter un visage est une tâche très importante. Dans le passé, détecter un visage demandait beaucoup de temps et d’efforts, mais aujourd’hui, nous avons des modèles pré-formés qui peuvent le faire en quelques secondes. Nous utiliserons un modèle pré-formé dans la bibliothèque OpenCV pour détecter un visage et renvoyer une étiquette de vérité terrain. C’est un modèle assez simple, mais c’est un bon point de départ pour les débutants.

Modules requis :

OpenCV : C’est un outil spécialisé dans les domaines du traitement d’images, de l’analyse vidéo ou de la vision par ordinateur. OpenCV peut être utilisé pour aider les développeurs à résoudre de nombreux problèmes dans votre domaine lorsqu’il s’agit d’analyser des images et des vidéos à l’aide d’algorithmes numériques sophistiqués. Le module propose des techniques qui sont généralement appliquées lors de la reconnaissance de visages par exemple. Après avoir pris des images ou des vidéos comme données d’entrée, le module exécute des filtres qui les convertissent en valeurs booléennes afin que les caractéristiques puissent être reconnues grâce à des fonctions de comparaison étant donné qu’elles partagent des caractéristiques similaires. Donc, si vous cherchez une alternative qui vous aide dans ce genre de tâche, alors OpenCV est une option à considérer !

Le module peut être installé à l’aide de la commande dans votre invite de commande/terminal :

pip3 install opencv-python

Fichiers de modèle requis :

Pour détecter l’âge et le sexe d’un visage à l’aide d’OpenCV, il faut un modèle pré-formé ou un ensemble d’images contenant un grand nombre de visages masculins et féminins d’âges différents. Dans ce processus, nous utiliserons quelques modèles simples. Tous ces modèles ne sont pas très précis mais nous pouvons les utiliser pour le tutoriel.

  1. Age_deploy.prototxt
  2. Age_net.caffemodel
  3. Gender_deploy.prototxt
  4. Gender_net.caffemodel
  5. Opencv_face_detector.pbtxt
  6. Opencv_face_detector_uint8.pb

Code:

Après avoir suivi les étapes ci-dessus, nous pouvons commencer à écrire le code ici, écrire nos parties de code simultanément et discuter en détail du travail que nous faisons sur chaque ligne avant de continuer.

#importing the opencv module
import cv2


# defining a function to create a blob  (blob is the binary long object classification )
def faceBox(faceNet,frame):
    frameHeight=frame.shape[0]
    frameWidth=frame.shape[1]
     #(dnn is the deep neural network it will only work in the latest version of opencv if you are using a version below 3.2 then you won't able to access the dnn in opencv library )
    blob=cv2.dnn.blobFromImage(frame, 1.0, (300,300), [104,117,123], swapRB=False) #inside this dnn present two functionality first one is a blobformimage and the blobformimages
    #setting the import in our blob
    faceNet.setInput(blob)
    #putting the blob into forward method
    detection=faceNet.forward()
    bboxs=[]
    #adding the bounding box
    for i in range(detection.shape[2]):
        confidence=detection[0,0,i,2]
        if confidence>0.7:
            x1=int(detection[0,0,i,3]*frameWidth)
            y1=int(detection[0,0,i,4]*frameHeight)
            x2=int(detection[0,0,i,5]*frameWidth)
            y2=int(detection[0,0,i,6]*frameHeight)
            bboxs.append([x1,y1,x2,y2])
            #creating the rectangle that will show around our face
            cv2.rectangle(frame, (x1,y1),(x2,y2),(0,255,0), 2)
    return frame, bboxs


#added the facemodel and faceproto here with the path of the file
faceProto = "opencv_face_detector.pbtxt"
faceModel = "opencv_face_detector_uint8.pb"

#added the ageProto and ageModel here with the path of the file
ageProto = "age_deploy.prototxt"
ageModel = "age_net.caffemodel"

#added the genderProto and genderModel here with the path of the file
genderProto = "gender_deploy.prototxt"
genderModel = "gender_net.caffemodel"

#you can find the models in the source file that you can download at the end of the article




#we created the variable for the detecting our face
faceNet=cv2.dnn.readNet(faceModel, faceProto)
#we created the variable for the detecting our age
ageNet=cv2.dnn.readNet(ageModel,ageProto)
#we created the variable for the detecting our gender
genderNet=cv2.dnn.readNet(genderModel,genderProto)

#adding the mean value
MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
#adding the age list range you can collected this age list from google image
ageList = [ '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList = ['Male', 'Female']

#Here we created a video capture object and inside the parameter, it takes an argument so here we used 0 because we are using a laptop camera.
video=cv2.VideoCapture(0)

padding=20

#we created a final window look
while True:
    ret,frame=video.read()
    frame,bboxs=faceBox(faceNet,frame)
    #creating bounding boxs and getting results
    #and loop through all the values from here
    for bbox in bboxs:
        #extracting face from here
        #bbox 1-3 will give us the width and bbox 0-2 will give us height and finally give us the face
        face = frame[max(0,bbox[1]-padding):min(bbox[3]+padding,frame.shape[0]-1),max(0,bbox[0]-padding):min(bbox[2]+padding, frame.shape[1]-1)]
        #now we need to pop the phase from our blob
        blob=cv2.dnn.blobFromImage(face, 1.0, (227,227), MODEL_MEAN_VALUES, swapRB=False)

        genderNet.setInput(blob)
        genderPred=genderNet.forward()
        gender=genderList[genderPred[0].argmax()]

        ageNet.setInput(blob)
        agePred=ageNet.forward()
        age=ageList[agePred[0].argmax()]
        #argmax is for the maximum value

        label="{},{}".format(gender,age)
        cv2.rectangle(frame,(bbox[0], bbox[1]-30), (bbox[2], bbox[1]), (0,255,0),-1)
        #adding the text for showing age and gender
        cv2.putText(frame, label, (bbox[0], bbox[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,0,255), 1,cv2.LINE_AA)

    #add window name here
    cv2.imshow("age and gender detection",frame)
    k=cv2.waitKey(1)
    if k==ord('q'):
        break
video.release()
cv2.destroyAllWindows()

Sortir:

Une fois que vous êtes sûr que votre code est correct, il est temps de l’exécuter. Avant de faire cela, assurez-vous que votre webcam est branchée, puis appuyez sur Entrée ou exécutez ce code. Vous devriez voir un rectangle autour de votre visage avec les résultats dans le coin supérieur droit de l’écran indiquant votre sexe et votre âge approximatif en mots basés sur ce qui a été décidé par la machine. Les résultats ne sont pas tout à fait exacts, mais vous obtenez l’essentiel du fonctionnement de ce processus !

Le mot de la fin

OpenCV (Open Source Computer Vision) est un excellent package qui peut aider n’importe qui à démarrer avec des tâches de vision par ordinateur. Il contient une large gamme d’outils que vous pouvez utiliser pour effectuer des tâches telles que la segmentation d’images, la détection de mouvement et la reconnaissance faciale. Dans ce didacticiel, nous avons expliqué comment détecter l’âge et le sexe d’un visage à l’aide d’OpenCV. Nous avons examiné comment utiliser les modèles pré-formés OpenCV pour détecter les visages et comment utiliser les données renvoyées sur le visage pour déterminer l’âge et le sexe du visage. Les modèles OpenCV que nous avons utilisés sont très basiques et peu précis, mais ils constituent un bon point de départ pour les débutants qui débutent avec la vision par ordinateur. Faites-nous savoir si vous avez des questions/commentaires concernant ce processus. Bon codage !

Voici quelques tutoriels utiles que vous pouvez lire :