Paso 7: Iniciar la grabación del video
Ahora, es el momento de empezar la grabación de vídeo.
Este fragmento de código también utiliza algunas funciones básicas de la biblioteca OpenCV. Aquí se inicializar la cámara incorporada e inicie la grabación del video. Para cada fotograma grabado por la cámara, este código cambia su color a escala de grises y envía la solicitud a dos funciones que menciono en los siguientes dos pasos.
1. detect_faces
2. post_on_facebook
La primera función devolverá un nombre si reconoce cualquier caras en los marcos de escala de grises enviados y una matriz de valores de los cuadros delimitadores. Tomaremos esa matriz de cuadros delimitadores y dibuje un rectángulo alrededor de la cara reconocida y la impresión del sujeto / nombre de su amigo.
Después de confirmar que hay un ataque de intruso, este fragmento de código envía una solicitud a la segunda función 'post_on_facebook' para publicar una actualización en los medios sociales.
Así, veremos cómo estas dos funciones trabajan en próximos pasos.
Código
Nota: Este código es una pequeña parte del código terminado y no funciona individualmente. Lo he utilizado aquí para explicar el código.
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()