国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【精選】OpenCV&YOLOv5的車流量統(tǒng)計系統(tǒng)(源碼&部署教程)

這篇具有很好參考價值的文章主要介紹了【精選】OpenCV&YOLOv5的車流量統(tǒng)計系統(tǒng)(源碼&部署教程)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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.圖片演示

opencv和yolo結(jié)合,opencv,YOLO,人工智能
opencv和yolo結(jié)合,opencv,YOLO,人工智能
opencv和yolo結(jié)合,opencv,YOLO,人工智能

3.視頻演示

OpenCV&YOLOv5的車流量統(tǒng)計系統(tǒng)(源碼&部署教程)

4.系統(tǒng)流程步驟

基于OpenCV和Yolov5的車流量檢測系統(tǒng)可以通過以下步驟實現(xiàn):

  1. 圖像采集:使用攝像頭采集道路上的車輛圖像。

  2. 圖像預(yù)處理:使用OpenCV對采集到的圖像進行預(yù)處理,包括圖像去噪、圖像增強等。

  3. 車輛檢測:使用Yolov5對預(yù)處理后的圖像進行車輛檢測,識別出圖像中的車輛。

  4. 車輛跟蹤:根據(jù)檢測到的車輛,使用OpenCV進行車輛的跟蹤,追蹤車輛在不同幀之間的位置和運動軌跡。

  5. 車流量統(tǒng)計:根據(jù)車輛的跟蹤結(jié)果,統(tǒng)計道路上的車流量,包括車輛的數(shù)量、車輛的速度等。

5.算法優(yōu)點

基于OpenCV和Yolov5的車流量檢測系統(tǒng)具有以下優(yōu)勢和意義:

  1. 高準(zhǔn)確率:Yolov5作為一種先進的目標(biāo)檢測算法,具有較高的準(zhǔn)確率,可以準(zhǔn)確地檢測和識別道路上的車輛。

  2. 實時性強:Yolov5算法的實時性較好,可以在較短的時間內(nèi)完成車輛的檢測和跟蹤,實時更新車流量信息。

  3. 成本低:相比傳統(tǒng)的車流量檢測方法,基于OpenCV和Yolov5的系統(tǒng)不需要額外的傳感器設(shè)備,只需要使用攝像頭即可實現(xiàn)車流量檢測,成本較低。

  4. 安裝方便:基于OpenCV和Yolov5的系統(tǒng)只需要在道路上布設(shè)攝像頭,安裝和維護較為方便。

  5. 實用性強:車流量檢測系統(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)練車輛識別模型使用。
opencv和yolo結(jié)合,opencv,YOLO,人工智能

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ù)如下:
opencv和yolo結(jié)合,opencv,YOLO,人工智能
(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ù)如式所示:
opencv和yolo結(jié)合,opencv,YOLO,人工智能

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)檢測器的類。該類具有以下功能:

  1. 初始化函數(shù):設(shè)置圖像大小、閾值和步長等參數(shù),加載模型權(quán)重文件,選擇設(shè)備(如果有GPU則選擇GPU,否則選擇CPU),將模型加載到設(shè)備上,并設(shè)置為評估模式。

  2. 預(yù)處理函數(shù):對輸入的圖像進行預(yù)處理,包括調(diào)整圖像大小、轉(zhuǎn)換顏色通道順序、轉(zhuǎn)換為numpy數(shù)組、轉(zhuǎn)換為torch張量、歸一化等操作。

  3. 檢測函數(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)過程如下:

  1. 導(dǎo)入cv2庫。
  2. 定義一個名為mouse的函數(shù),該函數(shù)接受一個圖像作為參數(shù)。
  3. 在函數(shù)內(nèi)部定義一個名為on_EVENT_LBUTTONDOWN的回調(diào)函數(shù),用于處理鼠標(biāo)左鍵點擊事件。
  4. 如果檢測到鼠標(biāo)左鍵點擊事件,將點擊的坐標(biāo)打印出來,并將坐標(biāo)信息添加到圖像上,繪制一個藍色的圓圈。
  5. 創(chuàng)建一個名為"image"的窗口,并將鼠標(biāo)事件回調(diào)函數(shù)綁定到該窗口上。
  6. 在窗口中顯示圖像。
  7. 進入一個無限循環(huán),等待用戶操作。
  8. 如果捕獲到異常,關(guān)閉窗口并退出循環(huán)。
  9. 等待用戶按下任意鍵后關(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é)果。

下面是每個文件的功能概述:

文件路徑 功能概述
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和yolo結(jié)合,opencv,YOLO,人工智能
參考博客《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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • yolov8 + deepsort 用于進行多目標(biāo)檢測(車流統(tǒng)計,人流統(tǒng)計)

    參考視頻:https://www.youtube.com/watch?v=nkptX_vXJKo git地址:https://github.com/MuhammadMoinFaisal/YOLOv8-DeepSORT-Object-Tracking Clone the repository Goto the cloned folder. cd YOLOv8-DeepSORT-Object-Tracking Install the dependecies 這里要注意不是在yolo環(huán)境下執(zhí)行,而是在普通命令行下執(zhí)行,否則會報錯 Run the code with

    2024年02月16日
    瀏覽(48)
  • [超詳細(xì)]基于YOLO&OpenCV的人流量統(tǒng)計監(jiān)測系統(tǒng)(源碼&部署教程)

    [超詳細(xì)]基于YOLO&OpenCV的人流量統(tǒng)計監(jiān)測系統(tǒng)(源碼&部署教程)

    [YOLOv7]基于YOLO&Deepsort的人流量統(tǒng)計系統(tǒng)(源碼&部署教程)_嗶哩嗶哩_bilibili (1)獲取原始視頻幀 (2)利用目標(biāo)檢測器對視頻幀中的目標(biāo)進行檢測 (3)將檢測到的目標(biāo)的框中的特征提取出來,該特征包括表觀特征(方便特征對比避免ID switch)和運動特征(運動特征方 便卡爾

    2024年02月04日
    瀏覽(15)
  • 基于YOLOv8的多端車流檢測系統(tǒng)(用于畢設(shè)+開源)

    基于YOLOv8的多端車流檢測系統(tǒng)(用于畢設(shè)+開源)

    目錄 ?基于YOLOv8??的多端車流檢測系統(tǒng)-MTAS (Multi-Platform Traffic Analysis System) 一、基本功能介紹 1、客戶端 (pyside6+yolov8+pytorch) ?2、網(wǎng)頁端(Vue3+Typestript+Python3+MySQL) ?3、創(chuàng)新點(畢設(shè)需要) 4、項目包(前端-游客端) 5、項目包(前端-管理端) 6、項目包(客戶端+后端)

    2024年02月14日
    瀏覽(80)
  • python畢業(yè)設(shè)計 深度學(xué)習(xí)yolov5車輛顏色識別檢測系統(tǒng) - opencv

    python畢業(yè)設(shè)計 深度學(xué)習(xí)yolov5車輛顏色識別檢測系統(tǒng) - opencv

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天

    2024年02月04日
    瀏覽(25)
  • 基于深度學(xué)習(xí)的安全帽識別檢測系統(tǒng)(python OpenCV yolov5)

    基于深度學(xué)習(xí)的安全帽識別檢測系統(tǒng)(python OpenCV yolov5)

    收藏和點贊,您的關(guān)注是我創(chuàng)作的動力 ?? 基于深度學(xué)習(xí)算法,以PaddlePaddle深度學(xué)習(xí)框架作為實驗環(huán)境,選取了開源的安全帽識別數(shù)據(jù)庫和實地拍攝的安全帽佩戴照片,使用樣本擴增增加了實驗數(shù)據(jù)集的樣本數(shù),選取了Faster R-CNN、SSD與YOLO v3三種深度神經(jīng)網(wǎng)絡(luò)模型,構(gòu)建出安

    2024年02月08日
    瀏覽(23)
  • PyQt結(jié)合OpenCV實現(xiàn)實時人流量統(tǒng)計

    PyQt結(jié)合OpenCV實現(xiàn)實時人流量統(tǒng)計

    之前學(xué)的基本都是Web端的技術(shù)。前兩天的面試,讓我深入的去學(xué)習(xí)一下? Qt 技術(shù),了解完概念之后,才知道我之前接觸的類? TkInter? 技術(shù),有點安卓開發(fā)的味道。。。

    2024年02月12日
    瀏覽(22)
  • 基于opencv深度學(xué)習(xí),交通目標(biāo)檢測,行人車輛檢測,人流統(tǒng)計,交通流量檢測

    基于opencv深度學(xué)習(xí),交通目標(biāo)檢測,行人車輛檢測,人流統(tǒng)計,交通流量檢測

    文章目錄 0 前言+ 1. 目標(biāo)檢測概況+ 1.1 什么是目標(biāo)檢測?+ 1.2 發(fā)展階段 2. 行人檢測+ 2.1 行人檢測簡介+ 2.2 行人檢測技術(shù)難點+ 2.3 行人檢測實現(xiàn)效果+ 2.4 關(guān)鍵代碼-訓(xùn)練過程 最后 設(shè)計項目案例演示地址: 鏈接 畢業(yè)設(shè)計代做一對一指導(dǎo)項目方向涵蓋: 1.1 什么是目標(biāo)檢測? 目標(biāo)檢

    2024年02月04日
    瀏覽(26)
  • 基于Dlib&YOLOv5的疲勞駕駛和分心行為檢測系統(tǒng)(哈欠&喝水&抽煙&打電話檢測)深度學(xué)習(xí),Python,OpenCV,PyQT

    演示視頻:https://www.bilibili.com/video/BV1eD421j7zy/?spm_id_from=333.999.0.0vd_source=b68c16e2de94acf010fb2e70eb676424 開發(fā)技術(shù)環(huán)境: Pycharm + Python + PyQt5 + OpenCV + YOLOv5, 系統(tǒng)通過駕駛員前方攝像頭采集的駕駛行為實時圖像,可以輸出并顯示該駕駛員的駕駛行為結(jié)果,將視頻和結(jié)果顯示在上位機界

    2024年04月14日
    瀏覽(31)
  • OpenCV之YOLOv5目標(biāo)檢測

    OpenCV之YOLOv5目標(biāo)檢測

    ?? 個人主頁: 風(fēng)間琉璃 ?? 版權(quán): ?本文由【風(fēng)間琉璃】原創(chuàng)、在CSDN首發(fā)、需要轉(zhuǎn)載請聯(lián)系博主 ?? 如果文章對你有幫助、 歡迎關(guān)注、 點贊、 收藏(一鍵三連) 和 訂閱專欄 哦 目錄 前言 一、YOLOv5簡介 二、預(yù)處理 1.獲取分類名 2.獲取輸出層名稱 3.圖像尺度變換 三、模型加載

    2024年01月20日
    瀏覽(27)
  • ffmpeg tensorrt c++多拉流硬解碼yolov5 yolov7 bytetrack 人流追蹤統(tǒng)計 硬件編碼推流直播

    ffmpeg tensorrt c++多拉流硬解碼yolov5 yolov7 bytetrack 人流追蹤統(tǒng)計 硬件編碼推流直播

    ffmpeg拉流硬解碼yolov5 bytetrack 人流追蹤統(tǒng)計 硬件編碼推流直播 編程語言C++,所以環(huán)境搭建可能比較復(fù)雜,需要有耐心。 CPU:I5 12490F GPU:RTX2060 6GB RAM:16x2 GB雙通道 我測試運行可以25路(很極限了),20路比較穩(wěn),不會爆顯存。 多路編碼推流有個問題,就是NVIDIA對消費級顯卡編

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包