OpenCV使用Yolov3進行預(yù)測

源代碼來自小賽的文章,他的解釋更加詳細,這里我做記錄用鸠蚪。

```

import numpyas np

import cv2as cv

import os

import time

yolo_dir ='/home/hessesummer/github/NTS-Net-my/yolov3'? # YOLO文件路徑

weightsPath = os.path.join(yolo_dir, 'yolov3.weights')# 權(quán)重文件

configPath = os.path.join(yolo_dir, 'yolov3.cfg')# 配置文件

labelsPath = os.path.join(yolo_dir, 'coco.names')# label名稱

imgPath = os.path.join(yolo_dir, 'test.jpg')# 測試圖像

CONFIDENCE =0.5? # 過濾弱檢測的最小概率

THRESHOLD =0.4? # 非最大值抑制閾值

# 加載網(wǎng)絡(luò)、配置權(quán)重

net = cv.dnn.readNetFromDarknet(configPath, weightsPath)# #? 利用下載的文件

print("[INFO] loading YOLO from disk...")# # 可以打印下信息

# 加載圖片、轉(zhuǎn)為blob格式樊破、送入網(wǎng)絡(luò)輸入層

img = cv.imread(imgPath)

blobImg = cv.dnn.blobFromImage(img, 1.0/255.0, (416, 416), None, True, False)# # net需要的輸入是blob格式的,用blobFromImage這個函數(shù)來轉(zhuǎn)格式

net.setInput(blobImg)# # 調(diào)用setInput函數(shù)將圖片送入輸入層

# 獲取網(wǎng)絡(luò)輸出層信息(所有輸出層的名字)唆铐,設(shè)定并前向傳播

outInfo = net.getUnconnectedOutLayersNames()# # 前面的yolov3架構(gòu)也講了哲戚,yolo在每個scale都有輸出,outInfo是每個scale的名字信息艾岂,供net.forward使用

start = time.time()

layerOutputs = net.forward(outInfo)# 得到各個輸出層的顺少、各個檢測框等信息,是二維結(jié)構(gòu)王浴。

end = time.time()

print("[INFO] YOLO took {:.6f} seconds".format(end - start))# # 可以打印下信息

# 拿到圖片尺寸

(H, W) = img.shape[:2]

# 過濾layerOutputs

# layerOutputs的第1維的元素內(nèi)容: [center_x, center_y, width, height, objectness, N-class score data]

# 過濾后的結(jié)果放入:

boxes = []# 所有邊界框(各層結(jié)果放一起)

confidences = []# 所有置信度

classIDs = []# 所有分類ID

# # 1)過濾掉置信度低的框框

for outin layerOutputs:# 各個輸出層

? ? for detectionin out:# 各個框框

# 拿到置信度

? ? ? ? scores = detection[5:]# 各個類別的置信度

? ? ? ? classID = np.argmax(scores)# 最高置信度的id即為分類id

? ? ? ? confidence = scores[classID]# 拿到置信度

# 根據(jù)置信度篩查

? ? ? ? if confidence > CONFIDENCE:

box = detection[0:4] * np.array([W, H, W, H])# 將邊界框放會圖片尺寸

? ? ? ? ? ? (centerX, centerY, width, height) = box.astype("int")

x =int(centerX - (width /2))

y =int(centerY - (height /2))

boxes.append([x, y, int(width), int(height)])

confidences.append(float(confidence))

classIDs.append(classID)

# # 2)應(yīng)用非最大值抑制(non-maxima suppression脆炎,nms)進一步篩掉

idxs = cv.dnn.NMSBoxes(boxes, confidences, CONFIDENCE, THRESHOLD)# boxes中,保留的box的索引index存入idxs

# 得到labels列表

with open(labelsPath, 'rt')as f:

labels = f.read().rstrip('\n').split('\n')

# 應(yīng)用檢測結(jié)果

np.random.seed(42)

COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8")# 框框顯示顏色叼耙,每一類有不同的顏色腕窥,每種顏色都是由RGB三個值組成的,所以size為(len(labels), 3)

if len(idxs) >0:

for iin idxs.flatten():# indxs是二維的筛婉,第0維是輸出層簇爆,所以這里把它展平成1維

? ? ? ? (x, y) = (boxes[i][0], boxes[i][1])

(w, h) = (boxes[i][2], boxes[i][3])

color = [int(c)for cin COLORS[classIDs[i]]]

cv.rectangle(img, (x, y), (x+w, y+h), color, 2)# 線條粗細為2px

? ? ? ? text ="{}: {:.4f}".format(labels[classIDs[i]], confidences[i])

cv.putText(img, text, (x, y-5), cv.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)# cv.FONT_HERSHEY_SIMPLEX字體風(fēng)格、0.5字體大小爽撒、粗細2px

cv.imshow('detected image', img)

cv.waitKey(0)

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末入蛆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子硕勿,更是在濱河造成了極大的恐慌哨毁,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件源武,死亡現(xiàn)場離奇詭異扼褪,居然都是意外死亡想幻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門话浇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脏毯,“玉大人,你說我怎么就攤上這事幔崖∈车辏” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵赏寇,是天一觀的道長吉嫩。 經(jīng)常有香客問我,道長嗅定,這世上最難降的妖魔是什么自娩? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮露戒,結(jié)果婚禮上椒功,老公的妹妹穿的比我還像新娘。我一直安慰自己智什,他們只是感情好动漾,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荠锭,像睡著了一般旱眯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上证九,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天删豺,我揣著相機與錄音,去河邊找鬼愧怜。 笑死呀页,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拥坛。 我是一名探鬼主播蓬蝶,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猜惋!你這毒婦竟也來了丸氛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤著摔,失蹤者是張志新(化名)和其女友劉穎缓窜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡禾锤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年私股,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片时肿。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡庇茫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出螃成,到底是詐尸還是另有隱情,我是刑警寧澤查坪,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布寸宏,位于F島的核電站,受9級特大地震影響偿曙,放射性物質(zhì)發(fā)生泄漏氮凝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一望忆、第九天 我趴在偏房一處隱蔽的房頂上張望罩阵。 院中可真熱鬧,春花似錦启摄、人聲如沸稿壁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傅是。三九已至,卻和暖如春蕾羊,著一層夾襖步出監(jiān)牢的瞬間喧笔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工龟再, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留书闸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓利凑,卻偏偏與公主長得像浆劲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子截碴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354