最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用OPENCV的目標(biāo)跟蹤算法實(shí)現(xiàn)自動(dòng)視頻標(biāo)注效果

 更新時(shí)間:2021年09月10日 15:00:57   作者:包工頭—BGT  
這篇文章主要介紹了Python使用OPENCV的目標(biāo)跟蹤算法進(jìn)行簡(jiǎn)單的自動(dòng)視頻標(biāo)注,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

先上效果

 1.首先,要使用opencv的目標(biāo)跟蹤算法,必須要有opencv環(huán)境

 使用:opencv==4.4.0 和 opencv-contrib-python==4.4.0.46,lxml   這三個(gè)環(huán)境包。

也可以使用以下方法進(jìn)行下載 : 

pip install opencv-python==4.4.0
pip install opencv-contrib-python==4.4.0.4

pip install lxml

2.使用方法:

        (1):英文狀態(tài)下的 “s” 是進(jìn)行標(biāo)注

        (2):使用小鍵盤 1-9 按下對(duì)應(yīng)的標(biāo)簽序號(hào),標(biāo)簽序號(hào)和標(biāo)簽可自定義(需要提前定義)

       (3):對(duì)目標(biāo)進(jìn)行繪制

       (4):按空格鍵繼續(xù)

        重復(fù)進(jìn)行 (1)(2)(3)(4)步驟,可實(shí)現(xiàn)多個(gè)目標(biāo)的跟蹤繪制

        英文狀態(tài)下的 “r” 是所有清除繪制

         英文狀態(tài)下的 “q” 是退出

          當(dāng)被跟蹤目標(biāo)丟失時(shí),自動(dòng)清除所有繪制

import cv2
import os
import time
from lxml import etree
 
#視頻路徑
Vs = cv2.VideoCapture('peaple.avi')
#自定義標(biāo)簽
Label = {1:"people",2:"car",3:"Camera"}
#圖片保存路徑 ,一定使用要用絕對(duì)路徑??!
imgpath = r"C:\Users\BGT\Desktop\opencv\img"
#xml保存路徑 ,一定使用要用絕對(duì)路徑??!
xmlpath = r"C:\Users\BGT\Desktop\opencv\xml"
#設(shè)置視頻縮放
cv2.namedWindow("frame", 0)
#設(shè)置視頻寬高
cv2.resizeWindow("frame", 618, 416)
 
#定義生成xml類
class Gen_Annotations:
    def __init__(self, json_info):
        self.root = etree.Element("annotation")
 
        child1 = etree.SubElement(self.root, "folder")
        child1.text = str(json_info["pic_dirname"])
 
        child2 = etree.SubElement(self.root, "filename")
        child2.text = str(json_info["filename"])
 
        child3 = etree.SubElement(self.root, "path")
        child3.text = str(json_info["pic_path"])
 
        child4 = etree.SubElement(self.root, "source")
 
        child5 = etree.SubElement(child4, "database")
        child5.text = "My name is BGT"
 
    def set_size(self, witdh, height, channel):
        size = etree.SubElement(self.root, "size")
        widthn = etree.SubElement(size, "width")
        widthn.text = str(witdh)
        heightn = etree.SubElement(size, "height")
        heightn.text = str(height)
        channeln = etree.SubElement(size, "depth")
        channeln.text = str(channel)
        segmented = etree.SubElement(self.root, "segmented")
        segmented.text = "0"
 
    def savefile(self, filename):
        tree = etree.ElementTree(self.root)
        tree.write(filename, pretty_print=True, xml_declaration=False, encoding='utf-8')
 
    def add_pic_attr(self, label, x0, y0, x1, y1):
        object = etree.SubElement(self.root, "object")
        namen = etree.SubElement(object, "name")
        namen.text = label
        pose = etree.SubElement(object, "pose")
        pose.text = "Unspecified"
        truncated = etree.SubElement(object, "truncated")
        truncated.text = "0"
        difficult = etree.SubElement(object, "difficult")
        difficult.text = "0"
        bndbox = etree.SubElement(object, "bndbox")
        xminn = etree.SubElement(bndbox, "xmin")
        xminn.text = str(x0)
        yminn = etree.SubElement(bndbox, "ymin")
        yminn.text = str(y0)
        xmaxn = etree.SubElement(bndbox, "xmax")
        xmaxn.text = str(x1)
        ymaxn = etree.SubElement(bndbox, "ymax")
        ymaxn.text = str(y1)
 
 #定義生成xml的方法
def voc_opencv_xml(a,b,c,d,e,f,boxes,Label,Label_a,save="1.xml"):
    json_info = {}
    json_info["pic_dirname"] = a
    json_info["pic_path"] = b
    json_info["filename"] = c
    anno = Gen_Annotations(json_info)
 
    anno.set_size(d, e, f)
 
    for box in range(len(boxes)):
        x,y,w,h = [int(v) for v in boxes[box]]
        anno.add_pic_attr(Label[Label_a[box]],x,y,x+w,y+h)
    anno.savefile(save)
  
if __name__ == '__main__':
    Label_a = []
    contents = os.path.split(imgpath)[1]
    trackers = cv2.MultiTracker_create()
    while True:
        Filename_jpg = str(time.time()).split(".")[0] + "_" + str(time.time()).split(".")[1] + ".jpg"
        Filename_xml = str(time.time()).split(".")[0] + "_" + str(time.time()).split(".")[1] + ".xml"
 
        path_Filename_jpg = os.path.join(imgpath,Filename_jpg)
        path_Filename_xml = os.path.join(xmlpath,Filename_xml)
 
        ret,frame = Vs.read()
        if not ret:
            break
 
        success,boxes = trackers.update(frame)
        if len(boxes)>0:
            cv2.imwrite(path_Filename_jpg, frame)
            judge = True
        else:
            judge = False
 
         if success==False:
            print("目標(biāo)丟失")
            trackers = cv2.MultiTracker_create()
            Label_a = []
            judge = False
        if judge:
            voc_opencv_xml(contents,Filename_jpg,path_Filename_jpg,frame.shape[1],frame.shape[0],frame.shape[2],boxes,Label,Label_a,path_Filename_xml)
        if judge:
            for box in range(len(boxes)):
                x,y,w,h = [int(v) for v in boxes[box]]
                cv2.putText(frame, Label[Label_a[box]], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 1)
                cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
  
        cv2.imshow('frame',frame)
 
        var = cv2.waitKey(30)
 
        if var == ord('s'):
            imgzi = cv2.putText(frame, str(Label), (50, 50), cv2.FONT_HERSHEY_TRIPLEX, 1, (0, 255, 0), 2)
            cv2.imshow('frame', frame)
            var = cv2.waitKey(0)
            if var-48<len(Label) or var-48<=len(Label):
                Label_a.append(int(var-48))
            box = cv2.selectROI("frame", frame, fromCenter=False,showCrosshair=True)
            tracker = cv2.TrackerCSRT_create()
            trackers.add(tracker,frame,box)
        elif var == ord("r"):
            trackers = cv2.MultiTracker_create()
            Label_a = []
        elif var == ord('q'): #退出
            break
 
    Vs.release()
    cv2.destroyAllWindows()
 

3.得到xml和img數(shù)據(jù)是VOC格式,img和xml文件以時(shí)間戳進(jìn)行命名。防止同名覆蓋。

4.最后使用 labelImg軟件  對(duì)獲取到的img和xml進(jìn)行最后的檢查和微調(diào)

到此這篇關(guān)于Python使用OPENCV的目標(biāo)跟蹤算法進(jìn)自動(dòng)視頻標(biāo)注效果的文章就介紹到這了,更多相關(guān)OPENCV目標(biāo)跟蹤自動(dòng)視頻標(biāo)注內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python全局變量操作詳解

    Python全局變量操作詳解

    這篇文章主要介紹了Python全局變量操作詳解,本文總結(jié)了兩種使用全局變量的方式,需要的朋友可以參考下
    2015-04-04
  • Python技巧之四種多線程應(yīng)用分享

    Python技巧之四種多線程應(yīng)用分享

    這篇文章主要介紹了Python中多線程的所有方式,包括使用threading模塊、使用concurrent.futures模塊、使用multiprocessing模塊以及使用asyncio模塊,希望對(duì)大家有所幫助
    2023-05-05
  • Python動(dòng)態(tài)加載模塊的3種方法

    Python動(dòng)態(tài)加載模塊的3種方法

    這篇文章主要介紹了Python 動(dòng)態(tài)加載模塊的3種方法,本文分別使用使用系統(tǒng)函數(shù)__import_()、使用imp 模塊、使用exec三種方法實(shí)現(xiàn),需要的朋友可以參考下
    2014-11-11
  • 使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例

    使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例

    這篇文章主要介紹了使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例,所謂排序,就是使一串記錄,按照其中的某個(gè)或某些關(guān)鍵字的大小,遞增或遞減的排列起來的操作,需要的朋友可以參考下
    2023-07-07
  • python+selenium 定位到元素,無法點(diǎn)擊的解決方法

    python+selenium 定位到元素,無法點(diǎn)擊的解決方法

    今天小編就為大家分享一篇python+selenium 定位到元素,無法點(diǎn)擊的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python獲取文件夾下所有文件的方法教程

    Python獲取文件夾下所有文件的方法教程

    使用Python獲取文件夾下所有文件可采用os模塊或pathlib模塊,os模塊通過os.listdir和os.walk方法實(shí)現(xiàn)文件遍歷,而pathlib模塊通過Path類和其iterdir與rglob方法實(shí)現(xiàn),兩種方法各有優(yōu)勢(shì),可根據(jù)具體需求選擇使用,需要的朋友可以參考下
    2024-11-11
  • pygame實(shí)現(xiàn)非圖片按鈕效果

    pygame實(shí)現(xiàn)非圖片按鈕效果

    這篇文章主要介紹了pygame實(shí)現(xiàn)非圖片按鈕效果,不使用圖片制作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python判斷字符串是否為字母或者數(shù)字(浮點(diǎn)數(shù))的多種方法

    Python判斷字符串是否為字母或者數(shù)字(浮點(diǎn)數(shù))的多種方法

    本文給大家?guī)砣N方法基于Python判斷字符串是否為字母或者數(shù)字(浮點(diǎn)數(shù)),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Python檢查端口是否打開的七種方法總結(jié)

    Python檢查端口是否打開的七種方法總結(jié)

    在信息安全領(lǐng)域,端口掃描是一項(xiàng)常見的技術(shù),用于逐個(gè)檢測(cè)目標(biāo)主機(jī)上的端口是否開放,這篇文章主要給大家介紹了關(guān)于Python檢查端口是否打開的七種方法總結(jié),需要的朋友可以參考下
    2023-12-12
  • Python中with上下文管理協(xié)議的作用及用法

    Python中with上下文管理協(xié)議的作用及用法

    這篇文章主要介紹了Python中with的作用及用法,with是從Python2.5引入的一個(gè)新的語法,它是一種上下文管理協(xié)議,下文更多詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論

运城市| 黑龙江省| 中超| 安岳县| 漳浦县| 博湖县| 上虞市| 锦州市| 孝感市| 巴里| 东源县| 如皋市| 聊城市| 忻城县| 大关县| 当雄县| 色达县| 简阳市| 登封市| 内乡县| 伊春市| 罗源县| 卫辉市| 赤峰市| 临西县| 错那县| 什邡市| 涡阳县| 桦川县| 三亚市| 宁城县| 来凤县| 虹口区| 大方县| 潜江市| 库尔勒市| 府谷县| 江门市| 赤峰市| 禹城市| 阜城县|