在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于YOLOv5的視頻計數 — 汽車計數實現

新機器視覺 ? 來源:新機器視覺 ? 2023-11-25 12:11 ? 次閱讀

視頻中計數對象可能看起來有挑戰性,但借助Python和OpenCV的強大功能,變得令人意外地易于實現。在本文中,我們將探討如何使用YOLO(You Only Look Once)目標檢測模型在視頻流或文件中計數對象。我們將該過程分解為簡單的步驟,使初學者能夠輕松跟隨。

本文將分為以下幾個部分:

  • 需求

  • 啟發式:汽車計數

  • 檢測過濾

  • 啟發式:實現

  • 結論

需求

在我們深入了解該過程之前,讓我們確保已安裝所需的庫。主要需要:

  • PyTorch:通過PyTorch Hub,我們將訪問Ultralytics存儲庫以下載Yolov5模型。

  • OpenCV:用于加載、操作和顯示視頻的所有實用程序。

  • Matplotlib(可選):我們將使用此實用程序在多邊形內進行點驗證。

如代碼片段1所示,requirements.txt文件中列出了這些要求。

opencv-python==4.8.1.78
torch==2.1.0
matplotlib==3.8.0
ultralytics==8.0.203
pandas==2.1.2
requests==2.31.0

一旦我們查看了主要要求,就該了解我們將開發用于從視頻中計數對象的啟發式的時間了。

啟發式:汽車計數

在此示例中,我們將使用一個視頻場景,其中將對汽車進行計數。圖2顯示了一個示例幀。

7e1fc1da-8b45-11ee-939d-92fbcf53809c.jpg用于計數汽車的視頻幀

為了計數汽車,我們將使用Yolov5來檢測視頻中的對象。基于檢測到的對象,我們將過濾與汽車、公共汽車和卡車有關的類別。由于檢測基于邊界框(具有坐標xmin、ymin、xmax、ymax的多邊形),我們將需要獲取每個邊界框的中心點(xc, yc),該中心點將是我們對象的參考點。

最后,我們將繪制一個多邊形,該多邊形將是計數對象的參考,也就是說,如果對象的參考點在多邊形內,我們將增加對象計數器,否則計數器不受影響。在下圖中,我們可以看到多邊形和多邊形內的汽車數量的表示。

7e2d92d8-8b45-11ee-939d-92fbcf53809c.jpg檢測(綠色點)、多邊形(紅色線)和計數器

此為止,我們已經知道了需求是什么,以及我們將實施用于計數對象的啟發式的方法。現在可以加載模型:Yolov5 Nano

在本例中,我們將使用Yolov5的nano版本(即yolov5n),我們將通過PyTorch Hub從Ultralytics存儲庫中擴展它。同樣,為了加載和在每一幀上生成迭代器,我們將使用OpenCV(即cv2),下述代碼是具體的實現方式:

import cv2
import torch


VIDEO_PATH="data/traffic.mp4"
HUB="ultralytics/yolov5"
YOLO="yolov5n"


def count_cars(cap: cv2.VideoCapture):


    model = torch.hub.load(HUB, model=YOLO, pretrained=True)


    while cap.isOpened():
        status, frame = cap.read()


        if not status:
            break


        # Detection filtering and heuristic
        # will be implemented here.


        cv2.imshow("frame", frame)


        if cv2.waitKey(10) & 0xFF == ord('q'):
             break


    cap.release()




if __name__ == '__main__':


    cap = cv2.VideoCapture(VIDEO_PATH)
    count_cars(cap)

正如我們所看到的,我們已經定義了count_cars()函數,我們將在整個項目中對其進行更新。在4-6行,我們定義了視頻所在路徑、hub和模型名稱的變量。從那里,讓我們迅速跳到31-32行,在那里通過初始化cap對象加載視頻,然后將其傳遞給count_cars()函數。

返回到第10行,通過PyTorch Hub,我們下載并初始化了yolov5n模型。隨后,在第12行,我們生成一個迭代器,只要有要顯示的幀,它就會保持活動狀態。一旦幀完成,與迭代器相關的對象就會被釋放(第26行)。

在第13行,我們讀取幀,驗證是否成功讀取,并顯示它們(第21行)。在這一部分,將出現一個窗口,用于查看從此迭代器顯示的視頻。最后,第23行是在按q鍵時刪除彈出窗口。

檢測過濾

過濾檢測是指從Yolo預測中提取感興趣的類別的過程。在這種情況下,我們將過濾掉分數大于0.5且類別為汽車、公共汽車或卡車的檢測。同樣,我們將需要找到邊界框的中心點,我們將其用作對象的參考點。下面代碼顯示了這兩個函數的實現。

import pandas as pd


def get_bboxes(preds: object):
    df = preds.pandas().xyxy[0]
    df = df[df["confidence"] >= 0.5]
    df = df[df["name"].isin(["car", "bus", "truck"])]


    return df[["xmin", "ymin", "xmax", "ymax"]].values.astype(int)


def get_center(bbox):
    center = ((bbox[0] + bbox[2]) // 2, (bbox[1] + bbox[3]) // 2)
    return center

正如我們所看到的,我們定義了兩個函數get_bboxes()和get_center()。get_bboxes()函數(第3行)旨在提取所有分數大于0.5并過濾掉已經提到的類別的預測,返回一個坐標形式的邊界框的numpy數組[xmin, ymin, xmax, ymax]。

get_center()函數(第10行)接收一個帶有邊界框坐標的numpy數組,并使用方程xc, yc = (xmin + xmax) // 2, (ymin + ymax) // 2分別計算中心點。

在這一點上,我們已經下載了模型,過濾了預測,并獲得了每個對象的中心點。現在,我們唯一需要的是生成決定啟發式區域的多邊形。因此,讓我們繼續下一節!

啟發式:實現

我們將定義的多邊形可能會因視頻、透視等而有所不同。在這種情況下,例如此示例,我們將使用8個點,如下圖所示:

7e453ba4-8b45-11ee-939d-92fbcf53809c.jpg具有坐標的多邊形

一旦我們定義了多邊形,我們唯一需要做的就是驗證每個對象的參考點是否在多邊形內。如果在多邊形內,我們就會增加一個計數器,如果不在,我們就繼續。

import cv2
import numpy as np
import matplotlib.path as mplPath


POLYGON = np.array([
    [333, 374],
    [403, 470],
    [476, 655],
    [498, 710],
    [1237, 714],
    [1217, 523],
    [1139, 469],
    [1009, 393],
])




def is_valid_detection(xc, yc):
    return mplPath.Path(POLYGON).contains_point((xc, yc))


def count_cars(cap: object):


    model = torch.hub.load(HUB, model=YOLO, pretrained=True)


    while cap.isOpened():
        status, frame = cap.read()


        if not status:
            break


        preds = model(frame)
        bboxes = get_bboxes(preds)


        detections = 0
        for box in bboxes:
            xc, yc = get_center(box)


            if is_valid_detection(xc, yc):
                detections += 1

讓我們注意到在第5行,我們定義了多邊形。在第17行,我們定義了關鍵函數:is_valid_detection(),它旨在驗證參考點(xc, yc)是否在多邊形內。這個函數在第37行調用,如果為真,它會增加有效檢測計數器,否則什么也不做。

最后,為了可視化,我們將添加一些OpenCV行來顯示計數器、每輛檢測到的汽車的參考點和多邊形。

def count_cars(cap: object):


    model = torch.hub.load(HUB, model=YOLO, pretrained=True)
    
    while cap.isOpened():
        status, frame = cap.read()


        if not status:
            break


        preds = model(frame)
        bboxes = get_bboxes(preds)


        detections = 0
        for box in bboxes:
            xc, yc = get_center(box)
            
            if is_valid_detection(xc, yc):
                detections += 1
                
            # Draw poit of reference for each detection
            cv2.circle(img=frame, center=(xc, yc), radius=5, color=(0,255,0), thickness=-1)
            # Draw bounding boxes for each detection
            cv2.rectangle(img=frame, pt1=(box[0], box[1]), pt2=(box[2], box[3]), color=(255, 0, 0), thickness=1)
        # Draw the counter
        cv2.putText(img=frame, text=f"Cars: {detections}", org=(100, 100), fontFace=cv2.FONT_HERSHEY_PLAIN, fontScale=3, color=(0,0,0), thickness=3)
        # Draw the polygon
        cv2.polylines(img=frame, pts=[POLYGON], isClosed=True, color=(0,0,255), thickness=4)
        # Display frame
        cv2.imshow("frame", frame)

結論

在本文中,我們看到了如何從視頻中實現一個對象計數器。我們開發了一種計算汽車、卡車和公共汽車的實現,基于一個定義的多邊形,即如果對象在多邊形內,計數器就會增加。


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

    關注

    32

    文章

    2256

    瀏覽量

    94562
  • 模型
    +關注

    關注

    1

    文章

    3243

    瀏覽量

    48836
  • 目標檢測
    +關注

    關注

    0

    文章

    209

    瀏覽量

    15610

原文標題:基于YOLOv5的視頻計數 — 汽車計數實現

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

收藏 人收藏

    評論

    相關推薦

    YOLOv5】LabVIEW+YOLOv5快速實現實時物體識別(Object Detection)含源碼

    前面我們給大家介紹了基于LabVIEW+YOLOv3/YOLOv4的物體識別(對象檢測),今天接著上次的內容再來看看YOLOv5。本次主要是和大家分享使用LabVIEW快速實現
    的頭像 發表于 03-13 16:01 ?2165次閱讀

    Yolov5算法解讀

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不斷進行升級迭代。 Yolov5YOLOv5s、YOLOv5
    的頭像 發表于 05-17 16:38 ?9121次閱讀
    <b class='flag-5'>Yolov5</b>算法解讀

    YOLOv5】LabVIEW+TensorRT的yolov5部署實戰(含源碼)

    今天主要和大家分享在LabVIEW中使用純TensoRT工具包快速部署并實現yolov5的物體識別
    的頭像 發表于 08-21 22:20 ?1320次閱讀
    【<b class='flag-5'>YOLOv5</b>】LabVIEW+TensorRT的<b class='flag-5'>yolov5</b>部署實戰(含源碼)

    在RK3568教學實驗箱上實現基于YOLOV5的算法物體識別案例詳解

    一、實驗目的 本節視頻的目的是了解YOLOv5模型的用途及流程,并掌握基于YOLOV5算法實現物體識別的方法。 二、實驗原理 YOLO(You Only Look Once!)
    發表于 12-03 14:56

    龍哥手把手教你學視覺-深度學習YOLOV5

    可以實現理想的檢測效果。在本套視頻,有別于常見的深度學習教程以理論為主進行全面講解,以沒有任何深度學習理論基礎的學員學習角度,以實際應用為目標,講解如何設計一個完整的yolov5工業外觀檢測,手把手教學
    發表于 09-03 09:39

    怎樣使用PyTorch Hub去加載YOLOv5模型

    在Python>=3.7.0環境中安裝requirements.txt,包括PyTorch>=1.7。模型和數據集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發表于 07-22 16:02

    如何YOLOv5測試代碼?

    使用文檔“使用 YOLOv5 進行對象檢測”我試圖從文檔第 10 頁訪問以下鏈接(在 i.MX8MP 上部署 yolov5s 的步驟 - NXP 社區) ...但是這樣做時會被拒絕訪問。該文檔沒有說明需要特殊許可才能下載 test.zip 文件。NXP 的人可以提供有關如
    發表于 05-18 06:08

    yolov5模型onnx轉bmodel無法識別出結果如何解決?

    問題描述: 1. yolov5模型pt轉bmodel可以識別出結果。(轉化成功,結果正確) 2. yolov5模型pt轉onnx轉bmodel可以無法識別出結果。(轉化成功,結果沒有) 配置: 1.
    發表于 09-15 07:30

    YOLOv5在OpenCV上的推理程序

    YOLOv5官方給出的YOLOv5在OpenCV上推理的程序相對來說是比較通俗易懂的,條理清晰,有基本的封裝,直接可用!但是我也發現,模型的推理時間跟前后處理的時間相差無幾,特別是當視頻流有多個檢測到的對象時候,整個幀率會有明顯
    的頭像 發表于 11-02 10:16 ?1918次閱讀

    YOLOv5 7.0版本下載與運行測試

    支持實例分割了,從此YOLOv5實現了圖像分類、對象檢測、實例分割三個支持,從訓練到部署。
    的頭像 發表于 11-30 15:55 ?3801次閱讀

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉換YOLOv5預訓練模型的詳細步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優化并部署YOLOv5模型》,本文所使用的OpenVINO是2022.3 LTS版。
    的頭像 發表于 02-15 16:53 ?4668次閱讀

    使用旭日X3派的BPU部署Yolov5

    本次主要介紹在旭日x3的BPU中部署yolov5。首先在ubuntu20.04安裝yolov5,并運行yolov5并使用pytoch的pt模型文件轉ONNX。
    的頭像 發表于 04-26 14:20 ?909次閱讀
    使用旭日X3派的BPU部署<b class='flag-5'>Yolov5</b>

    yolov5和YOLOX正負樣本分配策略

    整體上在正負樣本分配中,yolov7的策略算是yolov5和YOLOX的結合。因此本文先從yolov5和YOLOX正負樣本分配策略分析入手,后引入到YOLOv7的解析中。
    發表于 08-14 11:45 ?2285次閱讀
    <b class='flag-5'>yolov5</b>和YOLOX正負樣本分配策略

    YOLOv5網絡結構訓練策略詳解

    前面已經講過了Yolov5模型目標檢測和分類模型訓練流程,這一篇講解一下yolov5模型結構,數據增強,以及訓練策略。
    的頭像 發表于 09-11 11:15 ?2187次閱讀
    <b class='flag-5'>YOLOv5</b>網絡結構訓練策略詳解

    RK3588 技術分享 | 在Android系統中使用NPU實現Yolov5分類檢測-迅為電子

    RK3588 技術分享 | 在Android系統中使用NPU實現Yolov5分類檢測-迅為電子
    的頭像 發表于 08-23 14:58 ?723次閱讀
    RK3588 技術分享 | 在Android系統中使用NPU<b class='flag-5'>實現</b><b class='flag-5'>Yolov5</b>分類檢測-迅為電子
    主站蜘蛛池模板: 六月丁香婷婷激情国产| 精品国产污网站在线观看15| 国内外精品免费视频| 手机看片福利国产| 在线婷婷| 日韩一卡 二卡 三卡 四卡 免费视频| 俄罗斯毛片基地| 99香蕉国产| 五月婷婷婷婷婷| 国产99色| 激情丁香网| 色视频在线播放| 一级特黄a 大片免费| 碰免费人人人视频| 综合网视频| 亚洲综合色色图| 日本福利网址| 日本污视频| 欲色影视| 成年人毛片网站| 欧美一级淫片免费播放口| 四虎永久免费在线| 亚洲午夜视频在线| 日本亚洲一区二区| 久久久久久91精品色婷婷| 久久久免费的精品| 一级毛片aaaaaa免费看| 狠狠色丁香婷婷综合最新地址| 国产在线视频www色| 五月婷婷婷婷| 夜夜操夜夜操| 女性私密部位扒开的视频| 久久综合成人网| 草久久久久| 日本在线观看高清不卡免v| 天天操穴| 亚洲jizzjizz| 午夜快播| 免费日本黄色网址| 亚洲a网站| 久久黄色精品视频|