dinhminh20521597 commited on
Commit
d6a7d5a
·
1 Parent(s): 2366fef

Upload 8 files

Browse files
Files changed (8) hide show
  1. README.md +21 -12
  2. app.py +278 -0
  3. configs/fasterrcnn.py +247 -0
  4. configs/yolov3.py +210 -0
  5. demo_page-0001.jpg +0 -0
  6. environment.yml +227 -0
  7. generate.py +182 -0
  8. models/dump.txt +0 -0
README.md CHANGED
@@ -1,12 +1,21 @@
1
- ---
2
- title: Face Mask Detection
3
- emoji: 🐨
4
- colorFrom: green
5
- colorTo: gray
6
- sdk: streamlit
7
- sdk_version: 1.28.2
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
1
+ <!-- Title -->
2
+ <h1 align="center"><b>Newspaper Crawling with Scrapy</b></h1>
3
+
4
+ ## Set up environment
5
+
6
+ ```
7
+ conda env create -f environment.yml
8
+ conda activate demo-mm-st
9
+ ```
10
+
11
+ ## Streamlit demo
12
+
13
+ To run streamlit demo, you need to download weights files [Faster-RCNN](https://github.com/laichithien/FaceMaskDetection_StreamlitDemo/releases/download/FaceMaskDetModels/fasterrcnn.pth), [YOLOv3](https://github.com/laichithien/FaceMaskDetection_StreamlitDemo/releases/download/FaceMaskDetModels/yolov3.pth) and place them in `models` folder
14
+ After that, simply run command below
15
+ ```
16
+ streamlit run demo.py
17
+ ```
18
+ ## Demo interface
19
+ ![](demo_page-0001.jpg)
20
+
21
+
app.py ADDED
@@ -0,0 +1,278 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import cv2
3
+ import numpy as np
4
+ import requests
5
+ from mmdet.apis import init_detector, inference_detector
6
+ import mmcv
7
+ import torch
8
+ from mmdet.utils.contextmanagers import concurrent
9
+ from pprint import pprint
10
+ from PIL import Image
11
+ import datetime
12
+
13
+ def IoU(bbox1, bbox2):
14
+
15
+ x1_left = bbox1[0]
16
+ y1_top = bbox1[1]
17
+ x1_right = bbox1[2]
18
+ y1_bot = bbox1[3]
19
+
20
+ x2_left = bbox2[0]
21
+ y2_top = bbox2[1]
22
+ x2_right = bbox2[2]
23
+ y2_bot = bbox2[3]
24
+
25
+ x_left = max(x1_left, x2_left)
26
+ x_right = min(x1_right, x2_right)
27
+ y_top = max(y1_top, y2_top)
28
+ y_bot = min(y1_bot, y2_bot)
29
+
30
+ inter = (x_right - x_left) * (y_bot - y_top)
31
+ if x_right < x_left or y_bot < y_top:
32
+ return 0.0
33
+ area1 = (x1_right - x1_left) * (y1_bot - y1_top)
34
+ area2 = (x2_right - x2_left) * (y2_bot - y2_top)
35
+ union = area1 + area2 - inter
36
+
37
+ IoU = inter / union
38
+ return IoU
39
+
40
+ def file():
41
+ inputimg = st.file_uploader("Upload your image")
42
+ if inputimg is not None:
43
+ inputimg = Image.open(inputimg)
44
+ inputimg = np.array(inputimg)
45
+ inputimg = cv2.cvtColor(inputimg, cv2.COLOR_BGR2RGB)
46
+ cv2.imwrite('demo_file.jpg', inputimg)
47
+ return inputimg
48
+
49
+ def webcam():
50
+ inputimg = st.camera_input("Take a picture")
51
+ if inputimg is not None:
52
+ inputimg = Image.open(inputimg)
53
+ inputimg = np.array(inputimg)
54
+ inputimg = cv2.cvtColor(inputimg, cv2.COLOR_BGR2RGB)
55
+ cv2.imwrite('demo_webcam.jpg', inputimg)
56
+ return inputimg
57
+
58
+ def phonecam():
59
+ if st.button("Take picture"):
60
+ url = 'http://192.168.114.78:8080//photo.jpg'
61
+ img_resp = requests.get(url)
62
+ img_arr = np.array(bytearray(img_resp.content), dtype=np.uint8)
63
+ inputimg = cv2.imdecode(img_arr, -1)
64
+ cv2.imwrite('demo_phonecam.jpg', inputimg)
65
+ return inputimg
66
+
67
+
68
+ def detect(inputimg, model):
69
+
70
+ if model == 'f':
71
+ config_file = './configs/fasterrcnn.py'
72
+ checkpoint_file = './models/fasterrcnn.pth'
73
+ # Specify the path to model config and checkpoint file
74
+ else:
75
+ config_file = './configs/yolov3.py'
76
+ checkpoint_file = './models/yolov3.pth'
77
+
78
+ # build the model from a config file and a checkpoint file
79
+ model = init_detector(config_file, checkpoint_file, device='cuda:0')
80
+ if (inputimg == 'Webcam'):
81
+ img = 'demo_webcam.jpg' # or img = mmcv.imread(img), which will only load it once
82
+ elif (inputimg == 'File'):
83
+ img = 'demo_file.jpg'
84
+ elif (inputimg == 'Phone'):
85
+ img = 'demo_phonecam.jpg'
86
+ start = datetime.datetime.now()
87
+ result = inference_detector(model, img)
88
+ end = datetime.datetime.now()
89
+
90
+ time = end - start
91
+
92
+ time_mcs = time.microseconds
93
+
94
+ total_people = 0
95
+ incorrect = 0
96
+ withmask = 0
97
+ withoutmask = 0
98
+
99
+ list_objects = []
100
+ isRemove = []
101
+ for i in result[1]:
102
+ temp = i
103
+ temp = np.append(temp, 1)
104
+ list_objects.append(temp)
105
+ isRemove.append(0)
106
+
107
+ for i in result[2]:
108
+ temp = i
109
+ temp = np.append(temp, 2)
110
+ list_objects.append(temp)
111
+ isRemove.append(0)
112
+
113
+ for i in result[3]:
114
+ temp = i
115
+ temp = np.append(temp, 3)
116
+ list_objects.append(temp)
117
+ isRemove.append(0)
118
+
119
+ for i in range(len(list_objects) - 1):
120
+ for j in range(i + 1, len(list_objects)):
121
+ bbox1 = [list_objects[i][0], list_objects[i][1], list_objects[i][2], list_objects[i][3]]
122
+ bbox2 = [list_objects[j][0], list_objects[j][1], list_objects[j][2], list_objects[j][3]]
123
+ if abs(IoU(bbox1, bbox2)) > 0.7:
124
+ if list_objects[i][4] > list_objects[j][4]:
125
+ isRemove[j] = 1
126
+ else:
127
+ isRemove[i] = 1
128
+ # print("IoU", abs(IoU(bbox1, bbox2)))
129
+
130
+
131
+ if list_objects[i][4] < 0.4:
132
+ isRemove[i] = 1
133
+ if list_objects[j][4] < 0.4:
134
+ isRemove[j] = 1
135
+
136
+ selected_list = []
137
+ for i in range(len(list_objects)):
138
+ if isRemove[i] == 0:
139
+ selected_list.append(list_objects[i])
140
+
141
+ for i in selected_list:
142
+ if i[5] == 1:
143
+ incorrect += 1
144
+ elif i[5] == 2:
145
+ withmask += 1
146
+ elif i[5] ==3:
147
+ withoutmask += 1
148
+
149
+ total_people += incorrect + withmask + withoutmask
150
+
151
+
152
+ img = cv2.imread(img)
153
+ for i in selected_list:
154
+ if i[5] == 1:
155
+ color = (255, 0, 0)
156
+ text = "Mask weared incorrect"
157
+ elif i[5] == 2:
158
+ color = (0, 255, 0)
159
+ text = "With mask"
160
+ elif i[5] == 3:
161
+ color = (0, 0, 255)
162
+ text = "Without mask"
163
+ text += ": " + str(round(i[4], 2))
164
+ x1 = i[0]
165
+ y1 = i[1]
166
+ x2 = i[2] - 1
167
+ y2 = i[3] - 1
168
+
169
+ x1 = round(x1)
170
+ y1 = round(y1)
171
+ x2 = round(x2)
172
+ y2 = round(y2)
173
+
174
+ img = cv2.rectangle(img, (x1, y1), (x2, y2), color, 3)
175
+ img = cv2.putText(img, text, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2)
176
+ output ="result_demo.jpg"
177
+ return img, total_people, incorrect, withmask, withoutmask, time_mcs/1000
178
+
179
+ st.title("Demo đồ án môn học CS331 - Thị giác máy tính nâng cao")
180
+
181
+ st.write("Lại Chí Thiện - 20520309")
182
+ st.write("Lê Thị Phương Vy - 20520355")
183
+
184
+ file_page, webcam_page, phonecam_page = st.tabs(["File", "Webcam", "Phone's camera"])
185
+
186
+ with file_page:
187
+ inputimg_file = file()
188
+ if inputimg_file is not None:
189
+ st.image(cv2.cvtColor(inputimg_file, cv2.COLOR_BGR2RGB))
190
+ frcnn, yolov3 = st.columns(2)
191
+ with frcnn:
192
+ result_rcnn, total, inc, withm, withoutm, time = detect('File', 'f')
193
+ st.image(cv2.cvtColor(result_rcnn, cv2.COLOR_BGR2RGB))
194
+ st.write("Faster R-CNN")
195
+ st.write("Tổng số người có trong bức ảnh: ", total)
196
+ st.write("Tổng số người không đeo khẩu trang: ", withoutm)
197
+ st.write("Tổng số người đeo khẩu trang sai cách: ", inc)
198
+ st.write("Tổng số người đeo khẩu trang: ", withm)
199
+ st.write("Tỉ lệ số người không đeo khẩu trang: ", round(withoutm/total, 2))
200
+ st.write("Tỉ lệ số người đeo khẩu trang sai cách: ", round(inc/total, 2))
201
+ st.write("Tỉ lệ số người đeo khẩu trang: ", round(withm/total, 2))
202
+ st.write("Thời gian thực thi (miliseconds): ", time)
203
+ with yolov3:
204
+ result_yolov3, total, inc, withm, withoutm, time = detect('File', 'y')
205
+ st.image(cv2.cvtColor(result_yolov3, cv2.COLOR_BGR2RGB))
206
+ st.write("YOLOv3")
207
+ st.write("Tổng số người có trong bức ảnh: ", total)
208
+ st.write("Tổng số người không đeo khẩu trang: ", withoutm)
209
+ st.write("Tổng số người đeo khẩu trang sai cách: ", inc)
210
+ st.write("Tổng số người đeo khẩu trang: ", withm)
211
+ st.write("Tỉ lệ số người không đeo khẩu trang: ", round(withoutm/total, 2))
212
+ st.write("Tỉ lệ số người đeo khẩu trang sai cách: ", round(inc/total, 2))
213
+ st.write("Tỉ lệ số người đeo khẩu trang: ", round(withm/total, 2))
214
+ st.write("Thời gian thực thi (miliseconds): ", time)
215
+
216
+ with webcam_page:
217
+ inputimg_wc = webcam()
218
+ if inputimg_wc is not None:
219
+ st.image(cv2.cvtColor(inputimg_wc, cv2.COLOR_BGR2RGB))
220
+ frcnn, yolov3 = st.columns(2)
221
+ with frcnn:
222
+ result_rcnn, total, inc, withm, withoutm, time = detect('Webcam', 'f')
223
+ st.image(cv2.cvtColor(result_rcnn, cv2.COLOR_BGR2RGB))
224
+ st.write("Faster R-CNN")
225
+ st.write("Tổng số người có trong bức ảnh: ", total)
226
+ st.write("Tổng số người không đeo khẩu trang: ", withoutm)
227
+ st.write("Tổng số người đeo khẩu trang sai cách: ", inc)
228
+ st.write("Tổng số người đeo khẩu trang: ", withm)
229
+ st.write("Tỉ lệ số người không đeo khẩu trang: ", round(withoutm/total, 2))
230
+ st.write("Tỉ lệ số người đeo khẩu trang sai cách: ", round(inc/total, 2))
231
+ st.write("Tỉ lệ số người đeo khẩu trang: ", round(withm/total, 2))
232
+ st.write("Thời gian thực thi (miliseconds): ", time)
233
+ with yolov3:
234
+ result_yolov3, total, inc, withm, withoutm, time = detect('Webcam', 'y')
235
+ st.image(cv2.cvtColor(result_yolov3, cv2.COLOR_BGR2RGB))
236
+ st.write("YOLOv3")
237
+ st.write("Tổng số người có trong bức ảnh: ", total)
238
+ st.write("Tổng số người không đeo khẩu trang: ", withoutm)
239
+ st.write("Tổng số người đeo khẩu trang sai cách: ", inc)
240
+ st.write("Tổng số người đeo khẩu trang: ", withm)
241
+ st.write("Tỉ lệ số người không đeo khẩu trang: ", round(withoutm/total, 2))
242
+ st.write("Tỉ lệ số người đeo khẩu trang sai cách: ", round(inc/total, 2))
243
+ st.write("Tỉ lệ số người đeo khẩu trang: ", round(withm/total, 2))
244
+ st.write("Thời gian thực thi (miliseconds): ", time)
245
+
246
+ with phonecam_page:
247
+ inputimg_pc = phonecam()
248
+ if inputimg_pc is not None:
249
+ st.image(cv2.cvtColor(inputimg_pc, cv2.COLOR_BGR2RGB))
250
+ frcnn, yolov3 = st.columns(2)
251
+ with frcnn:
252
+ result_rcnn, total, inc, withm, withoutm, time = detect('Phone', 'f')
253
+ st.image(cv2.cvtColor(result_rcnn, cv2.COLOR_BGR2RGB))
254
+ st.write("Faster R-CNN")
255
+ st.write("Tổng số người có trong bức ảnh: ", total)
256
+ st.write("Tổng số người không đeo khẩu trang: ", withoutm)
257
+ st.write("Tổng số người đeo khẩu trang sai cách: ", inc)
258
+ st.write("Tổng số người đeo khẩu trang: ", withm)
259
+ st.write("Tỉ lệ số người không đeo khẩu trang: ", round(withoutm/total, 2))
260
+ st.write("Tỉ lệ số người đeo khẩu trang sai cách: ", round(inc/total, 2))
261
+ st.write("Tỉ lệ số người đeo khẩu trang: ", round(withm/total, 2))
262
+ st.write("Thời gian thực thi (miliseconds): ", time)
263
+ with yolov3:
264
+ result_yolov3, total, inc, withm, withoutm, time = detect('Phone', 'y')
265
+ st.image(cv2.cvtColor(result_yolov3, cv2.COLOR_BGR2RGB))
266
+ st.write("YOLOv3")
267
+ st.write("Tổng số người có trong bức ảnh: ", total)
268
+ st.write("Tổng số người không đeo khẩu trang: ", withoutm)
269
+ st.write("Tổng số người đeo khẩu trang sai cách: ", inc)
270
+ st.write("Tổng số người đeo khẩu trang: ", withm)
271
+ st.write("Tỉ lệ số người không đeo khẩu trang: ", round(withoutm/total, 2))
272
+ st.write("Tỉ lệ số người đeo khẩu trang sai cách: ", round(inc/total, 2))
273
+ st.write("Tỉ lệ số người đeo khẩu trang: ", round(withm/total, 2))
274
+ st.write("Thời gian thực thi (miliseconds): ", time)
275
+
276
+
277
+
278
+
configs/fasterrcnn.py ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model = dict(
2
+ type='FasterRCNN',
3
+ backbone=dict(
4
+ type='ResNet',
5
+ depth=50,
6
+ num_stages=4,
7
+ out_indices=(0, 1, 2, 3),
8
+ frozen_stages=1,
9
+ norm_cfg=dict(type='BN', requires_grad=True),
10
+ norm_eval=True,
11
+ style='pytorch',
12
+ init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')),
13
+ neck=dict(
14
+ type='FPN',
15
+ in_channels=[256, 512, 1024, 2048],
16
+ out_channels=256,
17
+ num_outs=5),
18
+ rpn_head=dict(
19
+ type='RPNHead',
20
+ in_channels=256,
21
+ feat_channels=256,
22
+ anchor_generator=dict(
23
+ type='AnchorGenerator',
24
+ scales=[8],
25
+ ratios=[0.5, 1.0, 2.0],
26
+ strides=[4, 8, 16, 32, 64]),
27
+ bbox_coder=dict(
28
+ type='DeltaXYWHBBoxCoder',
29
+ target_means=[0.0, 0.0, 0.0, 0.0],
30
+ target_stds=[1.0, 1.0, 1.0, 1.0]),
31
+ loss_cls=dict(
32
+ type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
33
+ loss_bbox=dict(type='L1Loss', loss_weight=1.0)),
34
+ roi_head=dict(
35
+ type='StandardRoIHead',
36
+ bbox_roi_extractor=dict(
37
+ type='SingleRoIExtractor',
38
+ roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),
39
+ out_channels=256,
40
+ featmap_strides=[4, 8, 16, 32]),
41
+ bbox_head=dict(
42
+ type='Shared2FCBBoxHead',
43
+ in_channels=256,
44
+ fc_out_channels=1024,
45
+ roi_feat_size=7,
46
+ num_classes=4,
47
+ bbox_coder=dict(
48
+ type='DeltaXYWHBBoxCoder',
49
+ target_means=[0.0, 0.0, 0.0, 0.0],
50
+ target_stds=[0.1, 0.1, 0.2, 0.2]),
51
+ reg_class_agnostic=False,
52
+ loss_cls=dict(
53
+ type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
54
+ loss_bbox=dict(type='L1Loss', loss_weight=1.0))),
55
+ train_cfg=dict(
56
+ rpn=dict(
57
+ assigner=dict(
58
+ type='MaxIoUAssigner',
59
+ pos_iou_thr=0.7,
60
+ neg_iou_thr=0.3,
61
+ min_pos_iou=0.3,
62
+ match_low_quality=True,
63
+ ignore_iof_thr=-1),
64
+ sampler=dict(
65
+ type='RandomSampler',
66
+ num=256,
67
+ pos_fraction=0.5,
68
+ neg_pos_ub=-1,
69
+ add_gt_as_proposals=False),
70
+ allowed_border=-1,
71
+ pos_weight=-1,
72
+ debug=False),
73
+ rpn_proposal=dict(
74
+ nms_pre=2000,
75
+ max_per_img=1000,
76
+ nms=dict(type='nms', iou_threshold=0.7),
77
+ min_bbox_size=0),
78
+ rcnn=dict(
79
+ assigner=dict(
80
+ type='MaxIoUAssigner',
81
+ pos_iou_thr=0.5,
82
+ neg_iou_thr=0.5,
83
+ min_pos_iou=0.5,
84
+ match_low_quality=False,
85
+ ignore_iof_thr=-1),
86
+ sampler=dict(
87
+ type='RandomSampler',
88
+ num=512,
89
+ pos_fraction=0.25,
90
+ neg_pos_ub=-1,
91
+ add_gt_as_proposals=True),
92
+ pos_weight=-1,
93
+ debug=False)),
94
+ test_cfg=dict(
95
+ rpn=dict(
96
+ nms_pre=1000,
97
+ max_per_img=1000,
98
+ nms=dict(type='nms', iou_threshold=0.7),
99
+ min_bbox_size=0),
100
+ rcnn=dict(
101
+ score_thr=0.05,
102
+ nms=dict(type='nms', iou_threshold=0.5),
103
+ max_per_img=100)))
104
+ classes = ['people', 'mask_weared_incorrect', 'with_mask', 'without_mask']
105
+ dataset_type = 'CocoDataset'
106
+ data_root = 'data/coco/'
107
+ img_norm_cfg = dict(
108
+ mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
109
+ train_pipeline = [
110
+ dict(type='LoadImageFromFile'),
111
+ dict(type='LoadAnnotations', with_bbox=True),
112
+ dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),
113
+ dict(type='RandomFlip', flip_ratio=0.5),
114
+ dict(
115
+ type='Normalize',
116
+ mean=[123.675, 116.28, 103.53],
117
+ std=[58.395, 57.12, 57.375],
118
+ to_rgb=True),
119
+ dict(type='Pad', size_divisor=32),
120
+ dict(type='DefaultFormatBundle'),
121
+ dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
122
+ ]
123
+ test_pipeline = [
124
+ dict(type='LoadImageFromFile'),
125
+ dict(
126
+ type='MultiScaleFlipAug',
127
+ img_scale=(1333, 800),
128
+ flip=False,
129
+ transforms=[
130
+ dict(type='Resize', keep_ratio=True),
131
+ dict(type='RandomFlip'),
132
+ dict(
133
+ type='Normalize',
134
+ mean=[123.675, 116.28, 103.53],
135
+ std=[58.395, 57.12, 57.375],
136
+ to_rgb=True),
137
+ dict(type='Pad', size_divisor=32),
138
+ dict(type='ImageToTensor', keys=['img']),
139
+ dict(type='Collect', keys=['img'])
140
+ ])
141
+ ]
142
+ data = dict(
143
+ samples_per_gpu=2,
144
+ workers_per_gpu=2,
145
+ train=dict(
146
+ type='CocoDataset',
147
+ ann_file=
148
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/train/_annotations.coco.json',
149
+ img_prefix=
150
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/train/',
151
+ classes=[
152
+ 'people', 'mask_weared_incorrect', 'with_mask', 'without_mask'
153
+ ],
154
+ pipeline=[
155
+ dict(type='LoadImageFromFile'),
156
+ dict(type='LoadAnnotations', with_bbox=True),
157
+ dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),
158
+ dict(type='RandomFlip', flip_ratio=0.5),
159
+ dict(
160
+ type='Normalize',
161
+ mean=[123.675, 116.28, 103.53],
162
+ std=[58.395, 57.12, 57.375],
163
+ to_rgb=True),
164
+ dict(type='Pad', size_divisor=32),
165
+ dict(type='DefaultFormatBundle'),
166
+ dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
167
+ ]),
168
+ val=dict(
169
+ type='CocoDataset',
170
+ ann_file=
171
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/valid/_annotations.coco.json',
172
+ img_prefix=
173
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/valid/',
174
+ classes=[
175
+ 'people', 'mask_weared_incorrect', 'with_mask', 'without_mask'
176
+ ],
177
+ pipeline=[
178
+ dict(type='LoadImageFromFile'),
179
+ dict(
180
+ type='MultiScaleFlipAug',
181
+ img_scale=(1333, 800),
182
+ flip=False,
183
+ transforms=[
184
+ dict(type='Resize', keep_ratio=True),
185
+ dict(type='RandomFlip'),
186
+ dict(
187
+ type='Normalize',
188
+ mean=[123.675, 116.28, 103.53],
189
+ std=[58.395, 57.12, 57.375],
190
+ to_rgb=True),
191
+ dict(type='Pad', size_divisor=32),
192
+ dict(type='ImageToTensor', keys=['img']),
193
+ dict(type='Collect', keys=['img'])
194
+ ])
195
+ ]),
196
+ test=dict(
197
+ type='CocoDataset',
198
+ ann_file=
199
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/test/_annotations.coco.json',
200
+ img_prefix=
201
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/test/',
202
+ classes=[
203
+ 'people', 'mask_weared_incorrect', 'with_mask', 'without_mask'
204
+ ],
205
+ pipeline=[
206
+ dict(type='LoadImageFromFile'),
207
+ dict(
208
+ type='MultiScaleFlipAug',
209
+ img_scale=(1333, 800),
210
+ flip=False,
211
+ transforms=[
212
+ dict(type='Resize', keep_ratio=True),
213
+ dict(type='RandomFlip'),
214
+ dict(
215
+ type='Normalize',
216
+ mean=[123.675, 116.28, 103.53],
217
+ std=[58.395, 57.12, 57.375],
218
+ to_rgb=True),
219
+ dict(type='Pad', size_divisor=32),
220
+ dict(type='ImageToTensor', keys=['img']),
221
+ dict(type='Collect', keys=['img'])
222
+ ])
223
+ ]))
224
+ evaluation = dict(interval=1, metric='bbox')
225
+ optimizer = dict(type='SGD', lr=0.005, momentum=0.9, weight_decay=0.0001)
226
+ optimizer_config = dict(grad_clip=None)
227
+ lr_config = dict(
228
+ policy='step',
229
+ warmup='linear',
230
+ warmup_iters=500,
231
+ warmup_ratio=0.001,
232
+ step=[8, 11])
233
+ runner = dict(type='EpochBasedRunner', max_epochs=24)
234
+ checkpoint_config = dict(interval=1)
235
+ log_config = dict(interval=50, hooks=[dict(type='TextLoggerHook')])
236
+ custom_hooks = [dict(type='NumClassCheckHook')]
237
+ dist_params = dict(backend='nccl')
238
+ log_level = 'INFO'
239
+ load_from = None
240
+ resume_from = './workdirs/faster_rcnn_r50_fpn_1x/latest.pth'
241
+ workflow = [('train', 1)]
242
+ opencv_num_threads = 0
243
+ mp_start_method = 'fork'
244
+ auto_scale_lr = dict(enable=False, base_batch_size=16)
245
+ work_dir = './workdirs/faster_rcnn_r50_fpn_1x'
246
+ auto_resume = False
247
+ gpu_ids = [0]
configs/yolov3.py ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ checkpoint_config = dict(interval=50)
2
+ log_config = dict(interval=50, hooks=[dict(type='TextLoggerHook')])
3
+ custom_hooks = [dict(type='NumClassCheckHook')]
4
+ dist_params = dict(backend='nccl')
5
+ log_level = 'INFO'
6
+ load_from = None
7
+ resume_from = './workdirs/yolov3_d53_320_273e/latest.pth'
8
+ workflow = [('train', 1)]
9
+ opencv_num_threads = 0
10
+ mp_start_method = 'fork'
11
+ auto_scale_lr = dict(enable=False, base_batch_size=64)
12
+ model = dict(
13
+ type='YOLOV3',
14
+ backbone=dict(
15
+ type='Darknet',
16
+ depth=53,
17
+ out_indices=(3, 4, 5),
18
+ init_cfg=dict(type='Pretrained', checkpoint='open-mmlab://darknet53')),
19
+ neck=dict(
20
+ type='YOLOV3Neck',
21
+ num_scales=3,
22
+ in_channels=[1024, 512, 256],
23
+ out_channels=[512, 256, 128]),
24
+ bbox_head=dict(
25
+ type='YOLOV3Head',
26
+ num_classes=4,
27
+ in_channels=[512, 256, 128],
28
+ out_channels=[1024, 512, 256],
29
+ anchor_generator=dict(
30
+ type='YOLOAnchorGenerator',
31
+ base_sizes=[[(116, 90), (156, 198), (373, 326)],
32
+ [(30, 61), (62, 45), (59, 119)],
33
+ [(10, 13), (16, 30), (33, 23)]],
34
+ strides=[32, 16, 8]),
35
+ bbox_coder=dict(type='YOLOBBoxCoder'),
36
+ featmap_strides=[32, 16, 8],
37
+ loss_cls=dict(
38
+ type='CrossEntropyLoss',
39
+ use_sigmoid=True,
40
+ loss_weight=1.0,
41
+ reduction='sum'),
42
+ loss_conf=dict(
43
+ type='CrossEntropyLoss',
44
+ use_sigmoid=True,
45
+ loss_weight=1.0,
46
+ reduction='sum'),
47
+ loss_xy=dict(
48
+ type='CrossEntropyLoss',
49
+ use_sigmoid=True,
50
+ loss_weight=2.0,
51
+ reduction='sum'),
52
+ loss_wh=dict(type='MSELoss', loss_weight=2.0, reduction='sum')),
53
+ train_cfg=dict(
54
+ assigner=dict(
55
+ type='GridAssigner',
56
+ pos_iou_thr=0.5,
57
+ neg_iou_thr=0.5,
58
+ min_pos_iou=0)),
59
+ test_cfg=dict(
60
+ nms_pre=1000,
61
+ min_bbox_size=0,
62
+ score_thr=0.05,
63
+ conf_thr=0.005,
64
+ nms=dict(type='nms', iou_threshold=0.45),
65
+ max_per_img=100))
66
+ dataset_type = 'CocoDataset'
67
+ data_root = 'data/coco/'
68
+ img_norm_cfg = dict(mean=[0, 0, 0], std=[255.0, 255.0, 255.0], to_rgb=True)
69
+ train_pipeline = [
70
+ dict(type='LoadImageFromFile'),
71
+ dict(type='LoadAnnotations', with_bbox=True),
72
+ dict(type='Expand', mean=[0, 0, 0], to_rgb=True, ratio_range=(1, 2)),
73
+ dict(
74
+ type='MinIoURandomCrop',
75
+ min_ious=(0.4, 0.5, 0.6, 0.7, 0.8, 0.9),
76
+ min_crop_size=0.3),
77
+ dict(type='Resize', img_scale=(416, 416), keep_ratio=True),
78
+ dict(type='RandomFlip', flip_ratio=0.5),
79
+ dict(type='PhotoMetricDistortion'),
80
+ dict(
81
+ type='Normalize',
82
+ mean=[0, 0, 0],
83
+ std=[255.0, 255.0, 255.0],
84
+ to_rgb=True),
85
+ dict(type='Pad', size_divisor=32),
86
+ dict(type='DefaultFormatBundle'),
87
+ dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
88
+ ]
89
+ test_pipeline = [
90
+ dict(type='LoadImageFromFile'),
91
+ dict(
92
+ type='MultiScaleFlipAug',
93
+ img_scale=(416, 416),
94
+ flip=False,
95
+ transforms=[
96
+ dict(type='Resize', keep_ratio=True),
97
+ dict(type='RandomFlip'),
98
+ dict(
99
+ type='Normalize',
100
+ mean=[0, 0, 0],
101
+ std=[255.0, 255.0, 255.0],
102
+ to_rgb=True),
103
+ dict(type='Pad', size_divisor=32),
104
+ dict(type='ImageToTensor', keys=['img']),
105
+ dict(type='Collect', keys=['img'])
106
+ ])
107
+ ]
108
+ data = dict(
109
+ samples_per_gpu=8,
110
+ workers_per_gpu=8,
111
+ train=dict(
112
+ type='CocoDataset',
113
+ ann_file=
114
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/train/_annotations.coco.json',
115
+ img_prefix=
116
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/train/',
117
+ classes=[
118
+ 'people', 'mask_weared_incorrect', 'with_mask', 'without_mask'
119
+ ],
120
+ pipeline=[
121
+ dict(type='LoadImageFromFile'),
122
+ dict(type='LoadAnnotations', with_bbox=True),
123
+ dict(
124
+ type='Expand', mean=[0, 0, 0], to_rgb=True,
125
+ ratio_range=(1, 2)),
126
+ dict(
127
+ type='MinIoURandomCrop',
128
+ min_ious=(0.4, 0.5, 0.6, 0.7, 0.8, 0.9),
129
+ min_crop_size=0.3),
130
+ dict(type='Resize', img_scale=(416, 416), keep_ratio=True),
131
+ dict(type='RandomFlip', flip_ratio=0.5),
132
+ dict(type='PhotoMetricDistortion'),
133
+ dict(
134
+ type='Normalize',
135
+ mean=[0, 0, 0],
136
+ std=[255.0, 255.0, 255.0],
137
+ to_rgb=True),
138
+ dict(type='Pad', size_divisor=32),
139
+ dict(type='DefaultFormatBundle'),
140
+ dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
141
+ ]),
142
+ val=dict(
143
+ type='CocoDataset',
144
+ ann_file=
145
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/valid/_annotations.coco.json',
146
+ img_prefix=
147
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/valid/',
148
+ classes=[
149
+ 'people', 'mask_weared_incorrect', 'with_mask', 'without_mask'
150
+ ],
151
+ pipeline=[
152
+ dict(type='LoadImageFromFile'),
153
+ dict(
154
+ type='MultiScaleFlipAug',
155
+ img_scale=(416, 416),
156
+ flip=False,
157
+ transforms=[
158
+ dict(type='Resize', keep_ratio=True),
159
+ dict(type='RandomFlip'),
160
+ dict(
161
+ type='Normalize',
162
+ mean=[0, 0, 0],
163
+ std=[255.0, 255.0, 255.0],
164
+ to_rgb=True),
165
+ dict(type='Pad', size_divisor=32),
166
+ dict(type='ImageToTensor', keys=['img']),
167
+ dict(type='Collect', keys=['img'])
168
+ ])
169
+ ]),
170
+ test=dict(
171
+ type='CocoDataset',
172
+ ann_file=
173
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/test/_annotations.coco.json',
174
+ img_prefix=
175
+ '/content/drive/MyDrive/ComputerVisionPP/Data/mmdet/FaceMaskDetection-2/test/',
176
+ classes=[
177
+ 'people', 'mask_weared_incorrect', 'with_mask', 'without_mask'
178
+ ],
179
+ pipeline=[
180
+ dict(type='LoadImageFromFile'),
181
+ dict(
182
+ type='MultiScaleFlipAug',
183
+ img_scale=(416, 416),
184
+ flip=False,
185
+ transforms=[
186
+ dict(type='Resize', keep_ratio=True),
187
+ dict(type='RandomFlip'),
188
+ dict(
189
+ type='Normalize',
190
+ mean=[0, 0, 0],
191
+ std=[255.0, 255.0, 255.0],
192
+ to_rgb=True),
193
+ dict(type='Pad', size_divisor=32),
194
+ dict(type='ImageToTensor', keys=['img']),
195
+ dict(type='Collect', keys=['img'])
196
+ ])
197
+ ]))
198
+ optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0005)
199
+ optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
200
+ lr_config = dict(
201
+ policy='step',
202
+ warmup='linear',
203
+ warmup_iters=2000,
204
+ warmup_ratio=0.1,
205
+ step=[218, 246])
206
+ runner = dict(type='EpochBasedRunner', max_epochs=300)
207
+ evaluation = dict(interval=1, metric=['bbox'])
208
+ work_dir = './workdirs/yolov3_d53_320_273e'
209
+ auto_resume = False
210
+ gpu_ids = [0]
demo_page-0001.jpg ADDED
environment.yml ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: demo-mm-st
2
+ channels:
3
+ - pytorch
4
+ - nvidia
5
+ - defaults
6
+ dependencies:
7
+ - altair=4.1.0=py_1
8
+ - arrow-cpp=8.0.0=py310h38b8b19_1
9
+ - asttokens=2.0.5=pyhd3eb1b0_0
10
+ - attrs=22.1.0=py310haa95532_0
11
+ - aws-c-common=0.4.57=ha925a31_1
12
+ - aws-c-event-stream=0.1.6=hd77b12b_5
13
+ - aws-checksums=0.1.9=ha925a31_0
14
+ - aws-sdk-cpp=1.8.185=hd77b12b_0
15
+ - backcall=0.2.0=pyhd3eb1b0_0
16
+ - blas=1.0=mkl
17
+ - blinker=1.4=py310haa95532_0
18
+ - boost-cpp=1.73.0=h2bbff1b_12
19
+ - bottleneck=1.3.5=py310h9128911_0
20
+ - brotlipy=0.7.0=py310h2bbff1b_1002
21
+ - bzip2=1.0.8=he774522_0
22
+ - c-ares=1.19.0=h2bbff1b_0
23
+ - ca-certificates=2023.01.10=haa95532_0
24
+ - cachetools=4.2.2=pyhd3eb1b0_0
25
+ - certifi=2022.12.7=py310haa95532_0
26
+ - cffi=1.15.1=py310h2bbff1b_3
27
+ - charset-normalizer=2.0.4=pyhd3eb1b0_0
28
+ - colorama=0.4.6=py310haa95532_0
29
+ - comm=0.1.2=py310haa95532_0
30
+ - commonmark=0.9.1=pyhd3eb1b0_0
31
+ - cryptography=39.0.1=py310h21b164f_0
32
+ - cuda-cccl=12.1.55=0
33
+ - cuda-cudart=11.8.89=0
34
+ - cuda-cudart-dev=11.8.89=0
35
+ - cuda-cupti=11.8.87=0
36
+ - cuda-libraries=11.8.0=0
37
+ - cuda-libraries-dev=11.8.0=0
38
+ - cuda-nvrtc=11.8.89=0
39
+ - cuda-nvrtc-dev=11.8.89=0
40
+ - cuda-nvtx=11.8.86=0
41
+ - cuda-profiler-api=12.1.55=0
42
+ - cuda-runtime=11.8.0=0
43
+ - dataclasses=0.8=pyh6d0b6a4_7
44
+ - debugpy=1.5.1=py310hd77b12b_0
45
+ - decorator=5.1.1=pyhd3eb1b0_0
46
+ - eigen=3.3.7=h59b6b97_1
47
+ - entrypoints=0.4=py310haa95532_0
48
+ - executing=0.8.3=pyhd3eb1b0_0
49
+ - ffmpeg=4.2.2=he774522_0
50
+ - filelock=3.9.0=py310haa95532_0
51
+ - flit-core=3.8.0=py310haa95532_0
52
+ - freetype=2.12.1=ha860e81_0
53
+ - future=0.18.3=py310haa95532_0
54
+ - gflags=2.2.2=ha925a31_0
55
+ - giflib=5.2.1=h8cc25b3_3
56
+ - gitdb=4.0.7=pyhd3eb1b0_0
57
+ - gitpython=3.1.30=py310haa95532_0
58
+ - glib=2.69.1=h5dc1a3c_2
59
+ - glog=0.5.0=hd77b12b_0
60
+ - gst-plugins-base=1.18.5=h9e645db_0
61
+ - gstreamer=1.18.5=hd78058f_0
62
+ - hdf5=1.10.6=h1756f20_1
63
+ - icc_rt=2022.1.0=h6049295_2
64
+ - icu=58.2=ha925a31_3
65
+ - idna=3.4=py310haa95532_0
66
+ - importlib-metadata=6.0.0=py310haa95532_0
67
+ - intel-openmp=2021.4.0=haa95532_3556
68
+ - ipykernel=6.19.2=py310h9909e9c_0
69
+ - ipython=8.10.0=py310haa95532_0
70
+ - ipywidgets=8.0.4=py310haa95532_0
71
+ - jedi=0.18.1=py310haa95532_1
72
+ - jinja2=3.1.2=py310haa95532_0
73
+ - jpeg=9e=h2bbff1b_1
74
+ - jsonschema=4.17.3=py310haa95532_0
75
+ - jupyter_client=7.4.9=py310haa95532_0
76
+ - jupyter_core=5.2.0=py310haa95532_0
77
+ - jupyterlab_widgets=3.0.5=py310haa95532_0
78
+ - lerc=3.0=hd77b12b_0
79
+ - libboost=1.73.0=h6c2663c_12
80
+ - libbrotlicommon=1.0.9=h2bbff1b_7
81
+ - libbrotlidec=1.0.9=h2bbff1b_7
82
+ - libbrotlienc=1.0.9=h2bbff1b_7
83
+ - libclang=12.0.0=default_h627e005_2
84
+ - libcublas=11.11.3.6=0
85
+ - libcublas-dev=11.11.3.6=0
86
+ - libcufft=10.9.0.58=0
87
+ - libcufft-dev=10.9.0.58=0
88
+ - libcurand=10.3.2.56=0
89
+ - libcurand-dev=10.3.2.56=0
90
+ - libcurl=7.88.1=h86230a5_0
91
+ - libcusolver=11.4.1.48=0
92
+ - libcusolver-dev=11.4.1.48=0
93
+ - libcusparse=11.7.5.86=0
94
+ - libcusparse-dev=11.7.5.86=0
95
+ - libdeflate=1.17=h2bbff1b_0
96
+ - libffi=3.4.2=hd77b12b_6
97
+ - libiconv=1.16=h2bbff1b_2
98
+ - libnpp=11.8.0.86=0
99
+ - libnpp-dev=11.8.0.86=0
100
+ - libnvjpeg=11.9.0.86=0
101
+ - libnvjpeg-dev=11.9.0.86=0
102
+ - libogg=1.3.5=h2bbff1b_1
103
+ - libpng=1.6.39=h8cc25b3_0
104
+ - libprotobuf=3.20.3=h23ce68f_0
105
+ - libsodium=1.0.18=h62dcd97_0
106
+ - libssh2=1.10.0=hcd4344a_0
107
+ - libthrift=0.15.0=he1d8c1a_0
108
+ - libtiff=4.5.0=h6c2663c_2
109
+ - libuv=1.44.2=h2bbff1b_0
110
+ - libvorbis=1.3.7=he774522_0
111
+ - libwebp=1.2.4=hbc33d0d_1
112
+ - libwebp-base=1.2.4=h2bbff1b_1
113
+ - libxml2=2.9.14=h0ad7f3c_0
114
+ - libxslt=1.1.35=h2bbff1b_0
115
+ - lz4-c=1.9.4=h2bbff1b_0
116
+ - markupsafe=2.1.1=py310h2bbff1b_0
117
+ - matplotlib-inline=0.1.6=py310haa95532_0
118
+ - mkl=2021.4.0=haa95532_640
119
+ - mkl-service=2.4.0=py310h2bbff1b_0
120
+ - mkl_fft=1.3.1=py310ha0764ea_0
121
+ - mkl_random=1.2.2=py310h4ed8f06_0
122
+ - mpmath=1.2.1=py310haa95532_0
123
+ - nest-asyncio=1.5.6=py310haa95532_0
124
+ - networkx=2.8.4=py310haa95532_1
125
+ - numexpr=2.8.4=py310hd213c9f_0
126
+ - numpy=1.23.5=py310h60c9a35_0
127
+ - numpy-base=1.23.5=py310h04254f7_0
128
+ - opencv=4.6.0=py310h4ed8f06_3
129
+ - openssl=1.1.1t=h2bbff1b_0
130
+ - packaging=23.0=py310haa95532_0
131
+ - pandas=1.5.3=py310h4ed8f06_0
132
+ - parso=0.8.3=pyhd3eb1b0_0
133
+ - pcre=8.45=hd77b12b_0
134
+ - pickleshare=0.7.5=pyhd3eb1b0_1003
135
+ - pillow=9.4.0=py310hd77b12b_0
136
+ - pip=23.0.1=py310haa95532_0
137
+ - platformdirs=2.5.2=py310haa95532_0
138
+ - prompt-toolkit=3.0.36=py310haa95532_0
139
+ - protobuf=3.20.3=py310hd77b12b_0
140
+ - psutil=5.9.0=py310h2bbff1b_0
141
+ - pure_eval=0.2.2=pyhd3eb1b0_0
142
+ - pyarrow=8.0.0=py310h26aae1b_0
143
+ - pycparser=2.21=pyhd3eb1b0_0
144
+ - pydeck=0.7.1=py310haa95532_0
145
+ - pympler=0.9=py_0
146
+ - pyopenssl=23.0.0=py310haa95532_0
147
+ - pyrsistent=0.18.0=py310h2bbff1b_0
148
+ - pysocks=1.7.1=py310haa95532_0
149
+ - python=3.10.10=h966fe2a_2
150
+ - python-dateutil=2.8.2=pyhd3eb1b0_0
151
+ - pytorch=2.0.0=py3.10_cuda11.8_cudnn8_0
152
+ - pytorch-cuda=11.8=h24eeafa_3
153
+ - pytorch-mutex=1.0=cuda
154
+ - pywin32=305=py310h2bbff1b_0
155
+ - pyyaml=6.0=py310h2bbff1b_1
156
+ - pyzmq=23.2.0=py310hd77b12b_0
157
+ - qt-main=5.15.2=he8e5bd7_7
158
+ - qt-webengine=5.15.9=hb9a9bb5_5
159
+ - qtwebkit=5.212=h3ad3cdb_4
160
+ - re2=2022.04.01=hd77b12b_0
161
+ - requests=2.28.1=py310haa95532_1
162
+ - semver=2.13.0=pyhd3eb1b0_0
163
+ - setuptools=65.6.3=py310haa95532_0
164
+ - six=1.16.0=pyhd3eb1b0_1
165
+ - smmap=4.0.0=pyhd3eb1b0_0
166
+ - snappy=1.1.9=h6c2663c_0
167
+ - sqlite=3.41.1=h2bbff1b_0
168
+ - stack_data=0.2.0=pyhd3eb1b0_0
169
+ - sympy=1.11.1=py310haa95532_0
170
+ - tk=8.6.12=h2bbff1b_0
171
+ - toml=0.10.2=pyhd3eb1b0_0
172
+ - toolz=0.12.0=py310haa95532_0
173
+ - tornado=6.2=py310h2bbff1b_0
174
+ - traitlets=5.7.1=py310haa95532_0
175
+ - typing_extensions=4.4.0=py310haa95532_0
176
+ - tzdata=2022g=h04d1e81_0
177
+ - tzlocal=2.1=py310haa95532_1
178
+ - urllib3=1.26.14=py310haa95532_0
179
+ - utf8proc=2.6.1=h2bbff1b_0
180
+ - validators=0.18.2=pyhd3eb1b0_0
181
+ - vc=14.2=h21ff451_1
182
+ - vs2015_runtime=14.27.29016=h5e58377_2
183
+ - watchdog=2.1.6=py310haa95532_0
184
+ - wcwidth=0.2.5=pyhd3eb1b0_0
185
+ - wheel=0.38.4=py310haa95532_0
186
+ - widgetsnbextension=4.0.5=py310haa95532_0
187
+ - win_inet_pton=1.1.0=py310haa95532_0
188
+ - wincertstore=0.2=py310haa95532_2
189
+ - xz=5.2.10=h8cc25b3_1
190
+ - yaml=0.2.5=he774522_0
191
+ - zeromq=4.3.4=hd77b12b_0
192
+ - zipp=3.11.0=py310haa95532_0
193
+ - zlib=1.2.13=h8cc25b3_0
194
+ - zstd=1.5.2=h19a0ad4_0
195
+ - pip:
196
+ - addict==2.4.0
197
+ - click==8.1.3
198
+ - contourpy==1.0.7
199
+ - cycler==0.11.0
200
+ - cython==0.29.33
201
+ - fonttools==4.39.2
202
+ - kiwisolver==1.4.4
203
+ - markdown==3.4.3
204
+ - markdown-it-py==2.2.0
205
+ - matplotlib==3.7.1
206
+ - mdurl==0.1.2
207
+ - mmcls==0.25.0
208
+ - mmcv==1.7.1
209
+ - mmcv-full==1.7.1
210
+ - mmpycocotools==12.0.3
211
+ - model-index==0.1.11
212
+ - openmim==0.3.7
213
+ - ordered-set==4.1.0
214
+ - pycocotools==2.0.6
215
+ - pygments==2.14.0
216
+ - pyparsing==3.0.9
217
+ - pytz==2023.2
218
+ - regex==2023.3.23
219
+ - rich==13.3.2
220
+ - scipy==1.10.1
221
+ - streamlit==1.20.0
222
+ - tabulate==0.9.0
223
+ - terminaltables==3.1.10
224
+ - torchaudio==2.0.0
225
+ - torchvision==0.15.0
226
+ - yapf==0.32.0
227
+ prefix: C:\Users\laich\anaconda3\envs\demo-mm-st
generate.py ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import cv2
3
+ import numpy as np
4
+ import requests
5
+ from mmdet.apis import init_detector, inference_detector
6
+ import mmcv
7
+ import torch
8
+ from mmdet.utils.contextmanagers import concurrent
9
+ from pprint import pprint
10
+ from PIL import Image
11
+ import datetime
12
+
13
+
14
+
15
+ # Specify the path to model config and checkpoint file
16
+ config_file = 'configs/fasterrcnn.py'
17
+ checkpoint_file = 'models/fasterrcnn.pth'
18
+
19
+ # build the model from a config file and a checkpoint file
20
+ model = init_detector(config_file, checkpoint_file, device='cuda:0')
21
+
22
+ # test a single image and show the results
23
+ img = 'demo2.png' # or img = mmcv.imread(img), which will only load it once
24
+ result = inference_detector(model, img)
25
+ # visualize the results in a new window
26
+ model.show_result(img, result)
27
+ # or save the visualization results to image files
28
+ model.show_result(img, result, out_file='result.jpg')
29
+
30
+ list_objects = []
31
+
32
+ for i in result[1]:
33
+ temp = i
34
+ temp = np.append(temp, 1)
35
+ list_objects.append(temp)
36
+
37
+ for i in result[2]:
38
+ temp = i
39
+ temp = np.append(temp, 2)
40
+ list_objects.append(temp)
41
+
42
+ for i in result[3]:
43
+ temp = i
44
+ temp = np.append(temp, 3)
45
+ list_objects.append(temp)
46
+
47
+ img = cv2.imread(img)
48
+ for i in list_objects:
49
+ if i[5] == 1:
50
+ color = (255, 0, 0)
51
+ text = "Mask weared incorrect"
52
+ elif i[5] == 2:
53
+ color = (0, 255, 0)
54
+ text = "With mask"
55
+ elif i[5] == 3:
56
+ color = (0, 0, 255)
57
+ text = "Without mask"
58
+ text += ": " + str(round(i[4], 2))
59
+ x1 = i[0]
60
+ y1 = i[1]
61
+ x2 = i[2] - 1
62
+ y2 = i[3] - 1
63
+
64
+ x1 = round(x1)
65
+ y1 = round(y1)
66
+ x2 = round(x2)
67
+ y2 = round(y2)
68
+
69
+ img = cv2.rectangle(img, (x1, y1), (x2, y2), color, 3)
70
+ img = cv2.putText(img, text, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2)
71
+ cv2.imwrite('Original_result.jpg', img)
72
+
73
+ def IoU(bbox1, bbox2):
74
+
75
+ x1_left = bbox1[0]
76
+ y1_top = bbox1[1]
77
+ x1_right = bbox1[2]
78
+ y1_bot = bbox1[3]
79
+
80
+ x2_left = bbox2[0]
81
+ y2_top = bbox2[1]
82
+ x2_right = bbox2[2]
83
+ y2_bot = bbox2[3]
84
+
85
+ x_left = max(x1_left, x2_left)
86
+ x_right = min(x1_right, x2_right)
87
+ y_top = max(y1_top, y2_top)
88
+ y_bot = min(y1_bot, y2_bot)
89
+
90
+ inter = (x_right - x_left) * (y_bot - y_top)
91
+ if x_right < x_left or y_bot < y_top:
92
+ return 0.0
93
+ area1 = (x1_right - x1_left) * (y1_bot - y1_top)
94
+ area2 = (x2_right - x2_left) * (y2_bot - y2_top)
95
+ union = area1 + area2 - inter
96
+
97
+ IoU = inter / union
98
+ return IoU
99
+
100
+ total_people = 0
101
+ incorrect = 0
102
+ withmask = 0
103
+ withoutmask = 0
104
+ list_objects = []
105
+ isRemove = []
106
+ for i in result[1]:
107
+ temp = i
108
+ temp = np.append(temp, 1)
109
+ list_objects.append(temp)
110
+ isRemove.append(0)
111
+
112
+ for i in result[2]:
113
+ temp = i
114
+ temp = np.append(temp, 2)
115
+ list_objects.append(temp)
116
+ isRemove.append(0)
117
+
118
+ for i in result[3]:
119
+ temp = i
120
+ temp = np.append(temp, 3)
121
+ list_objects.append(temp)
122
+ isRemove.append(0)
123
+
124
+ for i in range(len(list_objects) - 1):
125
+ for j in range(i + 1, len(list_objects)):
126
+ bbox1 = [list_objects[i][0], list_objects[i][1], list_objects[i][2], list_objects[i][3]]
127
+ bbox2 = [list_objects[j][0], list_objects[j][1], list_objects[j][2], list_objects[j][3]]
128
+ if abs(IoU(bbox1, bbox2)) > 0.7:
129
+ if list_objects[i][4] > list_objects[j][4]:
130
+ isRemove[j] = 1
131
+ else:
132
+ isRemove[i] = 1
133
+ # print("IoU", abs(IoU(bbox1, bbox2)))
134
+
135
+
136
+ if list_objects[i][4] < 0.4:
137
+ isRemove[i] = 1
138
+ if list_objects[j][4] < 0.4:
139
+ isRemove[j] = 1
140
+
141
+ selected_list = []
142
+ for i in range(len(list_objects)):
143
+ if isRemove[i] == 0:
144
+ selected_list.append(list_objects[i])
145
+
146
+ for i in selected_list:
147
+ if i[5] == 1:
148
+ incorrect += 1
149
+ elif i[5] == 2:
150
+ withmask += 1
151
+ elif i[5] ==3:
152
+ withoutmask += 1
153
+
154
+ total_people += incorrect + withmask + withoutmask
155
+
156
+ img = 'demo2.png' # or img = mmcv.imread(img), which will only load it once
157
+
158
+ img = cv2.imread(img)
159
+ for i in selected_list:
160
+ if i[5] == 1:
161
+ color = (255, 0, 0)
162
+ text = "Mask weared incorrect"
163
+ elif i[5] == 2:
164
+ color = (0, 255, 0)
165
+ text = "With mask"
166
+ elif i[5] == 3:
167
+ color = (0, 0, 255)
168
+ text = "Without mask"
169
+ text += ": " + str(round(i[4], 2))
170
+ x1 = i[0]
171
+ y1 = i[1]
172
+ x2 = i[2] - 1
173
+ y2 = i[3] - 1
174
+
175
+ x1 = round(x1)
176
+ y1 = round(y1)
177
+ x2 = round(x2)
178
+ y2 = round(y2)
179
+
180
+ img = cv2.rectangle(img, (x1, y1), (x2, y2), color, 3)
181
+ img = cv2.putText(img, text, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2)
182
+ cv2.imwrite('New_result.jpg', img)
models/dump.txt ADDED
File without changes