0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用命令行界面和Python對實時網(wǎng)絡(luò)攝像頭中的物體進(jìn)行檢測

新機器視覺 ? 來源:小白玩轉(zhuǎn)Python ? 2023-05-15 09:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

介紹

目標(biāo)檢測是計算機視覺的一個子領(lǐng)域,主要涉及在圖像或視頻中以一定的置信度識別和定位物體。識別出的物體通常帶有一個邊界框,提供了關(guān)于物體在場景中的性質(zhì)和位置的信息。

自2015年YOLO(You Only Look Once)問世以來,它的系統(tǒng)以驚人的準(zhǔn)確性和速度實現(xiàn)了實時目標(biāo)檢測,震驚了計算機視覺領(lǐng)域。自那時以來,YOLO已經(jīng)進(jìn)行了多次改進(jìn),提高了預(yù)測準(zhǔn)確性和效率,最終推出了最新的成員:Ultralytics的YOLOv8。

YOLOv8有五個版本:nano(n)、small(s)、medium(m)、large(l)和extra large(x)。它們的改進(jìn)分別可以通過它們在COCO val2017數(shù)據(jù)集上的平均精度(mAP)和延遲進(jìn)行評估。

b7d3a29e-f2b5-11ed-90ce-dac502259ad0.png

與以前的版本相比,YOLOv8不僅更快、更準(zhǔn)確,而且實現(xiàn)這一性能所需的參數(shù)更少,而且還配備了直觀易用的命令行界面(CLI)和Python軟件包,為用戶和開發(fā)人員提供更無縫的體驗。

在本文中,我將演示如何使用CLI和Python來應(yīng)用YOLOv8來檢測靜態(tài)圖像、視頻和實時網(wǎng)絡(luò)攝像頭中的物體。

安裝

要開始使用YOLOv8,您只需要在終端中運行以下命令即可:

pip install ultralytics

這將通過ultralytics pip包安裝YOLOv8。

圖像檢測

靜態(tài)圖像中的目標(biāo)檢測在各種領(lǐng)域(如監(jiān)控、醫(yī)學(xué)成像或零售分析)中已被證明是有用的。無論您選擇在哪個領(lǐng)域應(yīng)用您的檢測系統(tǒng),YOLOv8都使您可以輕松實現(xiàn)。下面是我們要對其進(jìn)行目標(biāo)檢測的原始圖像:一張擁擠城市中的交通照片。

為了運行YOLOv8,我們將研究CLI和Python兩種實現(xiàn)方式。雖然在這種特定情況下我們將使用jpg圖像,但YOLOv8支持各種不同的圖像格式。

CLI

假設(shè)我們想在一張圖片上運行超大型的YOLOv8x(我們將其命名為img.jpg),則可以在CLI中輸入以下命令:

yolo detect predict model=yolov8x.pt source="img.jpg" save=True

在這里,我們指定以下參數(shù):detect用于物體檢測,predict用于執(zhí)行預(yù)測任務(wù),model用于選擇模型版本,source用于提供我們圖片的文件路徑,save用于保存處理過的圖片及其對象的邊界框以及它們的預(yù)測類別和類別概率。

Python

在Python中,可以使用以下直觀且低代碼的解決方案實現(xiàn)完全相同的任務(wù):

from ultralytics import YOLO


model = YOLO('yolov8x.pt')
results = model('img.jpg', save=True)

無論是使用CLI還是Python,

我們可以清楚地看到它檢測到的每個對象周圍的邊界框,以及它們對應(yīng)的類標(biāo)簽和概率。

視頻檢測

在視頻文件上執(zhí)行對象檢測與圖像文件幾乎相同,唯一的區(qū)別是源文件格式。與圖像一樣,YOLOv8支持各種不同的視頻格式,可以作為模型的輸入進(jìn)行處理。在我們的情況下,我們將使用mp4文件。

讓我們再次看一下CLI和Python實現(xiàn)。為了更快的計算,我們現(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)行物體檢測之前,讓我們檢查一下我們的原始 vid.mp4 文件:

視頻顯示了一個繁忙的城市場景,包括汽車、公交車、卡車和騎自行車的人,以及右側(cè)的一些人顯然在等公交車。在使用 YOLOv8 的中等版本處理此文件后,我們得到了以下結(jié)果。

b90570ac-f2b5-11ed-90ce-dac502259ad0.png

同樣,我們可以看到 YOLOv8m 在準(zhǔn)確捕捉場景中的對象方面做得非常好。它甚至可以檢測到作為較大整體的一部分的較小的物體,例如騎自行車的人佩戴的背包。

實時檢測

最后,讓我們看一下在實時網(wǎng)絡(luò)攝像頭視頻中檢測對象所需的內(nèi)容。為此,我將使用我的個人網(wǎng)絡(luò)攝像頭,就像之前一樣,既有 CLI 方法,也有 Python 方法。為了減少延遲并減少視頻中的滯后,我將使用輕量級的 YOLOv8 的納米版本。

CLI

yolo detect predict model=yolov8n.pt source=0 show=True

這些參數(shù)大部分與我們上面看到的用于圖像和視頻文件的參數(shù)相同,唯一不同的是source參數(shù),它允許我們指定要使用哪個視頻源。在我的情況下,它是內(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 在實時網(wǎng)絡(luò)攝像頭源上的示例圖。

ba85079e-f2b5-11ed-90ce-dac502259ad0.png

太棒了!盡管視頻質(zhì)量較低,光照條件不佳,YOLOv8仍然能夠很好地捕捉到對象,甚至還能檢測到背景中的一些物體,例如左側(cè)的橄欖油和醋瓶以及右側(cè)的水槽。

值得注意的是,盡管這些直觀的CLI命令和低代碼Python解決方案是快速開始對象檢測任務(wù)的好方法,但它們在進(jìn)行自定義配置時存在一定的局限性。例如,如果我們想要配置邊界框的美學(xué)效果或執(zhí)行簡單的任務(wù),例如計算和顯示在任何給定時間檢測到的對象數(shù)量,我們將不得不使用諸如cv2或supervision等包來編寫自己的自定義實現(xiàn)。

實際上,上面的網(wǎng)絡(luò)攝像頭錄像是使用以下Python代碼記錄的,以調(diào)整網(wǎng)絡(luò)攝像頭的分辨率和自定義定義邊界框及其注釋。(注:這主要是為了使上面的GIF更具表現(xiàn)力。上面顯示的CLI和Python實現(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)于其前身,而且還通過極易使用的CLI和低代碼Python解決方案大大提高了用戶體驗。它還提供五種不同的模型版本,使用戶有機會根據(jù)其個人需求和對延遲和準(zhǔn)確性的容忍度進(jìn)行選擇。

無論您的目標(biāo)是在靜態(tài)圖像、視頻或現(xiàn)場網(wǎng)絡(luò)攝像頭上執(zhí)行對象檢測,YOLOv8都能夠以無縫的方式完成。但是,如果您的應(yīng)用程序需要自定義配置,則可能需要使用其他計算機視覺包,例如cv2和supervision。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機視覺
    +關(guān)注

    關(guān)注

    9

    文章

    1708

    瀏覽量

    46704
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4826

    瀏覽量

    86531
  • CLI
    CLI
    +關(guān)注

    關(guān)注

    1

    文章

    80

    瀏覽量

    8783

原文標(biāo)題:目標(biāo)檢測:如何有效實現(xiàn)YOLOv8

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何從攝像頭中獲取圖像并保存和實時顯示

    開發(fā)環(huán)境,包括相關(guān)源的更新,庫的安裝,按照上次blog中的介紹,安裝好Python-opencv和導(dǎo)入cv2庫后,就可以進(jìn)行接下來我們今天的學(xué)習(xí)了,今天將叫大家進(jìn)一步實現(xiàn)如何從攝像頭中獲取圖像,同時
    發(fā)表于 09-25 15:15

    labview 調(diào)用命令行燒錄時如何實時顯示過程和進(jìn)度?

    例如使用命令行進(jìn)行自動燒錄時,利用系統(tǒng)命令VI可以實現(xiàn)控制燒錄器自動燒錄,但是命令行運行后會跳出命令提示符但是不會顯示燒錄的過程和進(jìn)度,只有當(dāng)燒錄結(jié)束后才會在輸出端子出輸出整個燒錄的過
    發(fā)表于 08-29 11:54

    cmd網(wǎng)絡(luò)經(jīng)典命令行

    cmd網(wǎng)絡(luò)經(jīng)典命令行:
    發(fā)表于 06-11 15:17 ?36次下載
    cmd<b class='flag-5'>網(wǎng)絡(luò)</b>經(jīng)典<b class='flag-5'>命令行</b>

    用命令行管理IIS的FTP站點

    用命令行管理IIS的FTP站點   為了實現(xiàn)在Internet中快速共享網(wǎng)絡(luò)資源的目的,很多用戶使用IIS服務(wù)器內(nèi)置的FTP組件架設(shè)FTP服務(wù)器。
    發(fā)表于 01-30 17:25 ?1030次閱讀

    如何使用命令行在Linux中查找文件?

    對于Linux新用戶來說,在Linux中查找文件可能有點困難。但是,在適當(dāng)?shù)闹笇?dǎo)下,任何人都可以創(chuàng)建文件快捷方式或找到其Linux系統(tǒng)中有多少文件。 我們必須使用命令行來查找文件或特定文件名。也稱為
    的頭像 發(fā)表于 03-23 14:55 ?4716次閱讀

    如何在Linux命令行中運行Python腳本

    Python 是一種高級編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機器學(xué)習(xí)、Web 開發(fā)等領(lǐng)域。在 Linux 操作系統(tǒng)中,Python 是一個默認(rèn)安裝的解釋器,用戶可以通過命令行界面(CLI)
    的頭像 發(fā)表于 05-12 14:49 ?2088次閱讀

    OneCommand Manager命令行界面用戶手冊

    電子發(fā)燒友網(wǎng)站提供《OneCommand Manager命令行界面用戶手冊.pdf》資料免費下載
    發(fā)表于 08-22 11:09 ?0次下載
    OneCommand Manager<b class='flag-5'>命令行</b><b class='flag-5'>界面</b>用戶手冊

    OneCommand ManagerCommand命令行界面 版本10.6

    電子發(fā)燒友網(wǎng)站提供《OneCommand ManagerCommand命令行界面 版本10.6.pdf》資料免費下載
    發(fā)表于 08-22 10:52 ?0次下載
    OneCommand ManagerCommand<b class='flag-5'>命令行</b><b class='flag-5'>界面</b> 版本10.6

    用命令行工具ADB(Android Debug Bridge)常見的ADB命令

    ADB(Android Debug Bridge)是一種通用命令行工具,可以讓您通過計算機與設(shè)備通信。
    的頭像 發(fā)表于 11-05 11:26 ?1995次閱讀

    linux命令行與shell編程實戰(zhàn)

    Linux命令行與Shell編程實戰(zhàn)主要涉及以下內(nèi)容: Linux命令行基礎(chǔ):學(xué)習(xí)Linux命令行的基本操作,如文件管理、進(jìn)程管理、網(wǎng)絡(luò)配置等。熟悉使
    的頭像 發(fā)表于 11-08 10:57 ?1069次閱讀

    linux虛擬機怎么調(diào)出命令行

    快捷鍵組合Ctrl+Alt+F1 6來切換到命令行界面。如果系統(tǒng)在虛擬機中,則可以使用Ctrl+Alt+shift+F1 6組合鍵來切換到命令行界面。在
    的頭像 發(fā)表于 11-08 11:28 ?3670次閱讀

    linux虛擬機命令行界面如何操作

    Linux虛擬機是一種運行在虛擬化環(huán)境下的操作系統(tǒng),與物理機器相似,它也有一個命令行界面,也稱為終端或控制臺。通過命令行界面,您可以使用命令
    的頭像 發(fā)表于 11-17 09:57 ?2231次閱讀

    pycharm命令行終端運行代碼

    Python是一種非常流行的編程語言,許多開發(fā)者使用它來編寫各種應(yīng)用程序和腳本。為了方便開發(fā)者編寫和測試代碼,PyCharm是一種集成開發(fā)環(huán)境(IDE),它提供了許多功能和工具,其中包括命令行終端
    的頭像 發(fā)表于 11-22 11:20 ?5925次閱讀

    eclipse怎么使用命令行

    命令行中使用Eclipse來完成一些特定的任務(wù)。本文將詳細(xì)介紹如何在命令行中使用Eclipse。 首先,我們需要確保已經(jīng)正確安裝了JDK(Java Development Kit)和Eclipse
    的頭像 發(fā)表于 12-06 11:26 ?3682次閱讀

    HarmonyOS開發(fā):【基于命令行(安裝庫和工具集)】

    使用命令行進(jìn)行設(shè)備開發(fā)時,可以通過以下步驟安裝編譯OpenHarmony需要的庫和工具。
    的頭像 發(fā)表于 04-25 21:03 ?765次閱讀
    HarmonyOS開發(fā):【基于<b class='flag-5'>命令行</b>(安裝庫和工具集)】

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品