-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstreming.py
103 lines (88 loc) · 3.46 KB
/
streming.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from flask import Flask, Response
from threading import Thread
import cv2
import os
import csv
import time
from datetime import datetime
from sklearn.neighbors import KNeighborsClassifier
from win32com.client import Dispatch
import pickle
import numpy as np
app = Flask(__name__)
camera = cv2.VideoCapture(0)
def generate_frames():
while True:
success, frame = camera.read()
if not success:
break
else:
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/')
def index():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
def run_flask_server():
app.run(host='0.0.0.0', port=5000, debug=False)
def speak(str1):
speak = Dispatch(("SAPI.SpVoice"))
speak.Speak(str1)
def face_recognition():
facedetect = cv2.CascadeClassifier('data/haarcascade_frontalface_default.xml')
with open('data/names.pkl', 'rb') as w:
LABELS = pickle.load(w)
with open('data/faces_data.pkl', 'rb') as f:
FACES = pickle.load(f)
print('Shape of Faces matrix --> ', FACES.shape)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(FACES, LABELS)
imgBackground = cv2.imread("background.png")
COL_NAMES = ['NAME', 'TIME']
while True:
ret, frame = camera.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = facedetect.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
crop_img = frame[y:y+h, x:x+w, :]
resized_img = cv2.resize(crop_img, (50,50)).flatten().reshape(1,-1)
output = knn.predict(resized_img)
ts = time.time()
date = datetime.fromtimestamp(ts).strftime("%d-%m-%Y")
timestamp = datetime.fromtimestamp(ts).strftime("%H:%M-%S")
exist = os.path.isfile("Recognize/Recognize_" + date + ".csv")
cv2.rectangle(frame, (x,y), (x+w, y+h), (0,0,255), 1)
cv2.rectangle(frame, (x,y), (x+w,y+h), (50,50,255), 2)
cv2.rectangle(frame, (x,y-40), (x+w,y), (50,50,255), -1)
cv2.putText(frame, str(output[0]), (x,y-15), cv2.FONT_HERSHEY_COMPLEX, 1, (255,255,255), 1)
cv2.rectangle(frame, (x,y), (x+w, y+h), (50,50,255), 1)
attendance = [str(output[0]), str(timestamp)]
imgBackground[162:162 + 480, 55:55 + 640] = frame
cv2.imshow("Frame",imgBackground)
k = cv2.waitKey(1)
if k == ord('o'):
time.sleep(5)
if exist:
speak("Person Recognized..")
with open("Recognize/Recognize_" + date + ".csv", "+a") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(attendance)
csvfile.close()
else:
speak("Intruder Alert initiating weapon system")
with open("Recognize/Recognize_" + date + ".csv", "+a") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(COL_NAMES)
writer.writerow(attendance)
csvfile.close()
if k == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
flask_thread = Thread(target=run_flask_server)
flask_thread.daemon = True
flask_thread.start()
# Run face recognition in the main thread
face_recognition()