Skip to content

Commit 18b776e

Browse files
authored
FaceMask Detector
1 parent c75d47a commit 18b776e

File tree

4 files changed

+33463
-0
lines changed

4 files changed

+33463
-0
lines changed

facemask.py

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import numpy as np
2+
import keras
3+
import keras.backend as k
4+
from keras.layers import Conv2D,MaxPooling2D,SpatialDropout2D,Flatten,Dropout,Dense
5+
from keras.models import Sequential,load_model
6+
from keras.optimizers import Adam
7+
from keras.preprocessing import image
8+
import cv2
9+
import datetime
10+
11+
12+
# UNCOMMENT THE FOLLOWING CODE TO TRAIN THE CNN FROM SCRATCH
13+
14+
# BUILDING MODEL TO CLASSIFY BETWEEN MASK AND NO MASK
15+
16+
model=Sequential()
17+
model.add(Conv2D(32,(3,3),activation='relu',input_shape=(150,150,3)))
18+
model.add(MaxPooling2D() )
19+
model.add(Conv2D(32,(3,3),activation='relu'))
20+
model.add(MaxPooling2D() )
21+
model.add(Conv2D(32,(3,3),activation='relu'))
22+
model.add(MaxPooling2D() )
23+
model.add(Flatten())
24+
model.add(Dense(100,activation='relu'))
25+
model.add(Dense(1,activation='sigmoid'))
26+
27+
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
28+
29+
from keras.preprocessing.image import ImageDataGenerator
30+
train_datagen = ImageDataGenerator(
31+
rescale=1./255,
32+
shear_range=0.2,
33+
zoom_range=0.2,
34+
horizontal_flip=True)
35+
36+
test_datagen = ImageDataGenerator(rescale=1./255)
37+
38+
training_set = train_datagen.flow_from_directory(
39+
'train',
40+
target_size=(150,150),
41+
batch_size=16 ,
42+
class_mode='binary')
43+
44+
test_set = test_datagen.flow_from_directory(
45+
'test',
46+
target_size=(150,150),
47+
batch_size=16,
48+
class_mode='binary')
49+
50+
model_saved=model.fit_generator(
51+
training_set,
52+
epochs=10,
53+
validation_data=test_set,
54+
55+
)
56+
57+
model.save('mymodel.h5',model_saved)
58+
59+
#To test for individual images
60+
61+
mymodel=load_model('mymodel.h5')
62+
#test_image=image.load_img('C:/Users/Karan/Desktop/ML Datasets/Face Mask Detection/Dataset/test/without_mask/30.jpg',target_size=(150,150,3))
63+
test_image=image.load_img(r'C:/Users/karan/Desktop/FaceMaskDetector/test/with_mask/1-with-mask.jpg',
64+
target_size=(150,150,3))
65+
test_image
66+
test_image=image.img_to_array(test_image)
67+
test_image=np.expand_dims(test_image,axis=0)
68+
mymodel.predict(test_image)[0][0]
69+
70+
71+
# IMPLEMENTING LIVE DETECTION OF FACE MASK
72+
73+
mymodel=load_model('mymodel.h5')
74+
75+
cap=cv2.VideoCapture(0)
76+
face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
77+
78+
while cap.isOpened():
79+
_,img=cap.read()
80+
face=face_cascade.detectMultiScale(img,scaleFactor=1.1,minNeighbors=4)
81+
for(x,y,w,h) in face:
82+
face_img = img[y:y+h, x:x+w]
83+
cv2.imwrite('temp.jpg',face_img)
84+
test_image=image.load_img('temp.jpg',target_size=(150,150,3))
85+
test_image=image.img_to_array(test_image)
86+
test_image=np.expand_dims(test_image,axis=0)
87+
pred=mymodel.predict(test_image)[0][0]
88+
if pred==1:
89+
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),3)
90+
cv2.putText(img,'NO MASK',((x+w)//2,y+h+20),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),3)
91+
else:
92+
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
93+
cv2.putText(img,'MASK',((x+w)//2,y+h+20),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),3)
94+
datet=str(datetime.datetime.now())
95+
cv2.putText(img,datet,(400,450),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255),1)
96+
97+
cv2.imshow('img',img)
98+
99+
if cv2.waitKey(1)==ord('q'):
100+
break
101+
102+
cap.release()
103+
cv2.destroyAllWindows()

0 commit comments

Comments
 (0)