從0到1學(xué)習(xí)使用DepthAI-疲勞檢測

這篇文章將介紹如何在DepthAI上實現(xiàn)疲勞檢測,可應(yīng)用于疲勞駕駛檢測。
分析項目
首先,我們需要解決一個問題,什么樣可以視為疲勞?
頻繁的眨眼/眨一次眼所用時間很長

不停的打哈欠

不停的點頭

通過分析,我們得到了檢測疲勞的三個標(biāo)準(zhǔn):眨眼,打哈欠,頭部姿態(tài)。
這三個標(biāo)準(zhǔn)可以讓我們知道需要什么樣的模型:
能夠檢測人臉的模型
能夠獲取面部大部分特征點的模型
尋找合適的模型
1.人臉檢測模型
這個我們最熟悉了,可以使用openvino open_model_zoo中的face-detection-retail-0004模型。
2.面部特征點檢測模型
我們可以通過搜索引擎找到一個叫做PINTO_model_zoo的項目。在這個項目中可以找到大量模型。
拉取這個項目:
git clone https://github.com/PINTO0309/PINTO_model_zoo.git
進(jìn)入這個項目,找到043_face_landmark,這個就是面部特征點檢測模型,它可以檢測出68個特征點。
然后進(jìn)入05_openvino文件夾,執(zhí)行shell腳本:
./download.sh
這樣我們就可以獲得OpenVINO IR文件了。再將OpenVINO IR編譯為blob文件:
export MYRIAD_COMPILE=$(find /opt/intel/ -iname myriad_compile)
$MYRIAD_COMPILE -m face_landmark_160x160.xml -ip U8 -VPU_MYRIAD_PLATFORM VPU_MYRIAD_2480 -VPU_NUMBER_OF_SHAVES 4 -VPU_NUMBER_OF_CMX_SLICES 4
注:使用模型轉(zhuǎn)換工具需要安裝openvino,安裝時要注意DepthAI對OpenVINO版本有要求。 詳情請參照openvino安裝:https://docs.oakchina.cn/en/latest/pages/tutorials/local_convert_openvino/#id2?
代碼原理說明
首先運行face-detection-retail-0004模型檢測圖像中的人臉,并截取面部圖像。

然后運行face_landmark_160x160模型從傳入的面部圖像中檢測出68個特征點的位置。利用這些特征點,我們可以檢測眨眼,打哈欠和頭部姿態(tài)。
眨眼
一只眼睛有6個特征點

我們利用歐氏距離計算上下眼皮之間的距離和眼睛的寬度

計算眼睛的長寬比

打哈欠與眨眼的計算原理相同
頭部姿態(tài)檢測
第一步:2D人臉關(guān)鍵點檢測;
第二步:3D人臉模型匹配;
第三步:求解3D點和對應(yīng)2D點的轉(zhuǎn)換關(guān)系;
第四步:根據(jù)旋轉(zhuǎn)矩陣求解歐拉角。

設(shè)置幀數(shù)和閾值判斷是否眨眼,打哈欠又或是點頭并統(tǒng)計次數(shù)。
最后根據(jù)眨眼,打哈欠,點頭的次數(shù)判斷是否疲勞。

注:由于每個人的五官不一樣,眼睛和嘴巴的歐氏距離有差距,可以更換為符合自己的閾值。
國內(nèi)在哪里能買到DepthAI?
目前國內(nèi)唯一的購買渠道是派馳的淘寶店:
OAK-D -派馳電子 淘寶:https://sourl.cn/9YEFE5
OAK-1 -派馳電子 淘寶:https://sourl.cn/4CpZUZ
參考鏈接:
OAK 中國:https://sourl.cn/6wt8sm
OAK 中文文檔:https://sourl.cn/rawPZD
CSDN-Dlib模型之駕駛員疲勞檢測一:https://link.zhihu.com/?target=https%3A//blog.csdn.net/cungudafa/article/details/103477960
CSDN-Dlib模型之駕駛員疲勞檢測二:https://link.zhihu.com/?target=https%3A//blog.csdn.net/cungudafa/article/details/103496881
CSDN-Dlib模型之駕駛員疲勞檢測三:https://link.zhihu.com/?target=https%3A//blog.csdn.net/cungudafa/article/details/103499230