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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

新機器視覺 ? 來源:小白玩轉Python ? 2023-05-15 09:15 ? 次閱讀

介紹

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

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

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

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

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

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

安裝

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

pip install ultralytics

這將通過ultralytics pip包安裝YOLOv8。

圖像檢測

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

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

CLI

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

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

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

Python

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

from ultralytics import YOLO


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

無論是使用CLI還是Python,

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

視頻檢測

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

首先,在進行物體檢測之前,讓我們檢查一下我們的原始 vid.mp4 文件:

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

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

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

實時檢測

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

CLI

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

這些參數(shù)大部分與我們上面看到的用于圖像和視頻文件的參數(shù)相同,唯一不同的是source參數(shù),它允許我們指定要使用哪個視頻源。在我的情況下,它是內置網(wǎng)絡攝像頭(0)。

python

from ultralytics import YOLO


model = YOLO('yolov8n.pt')
model.predict(source="0", show=True)

同樣,我們可以使用超低代碼的Python解決方案執(zhí)行相同的任務。

這里有一張 YOLOv8n 在實時網(wǎng)絡攝像頭源上的示例圖。

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

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

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

實際上,上面的網(wǎng)絡攝像頭錄像是使用以下Python代碼記錄的,以調整網(wǎng)絡攝像頭的分辨率和自定義定義邊界框及其注釋。(注:這主要是為了使上面的GIF更具表現(xiàn)力。上面顯示的CLI和Python實現(xiàn)足以產(chǎn)生類似的結果。)

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()

結論

YOLOv8不僅在準確性和速度方面優(yōu)于其前身,而且還通過極易使用的CLI和低代碼Python解決方案大大提高了用戶體驗。它還提供五種不同的模型版本,使用戶有機會根據(jù)其個人需求和對延遲和準確性的容忍度進行選擇。

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






審核編輯:劉清

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

    關注

    8

    文章

    1685

    瀏覽量

    45811
  • python
    +關注

    關注

    53

    文章

    4753

    瀏覽量

    84080
  • CLI
    CLI
    +關注

    關注

    1

    文章

    79

    瀏覽量

    8497

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    labview 調用命令行燒錄時如何實時顯示過程和進度?

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

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

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

    用命令行管理IIS的FTP站點

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

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

    對于Linux新用戶來說,在Linux中查找文件可能有點困難。但是,在適當?shù)闹笇拢魏稳硕伎梢詣?chuàng)建文件快捷方式或找到其Linux系統(tǒng)中有多少文件。 我們必須使用命令行來查找文件或特定文件名。也稱為
    的頭像 發(fā)表于 03-23 14:55 ?4021次閱讀

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

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

    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)是一種通用命令行工具,可以讓您通過計算機與設備通信。
    的頭像 發(fā)表于 11-05 11:26 ?1232次閱讀

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

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

    linux虛擬機怎么調出命令行

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

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

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

    pycharm命令行終端運行代碼

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

    eclipse怎么使用命令行

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

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

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