请选择 进入手机版 | 继续访问电脑版

[python] Python利用 OPENCV的目的 跟踪算法实现主动 视频标注效果

  [复制链接]
查看240 | 回复51 | 2021-9-13 13:23:13 | 显示全部楼层 |阅读模式

先上结果

Python利用
OPENCV的目的
跟踪算法实现主动
视频标注效果

Python利用
OPENCV的目的
跟踪算法实现主动
视频标注效果

 1.起首 ,要利用 opencv的目的 跟踪算法,必须要有opencv环境

 利用 :opencv==4.4.0 和 opencv-contrib-python==4.4.0.46,lxml   这三个环境包。

也可以利用 以下方法举行 下载 : 

  1. pip install opencv-python==4.4.0
  2. pip install opencv-contrib-python==4.4.0.4
  3. pip install lxml
复制代码

2.利用 方法:

        (1):英文状态下的 “s” 是举行 标注

        (2):利用 小键盘 1-9 按下对应的标签序号,标签序号和标签可自定义(必要 提前定义)

       (3):对目的 举行 绘制

       (4):按空格键继续

        重复举行 (1)(2)(3)(4)步骤,可实现多个目的 的跟踪绘制

        英文状态下的 “r” 是全部 打扫 绘制

         英文状态下的 “q” 是退出

          当被跟踪目的 丢失时,自动 打扫 全部 绘制

  1. import cv2
  2. import os
  3. import time
  4. from lxml import etree
  5. #视频路径
  6. Vs = cv2.VideoCapture('peaple.avi')
  7. #自定义标签
  8. Label = {1:"people",2:"car",3:"Camera"}
  9. #图片保存路径 ,一定使用要用绝对路径!!
  10. imgpath = r"C:\Users\BGT\Desktop\opencv\img"
  11. #xml保存路径 ,一定使用要用绝对路径!!
  12. xmlpath = r"C:\Users\BGT\Desktop\opencv\xml"
  13. #设置视频缩放
  14. cv2.namedWindow("frame", 0)
  15. #设置视频宽高
  16. cv2.resizeWindow("frame", 618, 416)
  17. #定义生成xml类
  18. class Gen_Annotations:
  19. def __init__(self, json_info):
  20. self.root = etree.Element("annotation")
  21. child1 = etree.SubElement(self.root, "folder")
  22. child1.text = str(json_info["pic_dirname"])
  23. child2 = etree.SubElement(self.root, "filename")
  24. child2.text = str(json_info["filename"])
  25. child3 = etree.SubElement(self.root, "path")
  26. child3.text = str(json_info["pic_path"])
  27. child4 = etree.SubElement(self.root, "source")
  28. child5 = etree.SubElement(child4, "database")
  29. child5.text = "My name is BGT"
  30. def set_size(self, witdh, height, channel):
  31. size = etree.SubElement(self.root, "size")
  32. widthn = etree.SubElement(size, "width")
  33. widthn.text = str(witdh)
  34. heightn = etree.SubElement(size, "height")
  35. heightn.text = str(height)
  36. channeln = etree.SubElement(size, "depth")
  37. channeln.text = str(channel)
  38. segmented = etree.SubElement(self.root, "segmented")
  39. segmented.text = "0"
  40. def savefile(self, filename):
  41. tree = etree.ElementTree(self.root)
  42. tree.write(filename, pretty_print=True, xml_declaration=False, encoding='utf-8')
  43. def add_pic_attr(self, label, x0, y0, x1, y1):
  44. object = etree.SubElement(self.root, "object")
  45. namen = etree.SubElement(object, "name")
  46. namen.text = label
  47. pose = etree.SubElement(object, "pose")
  48. pose.text = "Unspecified"
  49. truncated = etree.SubElement(object, "truncated")
  50. truncated.text = "0"
  51. difficult = etree.SubElement(object, "difficult")
  52. difficult.text = "0"
  53. bndbox = etree.SubElement(object, "bndbox")
  54. xminn = etree.SubElement(bndbox, "xmin")
  55. xminn.text = str(x0)
  56. yminn = etree.SubElement(bndbox, "ymin")
  57. yminn.text = str(y0)
  58. xmaxn = etree.SubElement(bndbox, "xmax")
  59. xmaxn.text = str(x1)
  60. ymaxn = etree.SubElement(bndbox, "ymax")
  61. ymaxn.text = str(y1)
  62. #定义生成xml的方法
  63. def voc_opencv_xml(a,b,c,d,e,f,boxes,Label,Label_a,save="1.xml"):
  64. json_info = {}
  65. json_info["pic_dirname"] = a
  66. json_info["pic_path"] = b
  67. json_info["filename"] = c
  68. anno = Gen_Annotations(json_info)
  69. anno.set_size(d, e, f)
  70. for box in range(len(boxes)):
  71. x,y,w,h = [int(v) for v in boxes[box]]
  72. anno.add_pic_attr(Label[Label_a[box]],x,y,x+w,y+h)
  73. anno.savefile(save)
  74. if __name__ == '__main__':
  75. Label_a = []
  76. contents = os.path.split(imgpath)[1]
  77. trackers = cv2.MultiTracker_create()
  78. while True:
  79. Filename_jpg = str(time.time()).split(".")[0] + "_" + str(time.time()).split(".")[1] + ".jpg"
  80. Filename_xml = str(time.time()).split(".")[0] + "_" + str(time.time()).split(".")[1] + ".xml"
  81. path_Filename_jpg = os.path.join(imgpath,Filename_jpg)
  82. path_Filename_xml = os.path.join(xmlpath,Filename_xml)
  83. ret,frame = Vs.read()
  84. if not ret:
  85. break
  86. success,boxes = trackers.update(frame)
  87. if len(boxes)>0:
  88. cv2.imwrite(path_Filename_jpg, frame)
  89. judge = True
  90. else:
  91. judge = False
  92. if success==False:
  93. print("目标丢失")
  94. trackers = cv2.MultiTracker_create()
  95. Label_a = []
  96. judge = False
  97. if judge:
  98. 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)
  99. if judge:
  100. for box in range(len(boxes)):
  101. x,y,w,h = [int(v) for v in boxes[box]]
  102. cv2.putText(frame, Label[Label_a[box]], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 1)
  103. cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
  104. cv2.imshow('frame',frame)
  105. var = cv2.waitKey(30)
  106. if var == ord('s'):
  107. imgzi = cv2.putText(frame, str(Label), (50, 50), cv2.FONT_HERSHEY_TRIPLEX, 1, (0, 255, 0), 2)
  108. cv2.imshow('frame', frame)
  109. var = cv2.waitKey(0)
  110. if var-48<len(Label) or var-48<=len(Label):
  111. Label_a.append(int(var-48))
  112. box = cv2.selectROI("frame", frame, fromCenter=False,showCrosshair=True)
  113. tracker = cv2.TrackerCSRT_create()
  114. trackers.add(tracker,frame,box)
  115. elif var == ord("r"):
  116. trackers = cv2.MultiTracker_create()
  117. Label_a = []
  118. elif var == ord('q'): #退出
  119. break
  120. Vs.release()
  121. cv2.destroyAllWindows()
复制代码

3.得到xml和img数据是VOC格式,img和xml文件以时间戳举行 定名 。防止同名覆盖。

Python利用
OPENCV的目的
跟踪算法实现主动
视频标注效果

4.末了 利用 labelImg软件  对获取到的img和xml举行 末了 的检查和微调

Python利用
OPENCV的目的
跟踪算法实现主动
视频标注效果

到此这篇关于Python利用 OPENCV的目的 跟踪算法进自动 视频标注结果 的文章就先容 到这了,更多相干 OPENCV目的 跟踪自动 视频标注内容请搜索 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 林之秋实 | 2021-9-13 17:25:30 | 显示全部楼层
楼上长在线啊?
回复

使用道具 举报

avatar 王建新1 | 2021-9-17 23:19:01 | 显示全部楼层
信admin楼主,考试不挂科!
回复

使用道具 举报

avatar 未来看得见吗敲 | 2021-9-20 07:26:55 | 显示全部楼层
关注一下!
回复

使用道具 举报

avatar 弄乐诟 | 2021-10-3 19:18:01 | 显示全部楼层
世界末日我都挺过去了,看到admin楼主我才知道为什么上帝留我到现在!
回复

使用道具 举报

avatar 子非鱼JXX | 2021-10-4 15:40:58 | 显示全部楼层
admin楼主,您忘记吃药了吧?
回复

使用道具 举报

avatar 紫罗兰的叶栏 | 2021-10-5 00:24:04 | 显示全部楼层
帖子好乱!
回复

使用道具 举报

avatar 杰尼亚斯痔 | 2021-10-6 14:18:30 | 显示全部楼层
骂人也是要有水平的!
回复

使用道具 举报

avatar 爱宇婷疤 | 2021-10-7 08:25:33 | 显示全部楼层
楼上的能详细介绍一下么?
回复

使用道具 举报

avatar 乔微博 | 2021-10-8 21:36:17 | 显示全部楼层
admin楼主,您主治大夫在到处找您呢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则