Intruder/gäst varningssystemet (7 / 10 steg)
Steg 7: Börja spela in video
Nu är det dags att börja spela in video.
Denna kodsträng använder också vissa grundläggande funktioner för OpenCV library. Här kommer vi initiera den inbyggda kameran och börja spela in video. För varje ram registreras av kameran, koden ändras färgen till gråskala och skickar begäran till två funktioner som jag kommer att nämna i följande två steg.
1. detect_faces
2. post_on_facebook
Första funktionen returnerar ett namn om den känner igen alla ansikten i de gråskala ramar som skickas och en matris med värden av begränsningsramar. Vi kommer att ta den mängd begränsningsramar och rita en rektangel runt igenkända ansiktet och skriva ut motivets / väns namn.
När du har bekräftat att det finns en inkräktare attack, skickas denna kodsträng en begäran till den andra funktionen "post_on_facebook" att lägga en uppdatering på sociala medier.
Så kommer vi se hur dessa två funktioner fungerar i nästa steg.
Koden
Obs: Denna kod är en liten del av ifyllda koden och fungerar inte individuellt. Jag har använt det här för att förklara koden.
om __name__ == "__main__": < br > om len(sys.argv)! = 2:
skriva ut ("fel antal argument! Se behandling. \n")
skriva ut ("användning: face_detrec_video.py < fullpath till rotmappen bilder >")
sys.Exit()
arg_one = sys.argv[1]
eigen_model, folk = train_model(arg_one)
#starts inspelning video från kameran och upptäcker & förutsäga ämnen
Cap = cv2. VideoCapture(0)
räknare = 0
last_20 = [1 för jag i range(20)]
final_5 =]
box_text = "ämne:"
While(true):
ret, ram = cap.read()
gray_frame = cv2.cvtColor (ram, cv2. COLOR_BGR2GRAY)
gray_frame = cv2.equalizeHist(gray_frame)
bBoxes = detect_faces(gray_frame)
för centrera i bBoxes:
(p, q, r, s) = bBox
CV2.Rectangle (ram, (p, q), (p + r, q + s), (225,0,25), 2)
crop_gray_frame = gray_frame [d: d + s, 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:]
'''
räknaren modulo x: ändras värdet för slutliga etikett för varje x-ramar
Använd max_label eller predicted_label som du önskar att se i produktionen video.
Men bokföring på facebook alltid använda max_label som en parameter.
'''
om räknaren % 10 == 0:
max_label = majority(last_20)
#box_text = format ("ämne:" + people[max_label])
box_text = format ("ämne:" + people[predicted_label])
om counter > 20:
skriva ut ("kommer att publicera på facebook tidslinje om räknaren når till 5:" + str(len(final_5) + 1))
alltid tar max_label hänsyn till final_5.append(max_label) #it
om len(final_5) == 5:
final_label = majority(final_5)
skriva ut ("inkräktare är" + people[final_label])
skriva ut ("inlägg på din facebook tidslinjen...")
post_on_facebook(People[final_label])
final_5 =]
CV2.putText (ram, box_text, (p-20, q-5), cv2. FONT_HERSHEY_PLAIN, 1.3, (25,0,225), 2)
CV2.imshow ("Video fönster", ram)
räknaren += 1
om (cv2.waitKey(5) & 0xFF == 27):
Break
CV2.destroyAllWindows()