人员玩手机离岗识别检测系统 yolov5
人員玩手機(jī)離崗識(shí)別檢測(cè)系統(tǒng)根通過(guò)python+yolov5網(wǎng)絡(luò)模型識(shí)別算法技術(shù),人員玩手機(jī)離崗識(shí)別檢測(cè)算法可以對(duì)畫(huà)面中人員睡崗離崗、玩手機(jī)打電話、脫崗睡崗情況進(jìn)行全天候不間斷進(jìn)行識(shí)別檢測(cè)報(bào)警提醒。Python是一種由Guido van Rossum開(kāi)發(fā)的通用編程語(yǔ)言,它很快就變得非常流行,主要是因?yàn)樗暮?jiǎn)單性和代碼可讀性。它使程序員能夠用更少的代碼行表達(dá)思想,而不會(huì)降低可讀性。與C / C++等語(yǔ)言相比,Python速度較慢。也就是說(shuō),Python可以使用C / C++輕松擴(kuò)展,這使我們可以在C / C++中編寫(xiě)計(jì)算密集型代碼,并創(chuàng)建可用作Python模塊的Python包裝器。這給我們帶來(lái)了兩個(gè)好處:首先,代碼與原始C / C++代碼一樣快(因?yàn)樗窃诤笈_(tái)工作的實(shí)際C++代碼),其次,在Python中編寫(xiě)代碼比使用C / C++更容易。OpenCV-Python是原始OpenCV C++實(shí)現(xiàn)的Python包裝器。
Yolo模型采用預(yù)定義預(yù)測(cè)區(qū)域的方法來(lái)完成目標(biāo)檢測(cè),具體而言是將原始圖像劃分為 7x7=49 個(gè)網(wǎng)格(grid),每個(gè)網(wǎng)格允許預(yù)測(cè)出2個(gè)邊框(bounding box,包含某個(gè)對(duì)象的矩形框),總共 49x2=98 個(gè)bounding box。我們將其理解為98個(gè)預(yù)測(cè)區(qū),很粗略的覆蓋了圖片的整個(gè)區(qū)域,就在這98個(gè)預(yù)測(cè)區(qū)中進(jìn)行目標(biāo)檢測(cè)。YOLO的結(jié)構(gòu)非常簡(jiǎn)單,就是單純的卷積、池化最后加了兩層全連接,從網(wǎng)絡(luò)結(jié)構(gòu)上看,與前面介紹的CNN分類(lèi)網(wǎng)絡(luò)沒(méi)有本質(zhì)的區(qū)別,最大的差異是輸出層用線性函數(shù)做激活函數(shù),因?yàn)樾枰A(yù)測(cè)bounding box的位置(數(shù)值型),而不僅僅是對(duì)象的概率。所以粗略來(lái)說(shuō),YOLO的整個(gè)結(jié)構(gòu)就是輸入圖片經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)的變換得到一個(gè)輸出的張量。
在進(jìn)行模型訓(xùn)練時(shí),我們需要構(gòu)造訓(xùn)練樣本和設(shè)計(jì)損失函數(shù),才能利用梯度下降對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。將一幅圖片輸入到y(tǒng)olo模型中,對(duì)應(yīng)的輸出是一個(gè)7x7x30張量,構(gòu)建標(biāo)簽label時(shí)對(duì)于原圖像中的每一個(gè)網(wǎng)格grid都需要構(gòu)建一個(gè)30維的向量。對(duì)于輸入圖像中的每個(gè)對(duì)象,先找到其中心點(diǎn)。比如自行車(chē),其中心點(diǎn)在黃色圓點(diǎn)位置,中心點(diǎn)落在網(wǎng)格內(nèi),所以這個(gè)網(wǎng)格對(duì)應(yīng)的30維向量中,自行車(chē)的概率是1,其它對(duì)象的概率是0。所有其它48個(gè)網(wǎng)格的30維向量中,該自行車(chē)的概率都是0。這就是所謂的"中心點(diǎn)所在的網(wǎng)格對(duì)預(yù)測(cè)該對(duì)象負(fù)責(zé)"。
Adapter接口定義了如下方法:
public abstract void registerDataSetObserver (DataSetObserver observer)
Adapter表示一個(gè)數(shù)據(jù)源,這個(gè)數(shù)據(jù)源是有可能發(fā)生變化的,比如增加了數(shù)據(jù)、刪除了數(shù)據(jù)、修改了數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,它要通知相應(yīng)的AdapterView做出相應(yīng)的改變。為了實(shí)現(xiàn)這個(gè)功能,Adapter使用了觀察者模式,Adapter本身相當(dāng)于被觀察的對(duì)象,AdapterView相當(dāng)于觀察者,通過(guò)調(diào)用registerDataSetObserver方法,給Adapter注冊(cè)觀察者。
public abstract void unregisterDataSetObserver (DataSetObserver observer)
通過(guò)調(diào)用unregisterDataSetObserver方法,反注冊(cè)觀察者。
public abstract int getCount () 返回Adapter中數(shù)據(jù)的數(shù)量。
public abstract Object getItem (int position)
Adapter中的數(shù)據(jù)類(lèi)似于數(shù)組,里面每一項(xiàng)就是對(duì)應(yīng)一條數(shù)據(jù),每條數(shù)據(jù)都有一個(gè)索引位置,即position,根據(jù)position可以獲取Adapter中對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。
public abstract long getItemId (int position)
獲取指定position數(shù)據(jù)項(xiàng)的id,通常情況下會(huì)將position作為id。在Adapter中,相對(duì)來(lái)說(shuō),position使用比id使用頻率更高。
public abstract boolean hasStableIds ()
hasStableIds表示當(dāng)數(shù)據(jù)源發(fā)生了變化的時(shí)候,原有數(shù)據(jù)項(xiàng)的id會(huì)不會(huì)發(fā)生變化,如果返回true表示Id不變,返回false表示可能會(huì)變化。Android所提供的Adapter的子類(lèi)(包括直接子類(lèi)和間接子類(lèi))的hasStableIds方法都返回false。
public abstract View getView (int position, View convertView, ViewGroup parent)
getView是Adapter中一個(gè)很重要的方法,該方法會(huì)根據(jù)數(shù)據(jù)項(xiàng)的索引為AdapterView創(chuàng)建對(duì)應(yīng)的UI項(xiàng)。
總結(jié)
以上是生活随笔為你收集整理的人员玩手机离岗识别检测系统 yolov5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: XiaoWei的战斗力
- 下一篇: IoT通讯技术选型及模型设计的思考