-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathface_data_collection.py
More file actions
73 lines (44 loc) · 1.38 KB
/
face_data_collection.py
File metadata and controls
73 lines (44 loc) · 1.38 KB
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
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
skip=0
face_data=[]
dataset_path='./data/'
file_name=input("Enter the name of the person :")
while True:
ret,frame=cap.read()
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
if ret==False:
continue
faces=face_cascade.detectMultiScale(gray,1.3,5)
if len(faces)==0:
continue
faces=sorted(faces,key=lambda f:f[2]*f[3])
# picking the last face which has largest area f[2]*f[3]
for face in faces[-1:]:
x,y,w,h=face
cv2.rectangle(frame,(x,y),((x+w),(y+h)),(0,255,255),2)
# extract(crop out the required face) :region of interest(ROI)
off_set=10
face_region=frame[y-off_set:y+h+off_set,x-off_set:x+w+off_set]
face_region=cv2.resize(face_region,(100,100))
skip+=1
# capturing every 10th frame
if skip%10==0:
face_data.append(face_region)
print(len(face_data))
cv2.imshow('frame',frame)
cv2.imshow('face section',face_region)
key_pressed=cv2.waitKey(1) & 0xFF
if key_pressed==ord('q'):
break
# convert our face list into numpy array
face_data=np.array(face_data)
face_data=face_data.reshape((face_data.shape[0],-1))
print(face_data.shape)
# save this data into file system
np.save(dataset_path+file_name+'.npy',face_data)
print("data saved sucessfully at "+dataset_path+file_name+'.npy')
cap.release()
cv2.destroyAllWindows()