Portfolio

illustrations illustrations illustrations illustrations

Face Mask Detector

Published on Jun 08, 2020 by Yunwoong Kim on detection

Face Mask Detector

마스크는 COVID-19 확산을 막는 중요한 도구이며, 마스크를 정상적으로 착용했을 때 바이러스 확산을 방지하는데 가장 효과적이라는 것이 입증되었습니다. 마스크 착용이 의무화 되면서 가급적 실내 시설은 물론, 실외에서도 다른 사람과 2m 거리두기가 어려운 경우 항상 마스크를 착용하는 것이 원칙이 되었습니다. 특히 회사에서도 근무자는 반드시 안면 마스크를 착용해야 합니다. 하지만 착용여부를 모니터링을 위한 추가 자원에 대한 요구는 회사와 사업체에 부담을 가중하고 위반행위 적발 시 당사자에게 마스크 착용을 지도하고 과태료를 부과하는 것에 대한 어려움이 있습니다.

아래에서 설명하고 있는 프로그램은 마스크 지침을 위반하는 사람을 자동으로 감지함으로써 시간을 절약하고 더 안전한 환경을 보장할 수 있습니다.

Description

OpenCV, Keras / TensorFlow 및 Deep Learning으로 COVID-19 얼굴의 마스크 감지하는 프로그램을 개발하였습니다. 조금더 구체화 한다면 잠재적으로 개인과 타인의 안전을 보장하는 데 사용 할 수 있다고 생각합니다.

Python괴 Keras, TensorFlow를 이용하여 데이터 세트에서 안면 마스크 감지기 모델을 생성하는 스크립트를 작성합니다.

안면 마스크 데이터 세트는 어떻게 생성할까?


딥러닝, 머신러닝을 공부하다 보면 예제로 활용할 수 있는 데이터를 마련하거나 찾기가 어려워서 곤란할 때가 있습니다. 특히 라벨링이 된 이미지, 영상, 음성 등의 데이터의 경우 자체적으로 마련하기가 쉽지 않습니다.

저는 Landmark 를 이용하여 데이터 세트를 만들기로 했습니다.

  1. 정상적인 얼굴 이미지 촬영
  2. 얼굴을 찾아내는 Computer Vision 스크립트를 만들어 얼굴 이미지에 마스크를 추가하여 인공 데이타 세트를 만듬

얼굴을 감지하여 ROI (Region of Interest)를 추출

얼굴 Landmark를 적용하여 눈, 코, 입등을 국소화

아래와 같은 마스크 이미지 (투명한 배경 포함)가 필요합니다.

마스크를 적용할 얼굴 최적의 위치(턱, 코를 따라 즉 포인트)를 계산하여 배치하여 이미지를 생성합니다.

위의 프로세스를 반복하여 인공으로 마스크를 착용한 데이터 세트를 생성합니다.

마스크 이미지를 인공으로 생성한 이미지는 마스크가 없는 이미지로 재사용하면 안됩니다. 사용되지 않을 얼굴 이미지를 별도로 준비해야 합니다.

Keras / TensorFlow로 COVID-19 마스크 인식 Model 생성


[INFO] loading images...
[INFO] compiling model...
[INFO] training head...
Train for 34 steps, validate on 276 samples
Epoch 1/20
34/34 [==============================] - 30s 885ms/step - loss: 0.6431 - accuracy: 0.6676 - val_loss: 0.3696 - val_accuracy: 0.8242
Epoch 2/20
34/34 [==============================] - 29s 853ms/step - loss: 0.3507 - accuracy: 0.8567 - val_loss: 0.1964 - val_accuracy: 0.9375
Epoch 3/20
34/34 [==============================] - 27s 800ms/step - loss: 0.2792 - accuracy: 0.8820 - val_loss: 0.1383 - val_accuracy: 0.9531
Epoch 4/20
34/34 [==============================] - 28s 814ms/step - loss: 0.2196 - accuracy: 0.9148 - val_loss: 0.1306 - val_accuracy: 0.9492
Epoch 5/20
34/34 [==============================] - 27s 792ms/step - loss: 0.2006 - accuracy: 0.9213 - val_loss: 0.0863 - val_accuracy: 0.9688
...
Epoch 16/20
34/34 [==============================] - 27s 801ms/step - loss: 0.0767 - accuracy: 0.9766 - val_loss: 0.0291 - val_accuracy: 0.9922
Epoch 17/20
34/34 [==============================] - 27s 795ms/step - loss: 0.1042 - accuracy: 0.9616 - val_loss: 0.0243 - val_accuracy: 1.0000
Epoch 18/20
34/34 [==============================] - 27s 796ms/step - loss: 0.0804 - accuracy: 0.9672 - val_loss: 0.0244 - val_accuracy: 0.9961
Epoch 19/20
34/34 [==============================] - 27s 793ms/step - loss: 0.0836 - accuracy: 0.9710 - val_loss: 0.0440 - val_accuracy: 0.9883
Epoch 20/20
34/34 [==============================] - 28s 838ms/step - loss: 0.0717 - accuracy: 0.9710 - val_loss: 0.0270 - val_accuracy: 0.9922
[INFO] evaluating network...
              precision    recall  f1-score   support
   with_mask       0.99      1.00      0.99       138
without_mask       1.00      0.99      0.99       138
    accuracy                           0.99       276
   macro avg       0.99      0.99      0.99       276
weighted avg       0.99      0.99      0.99       276

OpenCV를 사용하여 이미지에 대한 COVID-19 마스크 감지기 구현