AI禁煙可還行!吸煙識別+人臉識別
哈嘍,大家好。
今天給大家分享一個吸煙識別+人臉識別的項目。很多公共場所、生產(chǎn)場所和學(xué)校,都有禁煙的要求,做一個禁煙的監(jiān)控,讓AI自動識別吸煙行為,并識別是誰在吸煙,還是很有必要的。
用目標(biāo)檢測算法判斷吸煙行為,提取吸煙者的人臉,用人臉識別算法判斷誰在吸煙。思路比較簡單,但細(xì)節(jié)處理起來還是稍微有些麻煩。
項目用到訓(xùn)練數(shù)據(jù)和源碼,都已經(jīng)打包好了。還是老樣子,評論區(qū)獲取。
1. 檢測香煙
我用了 5k 張抽煙的標(biāo)記數(shù)據(jù),作為訓(xùn)練數(shù)據(jù)
放在dataset目錄下。
訓(xùn)練YOLOv5目標(biāo)檢測模型。
第一步,復(fù)制data/coco128.yaml為smoke.yaml,并修改數(shù)據(jù)集目錄和類別配置信息
第二步,復(fù)制./models/yolov5s.yaml為smoke.yaml?,修改nc
第三步,下載yolov5s.pt?預(yù)訓(xùn)練模型,放在{yolov5目錄}/weights目錄中
執(zhí)行下面命令,訓(xùn)練即可
訓(xùn)練完成后可以看到如下輸出:
準(zhǔn)召還湊合。
訓(xùn)練完成后,可以找到best.pt位置,后面用它來做香煙檢測。
能識別到煙后,我們還需要判斷,當(dāng)前是否正在吸煙。
可以用香煙檢測框與嘴部檢測框計算IOU來判斷,說白了,就是判斷這兩框是否有交集,若有,則認(rèn)為當(dāng)前正在吸煙。
嘴部檢測框,使用人臉關(guān)鍵點(diǎn)來識別。
2. 人臉識別
人臉識別算法有很多成熟的模型,我們不需要自己訓(xùn)練,直接調(diào)庫即可。
我這里用的是dlib庫,它可以識別人臉 68 個關(guān)鍵點(diǎn),并根據(jù)這 68 個關(guān)鍵點(diǎn),提取人臉特征。
face_detector?可以檢測人臉,返回人臉檢測框,face_sp基于人臉檢測框,識別人臉 68 個關(guān)鍵點(diǎn)。
從這 68 個關(guān)鍵點(diǎn)中,我們便可以獲取到嘴部檢測框,用于判斷是否正在吸煙。
最后,我們還是希望利用人臉識別算法,識別到誰在吸煙。
第一步,提取人臉特征
face_descriptor?根據(jù)人臉 68 個關(guān)鍵點(diǎn)之間的位置、距離,維每張臉計算出一個特征向量。這個原理類似于我們之前分享的word2vec?或者將視頻映射到N維向量。
第二步,將現(xiàn)有人臉錄入人臉庫。我準(zhǔn)備了 3 個影視劇中的吸煙行為
從視頻中裁剪出人臉,向量化后,寫入人臉數(shù)據(jù)庫(用文件代替)
第三步,發(fā)生吸煙行為后,我們可以裁剪出吸煙者的人臉,并計算人臉向量,與人臉數(shù)據(jù)庫的特征進(jìn)行比對,找到最相似的人臉,返回對應(yīng)的名字
這個項目還有很多可以擴(kuò)展的地方,比如:我提供的視頻只有單張臉,實(shí)際監(jiān)控中肯定是多張臉。這時候可以用MOT算法進(jìn)行行人跟蹤,然后再對每個人單獨(dú)做吸煙識別
還有,可以單獨(dú)做一個統(tǒng)計區(qū),把識別到的吸煙行為保存,用作警告、處罰的證據(jù)。