Stap 7: Start de opname van de video
Nu, is het de tijd om te beginnen met opnemen van video.
Dit codefragment maakt ook gebruik van enkele basisfuncties van OpenCV bibliotheek. Hier initialiseren we de ingebouwde camera en start de opname van de video. Voor elk frame opgenomen door de camera, deze code verandert van kleur om in grijswaarden en verzendt deze aanvraag naar twee functies die ik noem in de volgende twee stappen.
1. detect_faces
2. post_on_facebook
De eerste functie geeft als resultaat een naam als het herkent gezichten in het grijs-schaal-frames dat is verzonden en een matrix met waarden van omsluitende kaders. We nemen deze array van de omsluitende kaders en tekent u een rechthoek rond de erkende gezicht en print certificaathouder / naam van je vriend(in).
Nadat u hebt bevestigd dat er een indringer aanval is, stuurt dit codefragment een verzoek naar de tweede functie 'post_on_facebook' naar een update plaatsen op sociale media.
Dus, zullen we zien hoe deze twee functies in de volgende stappen werken.
Code
Opmerking: Deze code is een klein deel van de voltooide code en individueel niet werkt. Ik heb het gebruikt hier om uit te leggen van de 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()