Python 檢測人臉是否佩戴口罩

最近,口罩成爲絕對熱門的話題,在疫情之下,出門不戴口罩不僅對自己不負責,對他人而言也是一種潛在的威脅。所以許多小區都有保安在門口守着,誰要是不戴口罩就吼回去(嚇死我了)。

儘管如此,人工檢測總有可能漏掉人,而且無時無刻地盯着,保安叔叔也特別累。今天我們就來嘗試用計算機自動檢測人臉是否佩戴口罩的可行性,如果可行,那麼根據我們以前的推送:人臉檢測自動開機,就可以做一個實時攝像頭,如果發現有人沒戴口罩則發送警告給保安,以提高保安的工作效率。

當然,想要識別人臉是否佩戴口罩,需要做很多訓練數據的收集,不過最近百度開源了他們的人臉口罩識別模型:PaddleHub 口罩檢測。我們今天就來試試這個模型的效果。

1.準備
爲了實現這個實驗,Python是必不可少的,如果你還沒有安裝Python,建議閱讀我們的這篇文章哦:超詳細Python安裝指南。

然後,我們需要安裝百度的paddlepaddle, 進入他們的官方網站就有詳細的指引:
https://www.paddlepaddle.org.cn/install/quick

根據你自己的情況選擇這些選項,最後一個CUDA版本,由於本實驗不需要訓練數據,也不需要太大的計算量,所以直接選擇CPU版本即可。選擇完畢,下方會出現安裝指引,不得不說,Paddlepaddle這些方面做的還是比較貼心的(就是名字起的不好)。

要注意,如果你的Python3環境變量裏的程序名稱是Python,記得將語句改爲Python xxx,如下進行安裝:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
1
還需要安裝paddlehub:

pip install -i https://mirror.baidu.com/pypi/simple paddlehub
1
2.編寫代碼
Paddlehub作爲一個深度學習平臺,用起來還是相當方便的,尤其是對於我這種(調包小王子)非研究型應用者。一共就只有四個步驟:

1.引入模塊和圖片
2.載入模型
3.分類與預測
4.結果展示
把我們需要測試的圖片保存在該代碼文件的同一目錄下,命名爲3.jpg:

想看這個小姐姐摘下口罩的樣子

代碼如下:

import paddlehub as hub
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# 1.待預測圖片
test_img_path = ["./3.jpg"]

# 2.載入模型
module = hub.Module(name="pyramidbox_lite_mobile_mask")

# 3.預測
input_dict = {"image": test_img_path}
results = module.face_detection(data=input_dict)

# 4.結果展示
img = mpimg.imread("detection_result/3.jpg")
plt.figure(figsize=(10, 10))
plt.imshow(img)
plt.axis('off')
plt.show()

沒錯,你沒看錯,就是這麼簡單。去掉空行和註釋只有12行代碼,再狠一點,把matplot展示部分全部去掉,只有6行代碼。再再狠一點,把test_img_path和input_path變量以及module.face_detection語句合併,你會發現只有3行代碼:

import paddlehub as hub
module = hub.Module(name="pyramidbox_lite_mobile_mask")
results = module.face_detection(data={"image": ["./3.jpg"]}) 
1
2
3
執行完後的分類結果在同一目錄下的detection_result目錄下查看即可。所以說,說20行代碼是謙虛,3行代碼就夠了。

3.結果展示
我們測試的那張圖片,結果如下:

MASK:97.64% 代表這個人戴了口罩,可信度爲97.64%。
NO MASK: 97.41% 代表這個人沒戴口罩,可信度爲97.41%

最後面那個大叔也是MASK,但是它的可信度只有54.31%,所以很可能是誤判,在我們實際應用的時候,只需要把警告閾值(比如80%)提高,即可篩去這些不可信的分類。

不過,這個模型有一個缺點就是,對於遠距離的人判斷並不是很精確:

離鏡頭最近的這個人可能是因爲側臉的原因,臉部特徵不明顯識別不出來。但是遠處的這些戴着口罩卻被識別爲沒戴口罩的,就是這個模型的鍋了。不過,通過閾值過濾和縮短攝像頭攝影距離還是可以將這個模型用於實際生活中的。

我們的文章到此就結束啦,如果你希望我們今天的Python 教程,請持續關注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦,有任何問題都可以在下方留言區留言,我們都會耐心解答的!
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章