<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          逐行代碼教你使用OpenCV+YOLO進(jìn)行目標(biāo)跟蹤

          共 4919字,需瀏覽 10分鐘

           ·

          2024-06-22 11:06

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”

          重磅干貨,第一時(shí)間送達(dá)

          YOLO 是一種能夠?qū)崟r(shí)進(jìn)行目標(biāo)檢測(cè)的深度學(xué)習(xí)算法。您可以使用預(yù)訓(xùn)練的 YOLO 模型,如 YOLOv8 或 YOLOv9,或者在需要時(shí)在自定義數(shù)據(jù)集上訓(xùn)練自己的模型。在本文中,我將帶您了解如何使用預(yù)訓(xùn)練的 YOLO 模型進(jìn)行目標(biāo)跟蹤。這是最簡(jiǎn)單的教程,我們只處理簡(jiǎn)單的目標(biāo)檢測(cè)。

          讓我們看看目標(biāo)檢測(cè)所涉及的步驟。

          1. 我們將加載模型

          2. 我們將加載視頻

          3. 我們將逐幀提取視頻

          4. 對(duì)每一幀進(jìn)行預(yù)測(cè)并使用 OpenCV 顯示結(jié)果


          下面的圖像總結(jié)了這些步驟:

          目標(biāo)檢測(cè)步驟 讓我們開始編碼。

          第 0 步:環(huán)境設(shè)置

          我們需要兩個(gè)庫 ultralytics 和 opencv,您可以使用以下代碼安裝這些庫。

             
          pip install ultralytics opencv-python

          導(dǎo)入所有必要的庫。

             
          import cv2 as cvfrom ultralytics import YOLO


          第 1 步:加載模型 

          #load the modelmodel = YOLO('yolov8n.pt')

          在 YOLO 中加載模型非常容易。我們可以直接使用 ultralytics 提供的 YOLO() 函數(shù),并指定模型名稱。一旦運(yùn)行,它會(huì)自動(dòng)在代碼所在的文件夾中下載指定的 YOLO 模型。

          第 2 步:加載視頻 

          我們使用 OpenCV 的 VideoCapture() 函數(shù)來加載視頻。這個(gè)函數(shù)的輸入是視頻的路徑。

          path = "../videos/football_test.mp4"#read videovs = cv.VideoCapture(path)

          第 3 步:提取幀 

          一旦我們加載了視頻,在下一步我們將逐個(gè)提取視頻中的幀。視頻是由連續(xù)拼接在一起的幀組成的。

          • vs = cv.VideoCapture(path):包含指向視頻的指針。

          • vs.read():允許我們逐幀讀取視頻。一旦我們調(diào)用vs上的read函數(shù),它將以迭代的方式返回當(dāng)前的視頻幀。

          • cv.imshow('image', frame):顯示每個(gè)提取出的幀。

             
          path = "../videos/football_test.mp4"#read videovs = cv.VideoCapture(path)
          #load the modelmodel = YOLO('yolov8n.pt')while True: (grabbed,frame) = vs.read() if not grabbed: break cv.imshow('image', frame) cv.waitKey(500)


          第 4 步:應(yīng)用預(yù)測(cè) 

          模型的predict()方法是用于對(duì)每一幀進(jìn)行預(yù)測(cè)的方法。預(yù)測(cè)結(jié)果存儲(chǔ)在results變量中。在while循環(huán)中,我們從視頻中提取每一幀,并在每一幀上進(jìn)行預(yù)測(cè)。簡(jiǎn)單來說,我正在嘗試在視頻中的每一幀中檢測(cè)對(duì)象。

          results = model.predict(frame,stream=False)
          path = "../videos/football_test.mp4" #read video vs = cv.VideoCapture(path) #load the model model = YOLO('yolov8n.pt') while True: (grabbed,frame) = vs.read() if not grabbed: break results = model.predict(frame,stream=False) cv.imshow('image', frame) cv.waitKey(500)

          第 5 步:繪制邊界框

          為了繪制邊界框,我創(chuàng)建了一個(gè)函數(shù),該函數(shù)將輸入圖像、數(shù)據(jù)(包含預(yù)測(cè)結(jié)果)、檢測(cè)到的類別名稱,并返回帶有檢測(cè)到的對(duì)象邊界框的圖像。drawBox(data, image, name):data是預(yù)測(cè)詳情,image是幀,name是檢測(cè)到的類別名稱,例如:人、汽車等。

          def drawBox(data,image,name):    x1, y1, x2, y2, conf, id = data    p1 = (int(x1), int(y1))    p2 = (int(x2), int(y2))    cv.rectangle(image, p1, p2, (0, 0, 255), 3)    cv.putText(image, name, p1, cv.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 3)    return image    results = model.predict(frame,stream=False)for result in results:     for data in result.boxes.data.tolist():           #print(data)           id = data[5]           drawBox(data, frame,detection_classes[id])

          由于結(jié)果包含了幀中所有檢測(cè)到的對(duì)象的詳細(xì)信息,我們?cè)谏鲜龃a中對(duì)每個(gè)檢測(cè)到的對(duì)象進(jìn)行解碼。對(duì)于每個(gè)檢測(cè),我們調(diào)用`drawBox(data, frame, detection_classes[id])`來在檢測(cè)周圍繪制邊界框。

          
            

          第 6 步:完整代碼

          您也可以在此處訪問完整代碼:https://github.com/sunnykumar1516/YOLO/blob/main/ReadVideoApplyYoloV8.py。

          import cv2 as cvfrom ultralytics import YOLO
          def drawBox(data,image,name): x1, y1, x2, y2, conf, id = data p1 = (int(x1), int(y1)) p2 = (int(x2), int(y2)) cv.rectangle(image, p1, p2, (0, 0, 255), 3) cv.putText(image, name, p1, cv.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 3) return image
          detection_classes= [] path = "../videos/football_test.mp4" #read video vs = cv.VideoCapture(path) #load the model model = YOLO('yolov8n.pt') while True: (grabbed,frame) = vs.read() if not grabbed: break results = model.predict(frame,stream=False) detection_classes = results[0].names for result in results: for data in result.boxes.data.tolist(): #print(data) id = data[5] drawBox(data, frame,detection_classes[id])
          完整代碼參考:https://github.com/sunnykumar1516/YOLO/blob/main
          ·  END  ·
                
          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。
          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。
          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产美女被操逼 | 日韩视频五区 | 国内黄色视频 | 九九精品免费视频 | 天天操中文字幕 |