0


YOLOv8 目标跟踪、车速检测、车流量统计

原文:YOLOv8 目标跟踪、车速检测、车流量统计 - 知乎 (zhihu.com)

一、目标跟踪

YOLOv8_ ByteTrack目标跟踪、模型部署_yolov8-track-CSDN博客

二、车速检测、车流量统计

YOLO 车辆测速-CSDN博客

  1. import cv2
  2. import pandas as pd
  3. import numpy as np
  4. from ultralytics import YOLO
  5. import ultralytics
  6. from track import *
  7. from deep_sort.deep_sort import DeepSort
  8. import time
  9. model = YOLO('yolov8_visdrone.pt')
  10. # cap=cv2.VideoCapture('veh2.mp4')
  11. cap = cv2.VideoCapture('b.mov')
  12. # cap=cv2.VideoCapture('test_traffic.mp4')
  13. w, h = int(cap.get(3)), int(cap.get(4))
  14. fps = cap.get(cv2.CAP_PROP_FPS)
  15. print("fps: ", cap.get(cv2.CAP_PROP_FPS))
  16. # video write
  17. fourcc = cv2.VideoWriter_fourcc(*'MJPG')
  18. # out = cv2.VideoWriter('out.avi',fourcc, fps, (w,h))
  19. out = cv2.VideoWriter('out2.avi',fourcc, 20, (w,h))
  20. class_list = ['pedestrain', 'people', 'bicycle', 'car', 'van', 'truck', 'tricycle', 'awning-tricycle', 'bus', 'motor']
  21. # print(class_list)
  22. count = 0
  23. tracker=Tracker()
  24. cy1 = 222
  25. cy2 = 368
  26. offset = 10 # 6
  27. vh_down = {}
  28. counter = []
  29. vh_up = {}
  30. counter1 = []
  31. while True:
  32. ret, frame = cap.read()
  33. if not ret:
  34. break
  35. count += 1
  36. if count % 3 != 0:
  37. continue
  38. frame = cv2.resize(frame, (1020, 500))
  39. mytracker = Tracker()
  40. im, pred_boxes, bbox_id = mytracker.track(frame)
  41. for bbox in bbox_id:
  42. x3, y3, x4, y4, id = bbox
  43. x3, y3, x4, y4 = int(x3), int(y3), int(x4), int(y4)
  44. # print(x3, y3, x4, y4)
  45. cx = int(x3 + x4) // 2
  46. cy = int(y3 + y4) // 2
  47. cv2.rectangle(frame,(x3,y3),(x4,y4),(0,0,255),2)
  48. #####going DOWN#####
  49. if cy1 < (cy + offset) and cy1 > (cy - offset):
  50. vh_down[id] = time.time()
  51. if id in vh_down:
  52. if cy2 < (cy + offset) and cy2 > (cy - offset):
  53. elapsed_time = time.time() - vh_down[id]
  54. if counter.count(id) == 0:
  55. counter.append(id)
  56. distance = 10 # meters
  57. a_speed_ms = distance / elapsed_time
  58. a_speed_kh = a_speed_ms * 3.6
  59. cv2.circle(frame, (cx, cy), 4, (0, 0, 255), -1)
  60. cv2.putText(frame, str(id), (x3, y3), cv2.FONT_HERSHEY_COMPLEX, 0.6, (0, 0, 255), 1)
  61. cv2.putText(frame, str(int(a_speed_kh)) + 'Km/h', (x4, y4), cv2.FONT_HERSHEY_COMPLEX, 0.8,
  62. (0, 0, 255), 3)
  63. #####going UP#####
  64. if cy2 < (cy + offset) and cy2 > (cy - offset):
  65. vh_up[id] = time.time()
  66. if id in vh_up:
  67. if cy1 < (cy + offset) and cy1 > (cy - offset):
  68. elapsed1_time = time.time() - vh_up[id]
  69. if counter1.count(id) == 0:
  70. counter1.append(id)
  71. distance1 = 10 # meters
  72. a_speed_ms1 = distance1 / elapsed1_time
  73. a_speed_kh1 = a_speed_ms1 * 3.6
  74. cv2.circle(frame, (cx, cy), 4, (0, 0, 255), -1)
  75. cv2.putText(frame, str(id), (x3, y3), cv2.FONT_HERSHEY_COMPLEX, 0.6, (0, 0, 255), 1)
  76. cv2.putText(frame, str(int(a_speed_kh1)) + 'Km/h', (x4, y4), cv2.FONT_HERSHEY_COMPLEX, 0.8,
  77. (0, 0, 255), 2)
  78. cv2.line(frame, (176, cy1), (880, cy1), (0, 0, 255), 3)
  79. cv2.putText(frame, ('L1'), (182, cy1), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 2)
  80. cv2.line(frame, (177, cy2), (880, cy2), (0, 0, 255), 3)
  81. cv2.putText(frame, ('L2'), (182, cy2), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 2)
  82. d = (len(counter))
  83. u = (len(counter1))
  84. cv2.putText(frame, ('goingdown:-') + str(d), (60, 90), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 2)
  85. cv2.putText(frame, ('goingup:-') + str(u), (60, 130), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 2)
  86. cv2.imshow("RGB", frame)
  87. frame = cv2.resize(frame, (w, h))
  88. out.write(frame)
  89. if cv2.waitKey(1) & 0xFF == 27:
  90. break
  91. cap.release()
  92. cv2.destroyAllWindows()

**视频见原文。 **


本文转载自: https://blog.csdn.net/m0_69824302/article/details/140776208
版权归原作者 爱编程的鱼 所有, 如有侵权,请联系我们删除。

“YOLOv8 目标跟踪、车速检测、车流量统计”的评论:

还没有评论