Étape 7: Démarrer l’enregistrement de la vidéo
Maintenant, c’est le moment de commencer l’enregistrement vidéo.
Cet extrait de code utilise également quelques fonctions de base de la bibliothèque OpenCV. Ici nous initialisera l’appareil photo intégré et commencer à enregistrer de la vidéo. Pour toutes les images enregistrées par la caméra, ce code change de couleur en niveaux de gris et envoie la demande à deux fonctions dont je citerai dans les deux étapes suivantes.
1. detect_faces
2. post_on_facebook
La première fonction retournera un nom si elle reconnaît toutes les faces dans les gris de trames envoyées et un tableau de valeurs des boîtes englobantes. Nous allons prendre ce tableau d’englobants et dessinez un rectangle autour du visage reconnu et du sujet impression / nom de l’ami.
Après avoir confirmé qu’il y a une attaque de l’intrus, cet extrait de code a envoie une requête à la deuxième fonction « post_on_facebook » de publier une mise à jour sur les médias sociaux.
Donc, nous allons voir comment ces deux fonctions fonctionnent dans les prochaines étapes.
Code
Remarque : Ce code est une petite partie du code terminé et ne fonctionne pas individuellement. J’ai utilisé ici pour expliquer le code.
if __name__== "__main__":<br> if len(sys.argv)!= 2: print("Wrong number of arguments! See the usage.\n") print("Usage: face_detrec_video.py <fullpath to root images folder>") sys.exit() arg_one= sys.argv[1] eigen_model, people= train_model(arg_one) #starts recording video from camera and detects & predict subjects cap= cv2.VideoCapture(0) counter= 0 last_20= [1 for i in range(20)] final_5= [] box_text= "Subject: " while(True): ret, frame= cap.read() gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray_frame = cv2.equalizeHist(gray_frame) bBoxes= detect_faces(gray_frame) for bBox in bBoxes: (p,q,r,s)= bBox cv2.rectangle(frame, (p,q), (p+r,q+s), (225,0,25), 2) crop_gray_frame= gray_frame[q:q+s, p:p+r] crop_gray_frame= cv2.resize(crop_gray_frame, (256, 256)) [predicted_label, predicted_conf]= eigen_model.predict(np.asarray(crop_gray_frame)) last_20.append(predicted_label) last_20= last_20[1:] ''' counter modulo x: changes value of final label for every x frames Use max_label or predicted_label as you wish to see in the output video. But, posting on facebook always use max_label as a parameter. ''' if counter%10== 0: max_label= majority(last_20) #box_text= format("Subject: "+ people[max_label]) box_text= format("Subject: "+ people[predicted_label]) if counter> 20: print("Will post on facebook timeline if this counter reaches to 5: "+ str(len(final_5)+ 1)) final_5.append(max_label) #it always takes max_label into consideration if len(final_5)== 5: final_label= majority(final_5) print("Intruder is "+ people[final_label]) print("Posting on your facebook timeline...") post_on_facebook(people[final_label]) final_5= [] cv2.putText(frame, box_text, (p-20, q-5), cv2.FONT_HERSHEY_PLAIN, 1.3, (25,0,225), 2) cv2.imshow("Video Window", frame) counter+= 1 if (cv2.waitKey(5) & 0xFF== 27): break cv2.destroyAllWindows()