介紹
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺(jué)的一個(gè)子領(lǐng)域,主要涉及在圖像或視頻中以一定的置信度識(shí)別和定位物體。識(shí)別出的物體通常帶有一個(gè)邊界框,提供了關(guān)于物體在場(chǎng)景中的性質(zhì)和位置的信息。
自2015年YOLO(You Only Look Once)問(wèn)世以來(lái),它的系統(tǒng)以驚人的準(zhǔn)確性和速度實(shí)現(xiàn)了實(shí)時(shí)目標(biāo)檢測(cè),震驚了計(jì)算機(jī)視覺(jué)領(lǐng)域。自那時(shí)以來(lái),YOLO已經(jīng)進(jìn)行了多次改進(jìn),提高了預(yù)測(cè)準(zhǔn)確性和效率,最終推出了最新的成員:Ultralytics的YOLOv8。
YOLOv8有五個(gè)版本:nano(n)、small(s)、medium(m)、large(l)和extra large(x)。它們的改進(jìn)分別可以通過(guò)它們?cè)贑OCO val2017數(shù)據(jù)集上的平均精度(mAP)和延遲進(jìn)行評(píng)估。
與以前的版本相比,YOLOv8不僅更快、更準(zhǔn)確,而且實(shí)現(xiàn)這一性能所需的參數(shù)更少,而且還配備了直觀易用的命令行界面(CLI)和Python軟件包,為用戶和開(kāi)發(fā)人員提供更無(wú)縫的體驗(yàn)。
在本文中,我將演示如何使用CLI和Python來(lái)應(yīng)用YOLOv8來(lái)檢測(cè)靜態(tài)圖像、視頻和實(shí)時(shí)網(wǎng)絡(luò)攝像頭中的物體。
安裝
要開(kāi)始使用YOLOv8,您只需要在終端中運(yùn)行以下命令即可:
pip install ultralytics
這將通過(guò)ultralytics pip包安裝YOLOv8。
圖像檢測(cè)
靜態(tài)圖像中的目標(biāo)檢測(cè)在各種領(lǐng)域(如監(jiān)控、醫(yī)學(xué)成像或零售分析)中已被證明是有用的。無(wú)論您選擇在哪個(gè)領(lǐng)域應(yīng)用您的檢測(cè)系統(tǒng),YOLOv8都使您可以輕松實(shí)現(xiàn)。下面是我們要對(duì)其進(jìn)行目標(biāo)檢測(cè)的原始圖像:一張擁擠城市中的交通照片。
為了運(yùn)行YOLOv8,我們將研究CLI和Python兩種實(shí)現(xiàn)方式。雖然在這種特定情況下我們將使用jpg圖像,但YOLOv8支持各種不同的圖像格式。
CLI
假設(shè)我們想在一張圖片上運(yùn)行超大型的YOLOv8x(我們將其命名為img.jpg),則可以在CLI中輸入以下命令:
yolo detect predict model=yolov8x.pt source="img.jpg" save=True
在這里,我們指定以下參數(shù):detect用于物體檢測(cè),predict用于執(zhí)行預(yù)測(cè)任務(wù),model用于選擇模型版本,source用于提供我們圖片的文件路徑,save用于保存處理過(guò)的圖片及其對(duì)象的邊界框以及它們的預(yù)測(cè)類別和類別概率。
Python
在Python中,可以使用以下直觀且低代碼的解決方案實(shí)現(xiàn)完全相同的任務(wù):
from ultralytics import YOLO model = YOLO('yolov8x.pt') results = model('img.jpg', save=True)
無(wú)論是使用CLI還是Python,
我們可以清楚地看到它檢測(cè)到的每個(gè)對(duì)象周圍的邊界框,以及它們對(duì)應(yīng)的類標(biāo)簽和概率。
視頻檢測(cè)
在視頻文件上執(zhí)行對(duì)象檢測(cè)與圖像文件幾乎相同,唯一的區(qū)別是源文件格式。與圖像一樣,YOLOv8支持各種不同的視頻格式,可以作為模型的輸入進(jìn)行處理。在我們的情況下,我們將使用mp4文件。
讓我們?cè)俅慰匆幌翪LI和Python實(shí)現(xiàn)。為了更快的計(jì)算,我們現(xiàn)在將使用YOLOv8m模型,而不是特別大的版本。
CLI
yolo detect predict model=yolov8m.pt source="vid.mp4" save=True
python
from ultralytics import YOLO model = YOLO('yolov8m.pt') results = model('vid.mp4', save=True)
首先,在進(jìn)行物體檢測(cè)之前,讓我們檢查一下我們的原始 vid.mp4 文件:
視頻顯示了一個(gè)繁忙的城市場(chǎng)景,包括汽車、公交車、卡車和騎自行車的人,以及右側(cè)的一些人顯然在等公交車。在使用 YOLOv8 的中等版本處理此文件后,我們得到了以下結(jié)果。
同樣,我們可以看到 YOLOv8m 在準(zhǔn)確捕捉場(chǎng)景中的對(duì)象方面做得非常好。它甚至可以檢測(cè)到作為較大整體的一部分的較小的物體,例如騎自行車的人佩戴的背包。
實(shí)時(shí)檢測(cè)
最后,讓我們看一下在實(shí)時(shí)網(wǎng)絡(luò)攝像頭視頻中檢測(cè)對(duì)象所需的內(nèi)容。為此,我將使用我的個(gè)人網(wǎng)絡(luò)攝像頭,就像之前一樣,既有 CLI 方法,也有 Python 方法。為了減少延遲并減少視頻中的滯后,我將使用輕量級(jí)的 YOLOv8 的納米版本。
CLI
yolo detect predict model=yolov8n.pt source=0 show=True
這些參數(shù)大部分與我們上面看到的用于圖像和視頻文件的參數(shù)相同,唯一不同的是source參數(shù),它允許我們指定要使用哪個(gè)視頻源。在我的情況下,它是內(nèi)置網(wǎng)絡(luò)攝像頭(0)。
python
from ultralytics import YOLO model = YOLO('yolov8n.pt') model.predict(source="0", show=True)
同樣,我們可以使用超低代碼的Python解決方案執(zhí)行相同的任務(wù)。
這里有一張 YOLOv8n 在實(shí)時(shí)網(wǎng)絡(luò)攝像頭源上的示例圖。
太棒了!盡管視頻質(zhì)量較低,光照條件不佳,YOLOv8仍然能夠很好地捕捉到對(duì)象,甚至還能檢測(cè)到背景中的一些物體,例如左側(cè)的橄欖油和醋瓶以及右側(cè)的水槽。
值得注意的是,盡管這些直觀的CLI命令和低代碼Python解決方案是快速開(kāi)始對(duì)象檢測(cè)任務(wù)的好方法,但它們?cè)谶M(jìn)行自定義配置時(shí)存在一定的局限性。例如,如果我們想要配置邊界框的美學(xué)效果或執(zhí)行簡(jiǎn)單的任務(wù),例如計(jì)算和顯示在任何給定時(shí)間檢測(cè)到的對(duì)象數(shù)量,我們將不得不使用諸如cv2或supervision等包來(lái)編寫(xiě)自己的自定義實(shí)現(xiàn)。
實(shí)際上,上面的網(wǎng)絡(luò)攝像頭錄像是使用以下Python代碼記錄的,以調(diào)整網(wǎng)絡(luò)攝像頭的分辨率和自定義定義邊界框及其注釋。(注:這主要是為了使上面的GIF更具表現(xiàn)力。上面顯示的CLI和Python實(shí)現(xiàn)足以產(chǎn)生類似的結(jié)果。)
import cv2 import supervision as sv from ultralytics import YOLO def main(): # to save the video writer= cv2.VideoWriter('webcam_yolo.mp4', cv2.VideoWriter_fourcc(*'DIVX'), 7, (1280, 720)) # define resolution cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # specify the model model = YOLO("yolov8n.pt") # customize the bounding box box_annotator = sv.BoxAnnotator( thickness=2, text_thickness=2, text_scale=1 ) while True: ret, frame = cap.read() result = model(frame, agnostic_nms=True)[0] detections = sv.Detections.from_yolov8(result) labels = [ f"{model.model.names[class_id]} {confidence:0.2f}" for _, confidence, class_id, _ in detections ] frame = box_annotator.annotate( scene=frame, detections=detections, labels=labels ) writer.write(frame) cv2.imshow("yolov8", frame) if (cv2.waitKey(30) == 27): # break with escape key break cap.release() writer.release() cv2.destroyAllWindows() if __name__ == "__main__": main()
結(jié)論
YOLOv8不僅在準(zhǔn)確性和速度方面優(yōu)于其前身,而且還通過(guò)極易使用的CLI和低代碼Python解決方案大大提高了用戶體驗(yàn)。它還提供五種不同的模型版本,使用戶有機(jī)會(huì)根據(jù)其個(gè)人需求和對(duì)延遲和準(zhǔn)確性的容忍度進(jìn)行選擇。
無(wú)論您的目標(biāo)是在靜態(tài)圖像、視頻或現(xiàn)場(chǎng)網(wǎng)絡(luò)攝像頭上執(zhí)行對(duì)象檢測(cè),YOLOv8都能夠以無(wú)縫的方式完成。但是,如果您的應(yīng)用程序需要自定義配置,則可能需要使用其他計(jì)算機(jī)視覺(jué)包,例如cv2和supervision。
審核編輯:劉清
-
計(jì)算機(jī)視覺(jué)
+關(guān)注
關(guān)注
8文章
1700瀏覽量
46131 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
85040 -
CLI
+關(guān)注
關(guān)注
1文章
79瀏覽量
8600
原文標(biāo)題:目標(biāo)檢測(cè):如何有效實(shí)現(xiàn)YOLOv8
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何從攝像頭中獲取圖像并保存和實(shí)時(shí)顯示
labview 調(diào)用命令行燒錄時(shí)如何實(shí)時(shí)顯示過(guò)程和進(jìn)度?
用命令行管理IIS的FTP站點(diǎn)
如何使用命令行在Linux中查找文件?
如何在Linux命令行中運(yùn)行Python腳本
OneCommand Manager命令行界面用戶手冊(cè)
![OneCommand Manager<b class='flag-5'>命令行</b><b class='flag-5'>界面</b>用戶手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
OneCommand ManagerCommand命令行界面 版本10.6
![OneCommand ManagerCommand<b class='flag-5'>命令行</b><b class='flag-5'>界面</b> 版本10.6](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
通用命令行工具ADB(Android Debug Bridge)常見(jiàn)的ADB命令
linux命令行與shell編程實(shí)戰(zhàn)
linux虛擬機(jī)怎么調(diào)出命令行
linux虛擬機(jī)命令行界面如何操作
pycharm命令行終端運(yùn)行代碼
eclipse怎么使用命令行
HarmonyOS開(kāi)發(fā):【基于命令行(安裝庫(kù)和工具集)】
![HarmonyOS開(kāi)發(fā):【基于<b class='flag-5'>命令行</b>(安裝庫(kù)和工具集)】](https://file1.elecfans.com/web2/M00/C5/CD/wKgZomYCdwyAIFf5AAB_7E1pFms943.jpg)
評(píng)論