醋醋百科网

Good Luck To You!

一文掌握计算机视觉模型YOLOv8实现车辆跟踪和计数

阅读文章前麻烦您点下右上角的“关注”,方便及时看到每天的最新内容,在此十分感谢您的支持。

文|AI明

编辑|AI明

对移动物体进行跟踪和计数是计算机视觉 (CV) 中最常见的应用之一。在开始之前,我们需要制定好整个项目的架构。

其中有几个关键步骤要做——检测跟踪、计数和注释。我们将使用最先进的工具——YOLOv8ByteTrackSupervision来完成。

使用 YOLOv8 进行物体检测

我们的需要从检测开始,有数十个用于对象检测或图像分割的库,这里,我们使用 YOLOv8。它的原生 pip 包支持使用起来更加方便。

安装YOLOv8:

pip install ultralytics

YOLOv8 提供了一个 SDK,只需几行 Python 代码便可进行训练或预测。加载 YOLOv8 模型并推断对单帧图像进行推理:

from ultralytics import YOLO

# 导入模型
model = YOLO(MODEL_PATH)
model.fuse()
# 推理
detections = model(frame)

使用 ByteTrack 进行对象跟踪

为了计算有多少个独立的对象越过一条线,我们需要一个跟踪器。与检测器一样,有很多可以选择——SORTDeepSortFairMOT等。

我们选择ByteTrack,直接pip安装:

pip install bytetracker

使用supervision进行计数

首先,使用 pip 安装该软件包。supervision仍处于测试阶段,因此为了避免出现问题,建议使用特定版本。

pip install supervision==0.1.0

supervision库的使用:首先,从源视频中读取帧并将处理后的帧写入输出文件:

from supervision.video.dataclasses import VideoInfo
from supervision.video.sink import VideoSink
from supervision.video.source import get_video_frames_generator


video_info = VideoInfo.from_video_path(SOURCE_VIDEO_PATH)

generator = get_video_frames_generator(SOURCE_VIDEO_PATH)

with VideoSink(TARGET_VIDEO_PATH, video_info) as sink:
   for frame in tqdm(generator, total=video_info.total_frames):
       frame = ...
       sink.write_frame(frame)

最后,我们使用LineCounter来计算有多少个独立的对象跨越了虚拟线:

from supervision.tools.line_counter import LineCounter
from supervision.geometry.dataclasses import Point

LINE_START = Point(50, 1500)
LINE_END = Point(3790, 1500)

line_counter = LineCounter(start=LINE_START, end=LINE_END)

for frame in frames:
    detections = ...
    line_counter.update(detections=detections)
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言