PINet车道线检测+YOLOv8视频目标检测

前言:       

本文主要目的是实现在PINet车道线检测的代码中嵌入YOLOv8的目标检测模块,具体效果如图所示:

         在学习和使用YOLOv8进行目标检测时,感觉可以和最近研究的车道线检测项目结合起来,形成一套如上图所示的视频效果。

        其实将车道线检测和目标检测结合可以提供更全面的场景信息。车道线检测提供了关于道路结构和车辆行驶方向的信息,而目标检测可以检测到周围的车辆、行人、交通标志等物体。通过综合这些信息,可以更准确地理解道路环境,提高驾驶系统的感知能力,另外,可以增强驾驶系统的安全性。车道线检测可以帮助车辆保持在正确的车道内,避免偏离道路。目标检测可以检测到潜在的障碍物或危险情况,帮助驾驶系统及时做出反应,例如避让行人或刹车避免与其他车辆相撞。

        在决策支持方面,车道线检测和目标检测的结合可以为驾驶系统提供更多的决策支持。通过分析车道线和周围目标的位置和状态,可以帮助驾驶系统做出更合理的行驶决策,例如选择合适的车道变道时机、保持安全距离等。

相关资料:

PINet车道线检测论文:https://arxiv.org/abs/2002.06604

官方代码:GitHub - koyeongmin/PINet

论文解读:http://t.csdnimg.cn/AOV91

论文复现过程:http://t.csdnimg.cn/Lhz6m

YOLOv8的部署与安装:http://t.csdnimg.cn/YrWNu

具体实现:

        在所有必须的软件、代码、环境准备完成后,将YOLOv8模块(ultralytics-main)导入至PINet车道线检测的代码包中:

注意:要将其放入根目录下,右键将其标记为Sources Root,否则会检测不到ultralytics


       新建python package,命名:YOLO_predicted_video,在其package下新建python文件,命名:YOLO_pre.py

        导入所需要的包,写入以下代码:

import cv2
from ultralytics import YOLO

#############################
## YOLO
############################
def yolo_pre():
    yolo=YOLO('./yolov8n.pt')
    video_path='C:\\Users\\25055\\Desktop\\测试2.mp4'
    cap = cv2.VideoCapture(video_path)  # 创建一个 VideoCapture 对象,用于从视频文件中读取帧
    # 获取视频帧的维度
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))
    # 创建VideoWriter对象
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter('C:\\Users\\25055\Desktop\\output.mp4', fourcc, 20.0, (frame_width, frame_height))

    while cap.isOpened():
        status, frame = cap.read()  # 使用 cap.read() 从视频中读取每一帧
        if not status:
            break
        result = yolo.predict(source=frame, save=True)
        result = result[0]
        anno_frame = result.plot()
        #cv2.imshow('行人', anno_frame)
        out.write(anno_frame)
        # 注释的框架是通过调用 result.plot() 获得的,它会在框架上绘制边界框和标签。
        # 带注释的框架使用 cv2.imshow() 窗口名称“行人”显示。
        #if cv2.waitKey(1) & 0xFF == ord('q'):
            #break
    cap.release()
    cv2.destroyAllWindows()
    print('yolo识别完成')
    video_yolo_path='C:\\Users\\25055\Desktop\\output.mp4'
    return video_yolo_path

其中:

video_path='C:\\Users\\25055\\Desktop\\测试2.mp4'

便是我们要检测的视频,存放在桌面中。

out = cv2.VideoWriter('C:\\Users\\25055\Desktop\\output.mp4', fourcc, 20.0, (frame_width, frame_height))

将YOLO所检测完成的视频结果存储至'C:\\Users\\25055\Desktop\\output.mp4'文件中。

打开test.py文件:导入YOLO_pre中的yolo_pre模块

在开始测试之后输入以下代码:

video_path=yolo_pre()

 在Parameters.py文件中,将mode设置为1。

test.py文件的cv2.VideoCapture()设置为video_path,即:

    elif p.mode == 1: # 使用视频文件对模型进行测试
        cap = cv2.VideoCapture(video_path)#通过cv2.VideoCapture打开视频文件
        while(cap.isOpened()):
            ret, frame = cap.read()
            if not ret:
                break
            prevTime = time.time()
            frame = cv2.resize(frame, (512,256))/255.0
            frame = np.rollaxis(frame, axis=2, start=0)
            _, _, ti = test(lane_agent, np.array([frame])) ##循环读取每一帧图像,将图像进行预处理后传递给test函数进行测试,并显示测试结果。
            #计算FPS
            curTime = time.time()
            sec = curTime - prevTime
            fps = 1/(sec)
            s = "FPS : "+ str(fps)##同时,计算帧率并在图像上显示。
            cv2.putText(ti[0], s, (0, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))#FPS展示

            cv2.imshow('frame',ti[0])
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        cap.release()
        cv2.destroyAllWindows()

右键运行test.py文件。

结果展示:

yolo开始进行目标检测:

 yolo检测结果:

开始进行车道线检测任务:

检测结果:

 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-20 14:44:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-20 14:44:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-20 14:44:05       82 阅读
  4. Python语言-面向对象

    2024-04-20 14:44:05       91 阅读

热门阅读

  1. MySQL 高级技巧

    2024-04-20 14:44:05       38 阅读
  2. ubuntu系统下opencv的编译安装

    2024-04-20 14:44:05       40 阅读
  3. Controller配置总结(SpringMVC学习笔记二)

    2024-04-20 14:44:05       35 阅读
  4. AGI来了?特拉斯用大模型帮助自动驾驶

    2024-04-20 14:44:05       35 阅读
  5. cpt111 Principles of Programming

    2024-04-20 14:44:05       36 阅读
  6. Spring自定义注解+AOP实现接口防重复提交

    2024-04-20 14:44:05       39 阅读
  7. CentOS 7软件安装全攻略:YUM命令详解与实战

    2024-04-20 14:44:05       38 阅读
  8. Github访问太慢解决方案

    2024-04-20 14:44:05       27 阅读
  9. 人工智能电话机器人常见的问题有哪些?

    2024-04-20 14:44:05       35 阅读