如何使用Python+OpenCV+Keras實(shí)現(xiàn)無(wú)口罩車(chē)輛駕駛員懲罰生成
介紹
我們知道,在當(dāng)前形勢(shì)下,我們正在逐步穩(wěn)定地克服大流行病的情況,而且情況每天都在改善。但是,眾所周知,即使已經(jīng)開(kāi)始接種疫苗,徹底根除該病毒仍需花費(fèi)很多年。因此,為安全起見(jiàn),在接下來(lái)的幾年中,我們所有人都可能會(huì)習(xí)慣于戴口罩。就違反交通規(guī)則而言,政府仍然嚴(yán)格對(duì)在路上開(kāi)車(chē)不戴口罩的人處以罰款。建立一個(gè)系統(tǒng),能夠追蹤所有交通違法者的細(xì)節(jié),提高公民的意識(shí)和紀(jì)律,是一個(gè)非常有用的辦法。還可以通過(guò)另外創(chuàng)建一個(gè)儀表板監(jiān)視程序來(lái)跟蹤該交通規(guī)則違反者的增加或減少,在給定期間內(nèi)收集罰款,確定主要違反規(guī)則的人群,從而改善該系統(tǒng)。工作范圍作為代碼實(shí)現(xiàn)的一部分,我們計(jì)劃設(shè)計(jì)一個(gè)模型,將圖像分類(lèi)為戴口罩的和沒(méi)戴口罩的。對(duì)于獲得的屬于沒(méi)戴口罩類(lèi)別的圖像,我們獲取車(chē)輛號(hào)牌的圖像,并嘗試提取車(chē)輛詳細(xì)信息。車(chē)牌識(shí)別使用第二個(gè)模型完成,該模型接收帶有車(chē)牌的輸入作為汽車(chē)圖像。一旦完成了車(chē)輛ID,我們便將詳細(xì)信息傳遞到虛擬數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)包含車(chē)牌持有人的數(shù)據(jù)以及車(chē)輛的詳細(xì)信息。根據(jù)數(shù)據(jù)驗(yàn)證,我們將產(chǎn)生罰款,該罰款將直接發(fā)送到違規(guī)者的家庭住址。軟件架構(gòu)
網(wǎng)頁(yè)抓取圖片
項(xiàng)目始于確定要使用的數(shù)據(jù)集的問(wèn)題。在我們的項(xiàng)目中,在線沖浪幾乎無(wú)法為我們提供可用于我們項(xiàng)目的現(xiàn)有數(shù)據(jù)集。因此,我們決定應(yīng)用網(wǎng)絡(luò)抓取收集戴口罩和沒(méi)戴口罩的圖像。我們使用Beautiful Soap and Requests庫(kù)從網(wǎng)站下載圖像并將其保存到包含戴口罩和沒(méi)帶口罩駕駛員的不同文件夾中。我們從下面的URL中提取了數(shù)據(jù),這些URL由已屏蔽圖像和未屏蔽圖像組成。鏈接url1 = https://www.gettyimages.in/photos/driving-mask?page=鏈接url2 = https://www.gettyimages.in/photos/driving-without-mask?page=下面是一段代碼,演示了Web上的圖像抓取。from bs4 import *
import requests as rq
import os
url1 = 'https://www.gettyimages.in/photos/driving-mask?page='
url2 = '&phrase=driving%20mask&sort=mostpopular'
url_list=[]
Links = []
for i in range(1,56):
full_url = url1+str(i)+url2
url_list.a(chǎn)ppend(full_url)
for lst in url_list:
r2 = rq.get(lst)
soup = BeautifulSoup(r2.text, 'html.parser')
x=soup.select('img[src^="https://media.gettyimages.com/photos/"]')
for img in x:
Links.a(chǎn)ppend(img['src'])
print(len(Links))
for index, img_link in enumerate(Links):
if i <= len(Links):
img_data = rq.get(img_link).content
with open("Masked_Drivers/" + str(index + 1) + '.jpg', 'wb+') as f:
f.write(img_data)
i += 1
圖像預(yù)處理在將圖像發(fā)送到模型之前,我們需要應(yīng)用一些清理技術(shù),例如圖像大小調(diào)整圖像的灰度和將像素重新縮放為較低的值。之后,圖像和目標(biāo)將保存在陣列中。import cv2,os
data_path='Dataset'
categories=os.listdir(data_path)
labels=[i for i in range(len(categories))]
label_dict=dict(zip(categories,labels)) #empty dictionary
print(label_dict)
print(categories)
print(labels)
img_size=100
data=[]
target=[]
img_size=100
data=[]
target=[]
for category in categories:
folder_path=os.path.join(data_path,category)
img_names=os.listdir(folder_path)
for img_name in img_names:
img_path=os.path.join(folder_path,img_name)
img=cv2.imread(img_path)
try:
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#Coverting the image into gray scale
resized=cv2.resize(gray,(img_size,img_size))
#resizing the gray scale into 50x50, since we need a fixed common size for all the images in the dataset
data.a(chǎn)ppend(resized)
target.a(chǎn)ppend(label_dict[category])
#appending the image and the label(categorized) into the list (dataset)
except Exception as e:
print('Exception:',e)
import numpy as np
data=np.a(chǎn)rray(data)/255.0
data=np.reshape(data,(data.shape[0],img_size,img_size,1))
target=np.a(chǎn)rray(target)
from keras.utils import np_utils
new_target=np_utils.to_categorical(target)
np.save('data',data)
np.save('target',new_target)
建立模型在這里,我們使用Keras的Sequential設(shè)計(jì)CNN模型。使用大約200個(gè)神經(jīng)元作為輸入來(lái)構(gòu)建CNN。應(yīng)用激活函數(shù)和最大池化技術(shù)后,我們將獲得另一組輸出特征,這些特征將通過(guò)Conv2D的另一層傳遞。最后,我們從softmax中獲得2個(gè)輸出,它們代表輸入圖像的戴口罩或未戴口罩狀態(tài)。from keras.models import Sequential
from keras.layers import Dense,Activation,F(xiàn)latten,Dropout
from keras.layers import Conv2D,MaxPooling2D
from keras.callbacks import ModelCheckpoint
model=Sequential()
model.a(chǎn)dd(Conv2D(200,(3,3),input_shape=data.shape[1:]))
model.a(chǎn)dd(Activation('relu'))
model.a(chǎn)dd(MaxPooling2D(pool_size=(2,2)))
model.a(chǎn)dd(Conv2D(100,(3,3)))
model.a(chǎn)dd(Activation('relu'))
model.a(chǎn)dd(MaxPooling2D(pool_size=(2,2)))
model.a(chǎn)dd(Flatten())
model.a(chǎn)dd(Dropout(0.5))
model.a(chǎn)dd(Dense(50,activation='relu'))
model.a(chǎn)dd(Dense(2,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
訓(xùn)練和測(cè)試模型構(gòu)建CNN模型后,我們將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集。后來(lái),我們通過(guò)設(shè)置各種參數(shù)(例如時(shí)期,訓(xùn)練集,驗(yàn)證集和驗(yàn)證拆分值),在訓(xùn)練和測(cè)試數(shù)據(jù)上擬合CNN模型。from sklearn.model_selection import train_test_split
train_data,test_data,train_target,test_target=train_test_split(data,target,test_size=0.4)
checkpoint = ModelCheckpoint('model-{epoch:03d}.model',monitor='val_loss',verbose=0,save_best_only=True,mode='auto')
history=model.fit(train_data,train_target,epochs=20,callbacks=[checkpoint],validation_split=0.1)

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車(chē)研發(fā)中心重磅落地,寶馬家門(mén)口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專(zhuān)題
- 1 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 2 人形機(jī)器人,正狂奔在批量交付的曠野
- 3 宇樹(shù)機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 5 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 6 2025年8月人工智能投融資觀察
- 7 8 a16z最新AI百?gòu)?qiáng)榜:硅谷頂級(jí)VC帶你讀懂全球生成式AI賽道最新趨勢(shì)
- 9 Manus跑路,大廠掉線,只能靠DeepSeek了
- 10 地平線的野心:1000萬(wàn)套HSD上車(chē)