1.項目背景與意義
隨著城市化進程的加快和交通工具的普及,車輛數(shù)量的快速增長給城市交通管理帶來了巨大的挑戰(zhàn)。車流量檢測是交通管理的重要組成部分,它可以提供實時的交通狀況信息,幫助交通管理部門制定合理的交通策略,優(yōu)化交通流量,提高道路利用效率,減少交通擁堵和事故發(fā)生的可能性。
傳統(tǒng)的車流量檢測方法主要依賴于傳感器設(shè)備,如地磁傳感器、紅外線傳感器等,這些傳感器需要在道路上布設(shè),成本較高且安裝維護困難。而基于計算機視覺的車流量檢測系統(tǒng)則可以通過分析道路上的攝像頭圖像來實現(xiàn),具有成本低、安裝方便、實時性強等優(yōu)勢。
OpenCV是一個開源的計算機視覺庫,提供了豐富的圖像處理和計算機視覺算法,可以用于車流量檢測系統(tǒng)中的圖像處理和分析。Yolov5是一個基于深度學(xué)習(xí)的目標(biāo)檢測算法,具有高準(zhǔn)確率和實時性的特點,可以用于車輛的檢測和跟蹤。
2.圖片演示
3.視頻演示
OpenCV&YOLOv5的車流量統(tǒng)計系統(tǒng)(源碼&部署教程)
4.系統(tǒng)流程步驟
基于OpenCV和Yolov5的車流量檢測系統(tǒng)可以通過以下步驟實現(xiàn):
-
圖像采集:使用攝像頭采集道路上的車輛圖像。
-
圖像預(yù)處理:使用OpenCV對采集到的圖像進行預(yù)處理,包括圖像去噪、圖像增強等。
-
車輛檢測:使用Yolov5對預(yù)處理后的圖像進行車輛檢測,識別出圖像中的車輛。
-
車輛跟蹤:根據(jù)檢測到的車輛,使用OpenCV進行車輛的跟蹤,追蹤車輛在不同幀之間的位置和運動軌跡。
-
車流量統(tǒng)計:根據(jù)車輛的跟蹤結(jié)果,統(tǒng)計道路上的車流量,包括車輛的數(shù)量、車輛的速度等。
5.算法優(yōu)點
基于OpenCV和Yolov5的車流量檢測系統(tǒng)具有以下優(yōu)勢和意義:
-
高準(zhǔn)確率:Yolov5作為一種先進的目標(biāo)檢測算法,具有較高的準(zhǔn)確率,可以準(zhǔn)確地檢測和識別道路上的車輛。
-
實時性強:Yolov5算法的實時性較好,可以在較短的時間內(nèi)完成車輛的檢測和跟蹤,實時更新車流量信息。
-
成本低:相比傳統(tǒng)的車流量檢測方法,基于OpenCV和Yolov5的系統(tǒng)不需要額外的傳感器設(shè)備,只需要使用攝像頭即可實現(xiàn)車流量檢測,成本較低。
-
安裝方便:基于OpenCV和Yolov5的系統(tǒng)只需要在道路上布設(shè)攝像頭,安裝和維護較為方便。
-
實用性強:車流量檢測系統(tǒng)可以為交通管理部門提供實時的交通狀況信息,幫助制定合理的交通策略,優(yōu)化交通流量,提高道路利用效率,減少交通擁堵和事故發(fā)生的可能性。
綜上所述,基于OpenCV和Yolov5的車流量檢測系統(tǒng)具有重要的研究意義和實際應(yīng)用價值,可以為城市交通管理提供有效的技術(shù)支持,促進交通運輸?shù)陌踩?、高效和可持續(xù)發(fā)展。
6.數(shù)據(jù)集的制作
在車流量統(tǒng)計中只需要識別道路中的車輛,因此在制作數(shù)據(jù)集時只選取車輛一種類別,其他非車輛物體作為負(fù)樣本。
車輛識別數(shù)據(jù)集制作首先運用圖像標(biāo)注軟件對車輛進行標(biāo)注,并將所標(biāo)注的信息生成相對應(yīng)的xml文件,xml文件包含圖片名稱、圖片路徑、目標(biāo)標(biāo)簽名稱及目標(biāo)位置坐標(biāo),車輛標(biāo)注過程如圖3.18所示。包含標(biāo)注信息的xml文件不能直接用來訓(xùn)練YOLO網(wǎng)絡(luò),需要將xml文件轉(zhuǎn)換成YOLO支持的txt文件。標(biāo)注完所有圖片后,將原圖及生成的所有文件按照VOC數(shù)據(jù)文件結(jié)構(gòu)存放,以供訓(xùn)練車輛識別模型使用。
7.網(wǎng)絡(luò)模型優(yōu)化
YOLO網(wǎng)絡(luò)采用均方誤差(mean squared error)作為損失函數(shù),這種損失函數(shù)的設(shè)計形式對優(yōu)化模型參數(shù)非常有利。為了更好地訓(xùn)練網(wǎng)絡(luò)模型,YOLO網(wǎng)絡(luò)在反向傳播的過程中,其損失函數(shù)共包含三部分內(nèi)容:
(1)標(biāo)注數(shù)據(jù)與網(wǎng)格預(yù)測坐標(biāo)之間的誤差(coordError) ;
(2)目標(biāo)的預(yù)測邊界框與真實邊界框之間的交集與并集的比值誤差( iouError) ;(3)目標(biāo)的分類誤差(classError)。
YOLO的損失函數(shù)如下:
(w,y)表示網(wǎng)絡(luò)預(yù)測目標(biāo)框的寬和高;(w,,h, )表示標(biāo)簽中目標(biāo)框的寬和高;C表示網(wǎng)絡(luò)預(yù)測目標(biāo)時計算的置信度分?jǐn)?shù);己,表示網(wǎng)絡(luò)設(shè)置的置信度分?jǐn)?shù);P?表示網(wǎng)絡(luò)預(yù)測的目標(biāo)屬于某一類別的概率;?表示目標(biāo)真實類別的概率;參數(shù)⒉ora的引入是為了增強邊界框在損失計算中的重要性。
能夠減弱非目標(biāo)區(qū)域?qū)δ繕?biāo)區(qū)域置信度計算的影響,Aoobj =0.5;I表示圖像中第i個圖像塊有目標(biāo),TW表示在第i個圖像塊的第i個預(yù)測框中有目標(biāo),若無目標(biāo)刷頭noobj在預(yù)測目標(biāo)的邊界框時,預(yù)測結(jié)果對大目標(biāo)和小目標(biāo)的影響是相同的,然而真實情況是大目標(biāo)的敏感性小于小目標(biāo),當(dāng)邊界框的寬和高(w,h)發(fā)生略微變化時,小目標(biāo)的邊界框就會消失,因此,YOLO網(wǎng)絡(luò)采用平方根處理邊界框的寬和高(w,h),這種對邊界框的處理方式雖然能夠使得大目標(biāo)與小目標(biāo)的敏感性接近一致,但是沒有考慮到物體尺寸存在差異時對整體誤差的影響不同,交通視頻中往往車型較多,YOLO網(wǎng)絡(luò)損失函數(shù)對大車和小車的預(yù)測邊界框采用統(tǒng)一的誤差,這與真實情況不符,為了體現(xiàn)出不同尺寸的車輛產(chǎn)生的誤差在整個網(wǎng)絡(luò)中所占的比重不同,本文采用比值的方式對損失函數(shù)進行優(yōu)化,運用( w;-w, / ,h,-h, / h,)代替原損失函數(shù)的(w,-w,,(h,-Vh,),這樣不但可以提升網(wǎng)絡(luò)預(yù)測物體類別的能力,也可以優(yōu)化目標(biāo)邊框的位置。優(yōu)化后的損失函數(shù)如式所示:
8.核心代碼講解
8.1 detector_CPU.py
class Detector:
def __init__(self):
self.img_size = 640
self.threshold = 0.1
self.stride = 1
self.weights = './weights/output_of_small_target_detection.pt'
self.device = '0' if torch.cuda.is_available() else 'cpu'
self.device = select_device(self.device)
model = attempt_load(self.weights, map_location=self.device)
model.to(self.device).eval()
model.float()
self.m = model
self.names = model.module.names if hasattr(
model, 'module') else model.names
def preprocess(self, img):
img0 = img.copy()
img = letterbox(img, new_shape=self.img_size)[0]
img = img[:, :, ::-1].transpose(2, 0, 1)
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(self.device)
img = img.float()
img /= 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
return img0, img
def detect(self, im):
im0, img = self.preprocess(im)
pred = self.m(img, augment=False)[0]
pred = pred.float()
pred = non_max_suppression(pred, self.threshold, 0.4)
boxes = []
for det in pred:
if det is not None and len(det):
det[:, :4] = scale_coords(
img.shape[2:], det[:, :4], im0.shape).round()
for *x, conf, cls_id in det:
lbl = self.names[int(cls_id)]
if lbl not in ['car','bus','truck']:
continue
x1, y1 = int(x[0]), int(x[1])
x2, y2 = int(x[2]), int(x[3])
xm = x2
ym = y2
boxes.append((x1, y1, x2, y2, lbl, conf))
return boxes
封裝的類名為Detector
,包含以下方法:
-
__init__
:初始化模型和參數(shù) -
preprocess
:預(yù)處理圖像 -
detect
:檢測目標(biāo)并返回檢測結(jié)果
這個程序文件名為detector_CPU.py,它是一個目標(biāo)檢測器的類。該類具有以下屬性和方法:
屬性:
- img_size:圖像的尺寸,默認(rèn)為640
- threshold:目標(biāo)檢測的置信度閾值,默認(rèn)為0.1
- stride:步長,默認(rèn)為1
- weights:模型的權(quán)重文件路徑,默認(rèn)為’./weights/output_of_small_target_detection.pt’
- device:設(shè)備類型,如果有GPU則為’0’,否則為’cpu’
- m:加載的模型
- names:目標(biāo)類別的名稱列表
方法:
- init(self):初始化方法,加載模型并設(shè)置相關(guān)參數(shù)
- preprocess(self, img):預(yù)處理方法,將輸入圖像進行尺寸調(diào)整、通道轉(zhuǎn)換等操作,返回原始圖像和處理后的圖像
- detect(self, im):目標(biāo)檢測方法,對輸入圖像進行目標(biāo)檢測,返回檢測到的目標(biāo)框的列表
在detect方法中,首先調(diào)用preprocess方法對輸入圖像進行預(yù)處理。然后使用加載的模型對處理后的圖像進行目標(biāo)檢測,得到預(yù)測結(jié)果。接著對預(yù)測結(jié)果進行非最大抑制,去除重疊的目標(biāo)框。最后,遍歷每個檢測到的目標(biāo)框,篩選出類別為’car’、'bus’和’truck’的目標(biāo)框,并將其添加到結(jié)果列表中。最終返回結(jié)果列表。
8.2 detector_GPU.py
class Detector:
def __init__(self):
self.img_size = 640
self.threshold = 0.1
self.stride = 1
self.weights = './weights/Attention_mechanism.pt'
self.device = '0' if torch.cuda.is_available() else 'cpu'
self.device = select_device(self.device)
model = attempt_load(self.weights, map_location=self.device)
model.to(self.device).eval()
model.half()
self.m = model
self.names = model.module.names if hasattr(model, 'module') else model.names
def preprocess(self, img):
img0 = img.copy()
img = letterbox(img, new_shape=self.img_size)[0]
img = img[:, :, ::-1].transpose(2, 0, 1)
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(self.device)
img = img.half()
img /= 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
return img0, img
def detect(self, im):
im0, img = self.preprocess(im)
pred = self.m(img, augment=False)[0]
pred = pred.float()
pred = non_max_suppression(pred, self.threshold, 0.4)
boxes = []
for det in pred:
if det is not None and len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round()
for *x, conf, cls_id in det:
lbl = self.names[int(cls_id)]
if lbl not in ['bicycle','car', 'bus', 'truck']:
continue
x1, y1 = int(x[0]), int(x[1])
x2, y2 = int(x[2]), int(x[3])
xm = x2
ym = y2
if ym +0.797* xm -509.77 > 0:
boxes.append((x1, y1, x2, y2, lbl, conf))
return boxes
這個程序文件名為detector_GPU.py,它是一個目標(biāo)檢測器的類。該類具有以下功能:
-
初始化函數(shù):設(shè)置圖像大小、閾值和步長等參數(shù),加載模型權(quán)重文件,選擇設(shè)備(如果有GPU則選擇GPU,否則選擇CPU),將模型加載到設(shè)備上,并設(shè)置為評估模式。
-
預(yù)處理函數(shù):對輸入的圖像進行預(yù)處理,包括調(diào)整圖像大小、轉(zhuǎn)換顏色通道順序、轉(zhuǎn)換為numpy數(shù)組、轉(zhuǎn)換為torch張量、歸一化等操作。
-
檢測函數(shù):對輸入的圖像進行目標(biāo)檢測,返回檢測到的目標(biāo)框的坐標(biāo)、類別和置信度。該函數(shù)首先調(diào)用預(yù)處理函數(shù)對圖像進行處理,然后使用加載的模型對圖像進行推理,得到預(yù)測結(jié)果。接著使用非最大抑制算法對預(yù)測結(jié)果進行篩選,去除重疊的框,并根據(jù)閾值進行置信度過濾。最后,根據(jù)類別進行篩選,只保留自行車、汽車、公交車和卡車的目標(biāo)框。
該程序依賴于其他模塊和庫,如torch、numpy、cv2等,這些模塊和庫需要提前安裝和導(dǎo)入。
8.3 Mouse.py
import cv2
class MouseClick:
def __init__(self, img):
self.img = img
def on_EVENT_LBUTTONDOWN(self, event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print("(%d,%d)" % (x, y))
xy = "%d,%d" % (x, y)
cv2.circle(self.img, (x, y), 1, (255, 0, 0), thickness=-1)
cv2.putText(self.img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
1.0, (0, 0, 0), thickness=1)
cv2.imshow("image", self.img)
def mouse(self):
cv2.namedWindow("image")
cv2.setMouseCallback("image", self.on_EVENT_LBUTTONDOWN)
cv2.imshow("image", self.img)
while (True):
try:
cv2.waitKey(100)
except Exception:
cv2.destroyAllWindows()
break
cv2.waitKey(0)
cv2.destroyAllWindows()
這個程序文件名為Mouse.py,主要功能是在圖像上顯示鼠標(biāo)點擊的坐標(biāo),并在點擊位置繪制一個藍色的圓圈。程序使用了OpenCV庫來處理圖像和鼠標(biāo)事件。具體的實現(xiàn)過程如下:
- 導(dǎo)入cv2庫。
- 定義一個名為mouse的函數(shù),該函數(shù)接受一個圖像作為參數(shù)。
- 在函數(shù)內(nèi)部定義一個名為on_EVENT_LBUTTONDOWN的回調(diào)函數(shù),用于處理鼠標(biāo)左鍵點擊事件。
- 如果檢測到鼠標(biāo)左鍵點擊事件,將點擊的坐標(biāo)打印出來,并將坐標(biāo)信息添加到圖像上,繪制一個藍色的圓圈。
- 創(chuàng)建一個名為"image"的窗口,并將鼠標(biāo)事件回調(diào)函數(shù)綁定到該窗口上。
- 在窗口中顯示圖像。
- 進入一個無限循環(huán),等待用戶操作。
- 如果捕獲到異常,關(guān)閉窗口并退出循環(huán)。
- 等待用戶按下任意鍵后關(guān)閉窗口。
總體來說,這個程序?qū)崿F(xiàn)了一個簡單的圖像交互界面,可以顯示鼠標(biāo)點擊的坐標(biāo),并在圖像上進行標(biāo)注。
8.4 tracker.py
class ObjectTracker:
def __init__(self):
cfg = get_config()
cfg.merge_from_file("./deep_sort/configs/deep_sort.yaml")
self.deepsort = DeepSort(cfg.DEEPSORT.REID_CKPT,
max_dist=cfg.DEEPSORT.MAX_DIST, min_confidence=cfg.DEEPSORT.MIN_CONFIDENCE,
nms_max_overlap=cfg.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.DEEPSORT.MAX_IOU_DISTANCE,
max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET,
use_cuda=True)
def draw_bboxes(self, image, bboxes, line_thickness):
line_thickness = line_thickness or round(
0.002 * (image.shape[0] + image.shape[1]) * 0.5) + 1
list_pts = []
point_radius = 4
for (x1, y1, x2, y2, cls_id, pos_id) in bboxes:
color = (0, 255, 0)
# 撞線的點
check_point_x = x1
check_point_y = int(y1 + ((y2 - y1) * 0.6))
c1, c2 = (x1, y1), (x2, y2)
cv2.rectangle(image, c1, c2, color, thickness=line_thickness, lineType=cv2.LINE_AA)
font_thickness = max(line_thickness - 1, 1)
t_size = cv2.getTextSize(cls_id, 0, fontScale=line_thickness / 3, thickness=font_thickness)[0]
c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3
cv2.rectangle(image, c1, c2, color, -1, cv2.LINE_AA) # filled
cv2.putText(image, '{} ID-{}'.format(cls_id, pos_id), (c1[0], c1[1] - 2), 0, line_thickness / 3,
[225, 255, 255], thickness=font_thickness, lineType=cv2.LINE_AA)
list_pts.append([check_point_x - point_radius, check_point_y - point_radius])
list_pts.append([check_point_x - point_radius, check_point_y + point_radius])
list_pts.append([check_point_x + point_radius, check_point_y + point_radius])
list_pts.append([check_point_x + point_radius, check_point_y - point_radius])
ndarray_pts = np.array(list_pts, np.int32)
cv2.fillPoly(image, [ndarray_pts], color=(0, 0, 255))
list_pts.clear()
return image
def update(self, bboxes, image):
bbox_xywh = []
confs = []
bboxes2draw = []
if len(bboxes) > 0:
for x1, y1, x2, y2, lbl, conf in bboxes:
obj = [
int((x1 + x2) * 0.5), int((y1 + y2) * 0.5),
x2 - x1, y2 - y1
]
bbox_xywh.append(obj)
confs.append(conf)
xywhs = torch.Tensor(bbox_xywh)
confss = torch.Tensor(confs)
outputs = self.deepsort.update(xywhs, confss, image)
for x1, y1, x2, y2, track_id in list(outputs):
# x1, y1, x2, y2, track_id = value
center_x = (x1 + x2) * 0.5
center_y = (y1 + y2) * 0.5
label = self.search_label(center_x=center_x, center_y=center_y,
bboxes_xyxy=bboxes, max_dist_threshold=20.0)
bboxes2draw.append((x1, y1, x2, y2, label, track_id))
pass
pass
return bboxes2draw
def search_label(self, center_x, center_y, bboxes_xyxy, max_dist_threshold):
"""
在 yolov5 的 bbox 中搜索中心點最接近的label
:param center_x:
:param center_y:
:param bboxes_xyxy:
:param max_dist_threshold:
:return: 字符串
"""
label = ''
# min_label = ''
min_dist = -1.0
for x1, y1, x2, y2, lbl, conf in bboxes_xyxy:
center_x2 = (x1 + x2) * 0.5
center_y2 = (y1 + y2) * 0.5
# 橫縱距離都小于 max_dist
min_x = abs(center_x2 - center_x)
min_y = abs(center_y2 - center_y)
if min_x < max_dist_threshold and min_y < max_dist_threshold:
# 距離閾值,判斷是否在允許誤差范圍內(nèi)
# 取 x, y 方向上的距離平均值
avg_dist = (min_x + min_y) * 0.5
if min_dist == -1.0:
# 第一次賦值
min_dist = avg_dist
# 賦值label
label = lbl
pass
else:
# 若不是第一次,則距離小的優(yōu)先
if avg_dist < min_dist:
min_dist = avg_dist
# label
label = lbl
pass
pass
pass
return label
該程序文件名為tracker.py,主要功能是使用深度學(xué)習(xí)模型進行目標(biāo)跟蹤。程序首先導(dǎo)入了所需的庫和模塊,包括cv2、torch和numpy等。然后,通過解析配置文件獲取配置信息,并使用這些配置信息初始化DeepSort跟蹤器。接下來,程序定義了一些輔助函數(shù),包括繪制邊界框和更新跟蹤結(jié)果的函數(shù)。其中,繪制邊界框函數(shù)用于在圖像上繪制檢測到的目標(biāo)邊界框和標(biāo)簽,更新函數(shù)用于根據(jù)檢測結(jié)果更新跟蹤器的狀態(tài)。最后,程序定義了一個搜索標(biāo)簽的函數(shù),用于在檢測到的目標(biāo)邊界框中搜索與給定中心點最接近的標(biāo)簽。整個程序的目標(biāo)是實現(xiàn)目標(biāo)跟蹤的功能。
8.5 ui.py
import numpy as np
import tracker
from detector_CPU import Detector
import cv2
class TrafficFlowDetection:
def __init__(self, video_path):
self.video_path = video_path
self.detector = Detector()
self.tracker = tracker
self.down_count = 0
self.up_count = 0
def detect_traffic_flow(self):
mask_image_temp = np.zeros((1080, 1920), dtype=np.uint8)
list_pts_blue = [[0, 600], [0, 900], [1920, 900], [1920, 600]]
ndarray_pts_blue = np.array(list_pts_blue, np.int32)
polygon_blue_value_1 = cv2.fillPoly(mask_image_temp, [ndarray_pts_blue], color=1)
polygon_blue_value_1 =
這個程序文件名為ui.py,主要實現(xiàn)了一個車流量監(jiān)測系統(tǒng)的圖形界面。程序中導(dǎo)入了一些必要的庫,包括numpy、tracker、detector_CPU、cv2、matplotlib等。程序定義了一些函數(shù),包括det_yolov5v6、ssd、yolox等。其中det_yolov5v6函數(shù)是主要的車流量監(jiān)測函數(shù),通過讀取視頻文件,進行目標(biāo)檢測和跟蹤,并根據(jù)撞線檢測來統(tǒng)計車輛的進入和離開數(shù)量。程序還定義了一些線程類,用于在后臺進行視頻處理。最后,程序創(chuàng)建了一個圖形界面,并實現(xiàn)了
這個程序文件是一個深度排序(DeepSort)的實現(xiàn)。它包含了一個名為DeepSort的類,該類用于跟蹤目標(biāo)并輸出目標(biāo)的邊界框和身份信息。
DeepSort類的構(gòu)造函數(shù)接受一些參數(shù),包括模型路徑、最大距離、最小置信度、非最大抑制的最大重疊度、最大IOU距離、最大年齡、初始化幀數(shù)和NN預(yù)算。構(gòu)造函數(shù)初始化了一些變量,并創(chuàng)建了一個特征提取器(Extractor)和一個跟蹤器(Tracker)。
類中的update方法用于更新跟蹤器。它接受目標(biāo)的邊界框、置信度和原始圖像作為輸入,并生成檢測結(jié)果。然后,它運行非最大抑制算法,對檢測結(jié)果進行篩選。接下來,它通過調(diào)用跟蹤器的predict和update方法來更新跟蹤器的狀態(tài)。最后,它輸出跟蹤結(jié)果,包括邊界框和身份信息。
類中還包含了一些輔助方法,用于將邊界框的表示方式進行轉(zhuǎn)換,以及獲取目標(biāo)的特征。
總的來說,這個程序文件實現(xiàn)了一個深度排序算法,用于目標(biāo)跟蹤和身份識別。它使用了深度學(xué)習(xí)模型進行特征提取,并結(jié)合了最近鄰距離度量和非最大抑制算法來實現(xiàn)目標(biāo)跟蹤。
9.系統(tǒng)整體結(jié)構(gòu)
整體功能和構(gòu)架概述:
該項目是一個車流量監(jiān)測系統(tǒng),主要功能是通過目標(biāo)檢測和跟蹤來統(tǒng)計車輛的進入和離開數(shù)量。程序使用了深度學(xué)習(xí)模型進行目標(biāo)檢測和特征提取,并結(jié)合了DeepSort算法進行目標(biāo)跟蹤。圖形界面提供了用戶交互的界面,可以選擇視頻文件進行車流量監(jiān)測,并顯示監(jiān)測結(jié)果。
下面是每個文件的功能概述:文章來源:http://www.zghlxwxcb.cn/news/detail-828413.html
文件路徑 | 功能概述 |
---|---|
detector_CPU.py | 實現(xiàn)目標(biāo)檢測器的類,使用CPU進行目標(biāo)檢測 |
detector_GPU.py | 實現(xiàn)目標(biāo)檢測器的類,使用GPU進行目標(biāo)檢測 |
Mouse.py | 實現(xiàn)圖像交互界面,顯示鼠標(biāo)點擊的坐標(biāo) |
tracker.py | 實現(xiàn)目標(biāo)跟蹤器的類,使用深度學(xué)習(xí)模型進行目標(biāo)跟蹤 |
ui.py | 實現(xiàn)車流量監(jiān)測系統(tǒng)的圖形界面 |
deep_sort\deep_sort\deep_sort.py | 實現(xiàn)DeepSort跟蹤算法的類 |
deep_sort\deep_sort_init_.py | 初始化文件 |
deep_sort\deep_sort\deep\evaluate.py | 實現(xiàn)評估函數(shù) |
deep_sort\deep_sort\deep\feature_extractor.py | 實現(xiàn)特征提取器的類 |
deep_sort\deep_sort\deep\model.py | 實現(xiàn)模型的類 |
deep_sort\deep_sort\deep\original_model.py | 實現(xiàn)原始模型的類 |
deep_sort\deep_sort\deep\test.py | 實現(xiàn)測試函數(shù) |
deep_sort\deep_sort\deep\train.py | 實現(xiàn)訓(xùn)練函數(shù) |
deep_sort\deep_sort\deep_init_.py | 初始化文件 |
deep_sort\deep_sort\sort\detection.py | 實現(xiàn)目標(biāo)檢測的類 |
deep_sort\deep_sort\sort\iou_matching.py | 實現(xiàn)IOU匹配的類 |
deep_sort\deep_sort\sort\kalman_filter.py | 實現(xiàn)卡爾曼濾波的類 |
deep_sort\deep_sort\sort\linear_assignment.py | 實現(xiàn)線性分配的類 |
deep_sort\deep_sort\sort\nn_matching.py | 實現(xiàn)最近鄰匹配的類 |
deep_sort\deep_sort\sort\preprocessing.py | 實現(xiàn)預(yù)處理的類 |
deep_sort\deep_sort\sort\track.py | 實現(xiàn)跟蹤目標(biāo)的類 |
deep_sort\deep_sort\sort\tracker.py | 實現(xiàn)跟蹤器的類 |
deep_sort\deep_sort\sort_init_.py | 初始化文件 |
deep_sort\utils\asserts.py | 實現(xiàn)斷言函數(shù) |
deep_sort\utils\draw.py | 實現(xiàn)繪圖函數(shù) |
deep_sort\utils\evaluation.py | 實現(xiàn)評估函數(shù) |
deep_sort\utils\io.py | 實現(xiàn)輸入輸出函數(shù) |
deep_sort\utils\json_logger.py | 實現(xiàn)JSON日志記錄器的類 |
deep_sort\utils\log.py | 實現(xiàn)日志記錄函數(shù) |
deep_sort\utils\parser.py | 實現(xiàn)解析器的類 |
deep_sort\utils\tools.py | 實現(xiàn)工具函數(shù) |
deep_sort\utils_init_.py | 初始化文件 |
models\common.py | 實現(xiàn)通用模型函數(shù) |
models\experimental.py | 實現(xiàn)實驗?zāi)P秃瘮?shù) |
models\export.py | 實現(xiàn)模型導(dǎo)出函數(shù) |
models\yolo.py | 實現(xiàn)YOLO模型的類 |
models_init_.py | 初始化文件 |
utils\activations.py | 實現(xiàn)激活函數(shù) |
utils\autoanchor.py | 實現(xiàn)自動錨框函數(shù) |
utils\datasets.py | 實現(xiàn)數(shù)據(jù)集函數(shù) |
utils\general.py | 實現(xiàn)通用函數(shù) |
utils\google_utils.py | 實現(xiàn)Google工具函數(shù) |
utils\loss.py | 實現(xiàn)損失函數(shù) |
utils\metrics.py | 實現(xiàn)評估指標(biāo)函數(shù) |
utils\plots.py | 實現(xiàn)繪圖函數(shù) |
utils\torch_utils.py | 實現(xiàn)PyTorch工具函數(shù) |
utils_init_.py | 初始化文件 |
utils\aws\resume.py | 實現(xiàn)AWS恢復(fù)函數(shù) |
utils\aws_init_.py | 初始化文件 |
utils\wandb_logging\log_dataset.py | 實現(xiàn)WandB日志記錄器的類 |
utils\wandb_logging\wandb_utils.py | 實現(xiàn)WandB工具函數(shù) |
utils\wandb_logging_init_.py | 初始化文件 |
10.系統(tǒng)整合
下圖[完整源碼&環(huán)境部署視頻教程&自定義UI界面]
參考博客《OpenCV&YOLOv5的車流量統(tǒng)計系統(tǒng)(源碼&部署教程)》文章來源地址http://www.zghlxwxcb.cn/news/detail-828413.html
到了這里,關(guān)于【精選】OpenCV&YOLOv5的車流量統(tǒng)計系統(tǒng)(源碼&部署教程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!