閱讀 英文 版本 README.md。
- 輕量化模型: 本專案所建立的 MFN 和 RMFD 模型分別只有
2,422,339
和2,422,210
個參數。 - 偵測多個人臉: 能夠偵測一張圖或影格內多個人臉。
- 支援電腦攝影鏡頭: 能夠偵測照片及影像中的口罩配戴。
- 偵測非正確口罩: 能夠偵測非正確口罩配戴(例:下巴未包覆完全、鼻子露出、鼻子與嘴巴皆露出)。
此程式能夠偵測圖片或影像中的人臉並分辨是否有正確配戴口罩。
在新冠肺炎疫情肆虐下,配戴口罩已被科學證實為有效阻斷病毒傳播的一種方式,也成為出入各大公共場所必須遵守的規定。在這樣的環境下, 此專案針對具有極高影像分類表現的輕量化 MobileNet V2 進行遷移學習以建立易部署且易結合嵌入式系統的開源口罩偵測模型提供公共運輸、娛樂場所、 醫院及其他營業場所參考使用。
另外由於大多數的開源口罩偵測模型僅能偵測是否有口罩配戴於臉上,此專案之模型能額外辨別是否有口鼻露出或使用其他物品遮住口鼻等非正確配戴狀況, 希望能夠近一步加強口罩配戴規定及實施。
- OpenCV : 用於處理影像及影格的電腦視覺函式庫
- OpenCV DNN Face Detector : 用於偵測人臉的 Caffe 深度學習 Single Shot-Multibox Detector(SSD)模型
- Tensorflow / Keras : 用於建立此專案模型的主要深度學習框架
- MobileNet V2 : 輕量化影像分類模型, 在 ImageNet 影像分類上達到 71.3% Top-1 正確率及 90.1% Top-5 正確率
- Dash : 建立在 Plotly.js、React 和 Flask 之上的前端框架,此專案中用於程式展示
我們提供訓練於兩個不同資料集(RMFD 資料集和 MFN 資料集)的模型。
本專案的 RMFD 資料集取自 口罩遮挡人脸数据集 並經過處理與採樣,而 MFN 資料集取自 MaskedFace-Net 和 Flickr-Faces-HQ Dataset (FFHQ) 。
本資料集包括 4,408 張圖片:
face_no_mask
: 2,204 張圖片face_with_mask
: 2,204 張圖片
每張圖片皆為真實人臉,尺寸不一。我們將原始資料集內 90,568 張未戴口罩的圖片隨機採樣 2,204 張以建立 face_no_mask
。
face_with_mask
的數據則為原始資料集內所有配戴口罩的圖片。
本資料集包括 200,627 張圖片:
face_with_mask_correctly
: 67,193 張圖片face_with_mask_incorrectly
: 66,899 張圖片face_no_mask
: 66,535 張圖片
face_with_mask_correctly
及 face_with_mask_incorrectly
內圖片為 MaskedFace-Net 資料集內相對應類別內所有圖片縮放後之 128*128 影像。
而 face_no_mask
則取自 Flickr-Faces-HQ Dataset (FFHQ)。 MaskedFace-Net 所有圖片內的口罩皆為電腦合成處理製成以產生足夠數據提供研究,
其中 face_with_mask_incorrectly
的 10% 為下巴露出之圖片、10% 為鼻子露出之圖片、80% 為口鼻皆露出之圖片.
資料集可以從這裡下載。(2021/06/11)
兩個模型皆使用相對應資料集內 80% 的數據作為訓練集、20% 作為驗證集兼測試集。
MFN 模型 | RMFD 模型 |
---|---|
我們發現 MFN 模型易將 face_no_mask
誤為 face_with_mask_incorrectly
,即使這對提醒人配戴口罩影響不大(兩種結果皆會觸發提醒),
仍歡迎任何針對此模型表現的改進建議。
此專案使用 Python 3.8 運行於 MacOS Big Sur 11.1. 模型的訓練使用雲端的 GCP
Compute Engine(8 vCPUs, 13.75 GB memory)配備 tensorflow==2.4.0
。所有依賴與所需函式庫皆列於requirements.txt
。
備註:由於模型建立時 opencv-python==4.4.0
的 cv2.imshow
無法在 MacOS Big Sur 上使用 無法在 MacOS Big Sur 上使用
,我們改用 opencv-python-headless==4.5.1
。然而最新版本 opencv-python==4.5.1.48
似乎已將問題修復,若你已安裝 opencv-python
,
則只需升級該函式庫即可。
- 開啟終端,用
cd
進到你想要存放此專案的資料夾並複製此儲存庫:
$ git clone https://github.com/achen353/Face-Mask-Detector.git
- 下載並安裝 Miniconda。
- 建立具有
requirements.txt
所有函式庫之環境:
$ conda create --name env_name --file requirements.txt
- 現在你可以用
cd
進到複製的專案資料夾裡執行程式或檢視檔案.
使用 cd
進入 /src/
資料夾並執行:
$ python detect_mask_images.py -i <image-path> [-m <model>] [-c <confidence>]
使用 cd
進入 /src/
資料夾並執行:
$ python detect_mask_video.py [-m <model>] [-c <confidence>]
使用 cd
進入 /src/
資料夾並執行:
$ python train.py [-d <dataset>]
記得修改 train.py
裡的路徑設定以避免覆寫提供之已訓練模型。
Note:
<image-path>
應為對於專案根目錄(而非/src/
)之相對路徑。<model>
應為str
字串,可接受字串有MFN
及RMFD
。預設為MFN
。<confidence>
應為float
浮點數,可接受數值介於0
and1
之間(包含),預設為0.5
。<dataset>
應為str
字串,可接受字串有MFN
及RMFD
,預設為MFN
。
本專案之程式展示 在這裡,目前仍在測試階段。
- 將
app.run_server(host='0.0.0.0', port=8080, debug=True)
修改為app.run_server(debug=True)
: - 執行下列指令:
$ python main.py
- 在你的瀏覽器網址列上輸入
http://127.0.0.1:8050/
以透過 Dash app 的預設端口使用程式。若是端口正在被使用中,你可以更改端口。
- 口罩遮挡人脸数据集(Real-World Masked Face Dataset ,RMFD)
- Adnane Cabani, Karim Hammoudi, Halim Benhabiles, and Mahmoud Melkemi, "MaskedFace-Net - A dataset of correctly/incorrectly masked face images in the context of COVID-19", Smart Health, ISSN 2352-6483, Elsevier, 2020, DOI:10.1016/j.smhl.2020.100144
- Karim Hammoudi, Adnane Cabani, Halim Benhabiles, and Mahmoud Melkemi,"Validating the correct wearing of protection mask by taking a selfie: design of a mobile application "CheckYourMask" to limit the spread of COVID-19", CMES-Computer Modeling in Engineering & Sciences, Vol.124, No.3, pp. 1049-1059, 2020, DOI:10.32604/cmes.2020.011663
- Flickr-Faces-HQ Dataset (FFHQ)
- Face Mask Detection
- Object Detection