【電子報#31-01】臉部辨識+口罩偵測+溫度感測
- 發佈日期:
- 瀏覽人次: 599
影像辨識於生活中的應用無所不在,中科自造基地蘿蔔頭之夜更針對臉部辨識進行深入探討與實作,沒參與到的各位是否感到遺憾呢?本期電子報文章延續話題鏈結時事,邀請到社群夥伴曾成訓(CH.Tseng)來為我們揭秘,帶來綜合人臉辨識、防疫口罩偵測與遠距溫度量測的教學。
紅外線測溫原理
引用維基百科的解釋,紅外線(Infrared,簡稱IR)是波長介乎微波與可見光之間的電磁波,其波長在760奈米(nm)至1毫米(mm)之間,為非可見光,對應頻率約是在430 THz到300 GHz的範圍內,室溫下物體所發出的熱輻射多在此波段。因此,大自然中任何一個大於絕對零度(-273度C)的熱源皆會持續的向外界發出熱輻射,而這熱輻射的波長,正是上述所提及的非可見光紅外線波長範圍內。
回歸標題,要如何透過紅外線探知熱源的溫度呢?原理來自於Stefan-Boltzmann(史蒂芬-波茲曼)定律:物體表面所釋放出的總幅射量,與其溫度的四次方成正比,所以我們可透過測量總輻射能量來計算物體溫度。
《▲紅外線測溫原理示意圖,曾成訓提供》
紅外線測溫模組MLX90614
MLX90614 是目前市面上大部份非接觸式紅外線測溫模組所使用的感測器,由比利時公司 Melexis(邁來芯)所推出,該公司的產品領域極廣,涵蓋汽車應用、運輸、智能家電應用、智能建物應用、工業應用、醫療應用等,其衍生的型號相當多,主要差異在於偵測溫度範圍、適用領域(標準或醫療)、工作電壓、鏡頭尺寸(偵測遠近及角度)及輸出介面上(I2C, PWM或SMBus)的不同。
以下本文使用的型號CJMCU-MLX90614ESF-DCI為下面這款:
《▲紅外線測溫模組MLX90614,曾成訓提供》
該款的特性如下:
- 可偵測的物體溫度範圍為-70~380度C
- 工作溫度限於-40~85度C
- 屬於醫療等級
- 使用電壓:2.6~3.6V
- 電流耗用: 工作時小於2mA,休眠時小於2uA
- 尺寸:20.2mm x 9.1mm
- 視角:5度(鏡筒較長,量測的距離較遠)
MLX90614函式庫
羅列出以下幾種針對MLX90614的python library(函式庫),執行結果大同小異,本文使用的是第一個Adafruit版。
- Adafruit版本:https://github.com/adafruit/Adafruit_CircuitPython_MLX90614
- CRImier版本:https://github.com/CRImier/python-MLX90614
- Conr86版本:https://github.com/Conr86/PyMLX90614
- Mcauser版本:https://github.com/mcauser/micropython-mlx90614
緒論介紹完畢,接下來進入重頭戲。
口罩偵測
首先,需要訓練一個模型來偵測使用者是否有戴口罩,Dataset(資料集)可以從伊甸基金會所屬的『數位資料處理庇護工場』下載標記,免費開源釋出,該dataset資訊如下:
1. 標記格式:PASCAL VOC
2. 圖片總張數:682張
3. 標記種類三種:
(1) good(有正確的戴好口罩)
(2) none(臉部露出鼻孔沒有戴好口罩)
(3) bad(臉部沒有戴上口罩)
4. 各類別的標記數目:
(1) good(有正確的戴好口罩):3,129個
(2) none(臉部露出鼻孔沒有戴好口罩):126個
(3) bad(臉部沒有戴上口罩):667個
該dataset算是目前針對人臉口罩標記得最為完整也最詳細的資料庫,使用這個資料庫便能訓練出一個偵測臉部是否有戴(好)口罩且準確率相當高的模型。
《▲口罩偵測圖片,曾成訓提供》
臉部辨識
針對臉部辨識部份,本文使用OpenVINO model zoo提供的三種模型來完成辨識:
- landmarks-regression-retail-0009:可輸出五個臉部特徵點
(https://docs.openvinotoolkit.org/2018_R5/_docs_Retail_object_attributes_landmarks_regression_0009_
onnx_desc_landmarks_regression_retail_0009.html)
- face-detection-adas-0001:臉孔偵測,使用MobileNet作為base model。
(https://docs.openvinotoolkit.org/2019_R1/_face_detection_adas_0001_description_face_
- face-reidentification-retail-0095:可輸出臉部的256個特徵向量,需輸入的臉部圖片尺寸為128×128,使用模型為MobileNet V2。
(https://docs.openvinotoolkit.org/2019_R1/_face_reidentification_retail_0095_description_face_
reidentification_retail_0095.html)
這三個模型搭配使用,便能完成達到臉部辨識的目的:
- 臉孔偵測
- 取臉部landmarks(標記)
- 對齊臉孔
- 取得Facial embedded features(臉部嵌入式特徵)
- 比對最接近的人臉
臉部辨識+口罩偵測+溫度感測
硬體
使用樹莓派(3B+或4皆可)結合NCS2,接著將I2C介面的SDA、SCL、3.3V、GND四個接腳分別接到MLX90614。
《▲開發板串接示意圖,曾成訓提供》
將MLX90614與攝影鏡頭固定在一起,注意!離鏡頭愈遠,投射於臉部的紅外線面積會愈大,有很大的機會是包含溫度低的非皮膚部份(如頭髮、眼鏡、口罩、背後空氣…),因此量測出的溫度會比實際值低很多,請參考下一段關於MLX90614的溫度感測說明。
《▲MLX90614模組與鏡頭連接示意圖,曾成訓提供》
軟體
接著使用OpenCV及Python撰寫一個模擬的打卡系統,上下班時員工手動按鈕打卡,成功後系統將辨識該員工姓名、是否戴好口罩以及體溫是否超過設定值,並將結果顯示出來。
關於MLX90614的溫度感測
MLX90614利用投射紅外線來探知熱源溫度,雖然加入了鏡頭套筒讓它能發射得更遠,但是距離愈遠投射的紅外線在物體表面的面積便會愈大,使得物體表面積及總幅射量所計算出來的數值,會隨著投射面積更大而精確度下降,因此本模組無法在人員移動的動態環境中,準確定位紅外線投射區域的位置及大小,僅適用於靜態使用。
簡單來說:紅外線測溫器所測量的是「紅外線圓形投射區的物體表面積平均溫度」,要得到正確的量測值,在被測物上的量測點面積需不大於被測物表面積,否則會得到錯誤的數值。
《▲攝像頭與溫度感測關係示意圖,曾成訓提供》
遠距的紅外線測溫模型使用限制及注意:
- 需確定紅外線投射的範圍在目標物體之內。
- 當距離遠時,投射在物體表面(如人臉),可能包含了溫度較低的眼鏡、頭髮、眉毛、鼻頭等部份,會使得量測出的溫度偏低。(例如上圖所示範的照片)
- 容易受環境的蒸汽、塵土、煙霧而影響測溫精確度。
- 會發光的物體表面,其表面的反射光亦會影響到測溫效果。
- 不同的材料材質及顏色,具有不同的紅外線發射能量,必須調整紅外線發射率來減少其測量誤差。(目前市面的紅外測溫模組如MLX90614,其發射率都固定為1,代表物體放射率值不會隨著該材料之溫度或所量測溫度之紅外線(Infrared)波長改變不同而變化)
結語
MLX90614的部份型號雖然號稱可遠距的量測,但這功能主要針對測溫槍的應用,以較遠距離來量測人體(例如人的額頭)溫度,且人物必須靜止站立不能移動,如果真想要在走道以進行動態溫度量測,那就要考慮使用更貴的熱顯像儀(熱感測儀),基礎教學文手把手帶Maker自製土砲版溫度測量、口罩偵測儀,為防疫貢獻心力!