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检测结果:

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

检测结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打破常规:AI如何帮助从业者规避营销活动风险

人工智能时代:如何利用AI提升营销效果 在当今商界,市场策划活动对于企业来说至关重要,它们不仅可以吸引消费者的注意,还可以扩大企业的市场份额。然而,这些活动本身带来的风险也不容忽视。为了帮助企业在策划活动时做出…

推荐一个免费使用Claude 3, GPT4和Gemini 1.5 Pro的网站

在探索人工智能的广阔天地时,我偶然间发现了You AI这一平台,它不仅更新了大量的模型,还慷慨地提供了免费的使用机会。兴奋之余,我迅速开始尝试这些新功能,并决定将我的体验分享给大家。以下是我试用的流程: 打开网站:点击左下角的Sign in蓝色框 https://you.comhttps://…

C# 关于进程回收管理的一款工具设计与分享

目录 设计初衷 开发运行环境 Craneoffice ProcessGC 运行主界面 管理任务与策略 其它设置 移动存储设备管理 核心代码-计时器监控 小结 设计初衷 在使用 COM 模式操作 OFFICE 组件的开发过程中,当操作完相关文档后,在某些情况下仍然无法释放掉…

【C++】数据结构的恶龙set和map来了~

下一篇AVL树难点中的难点~ 文章目录 前言一、set的介绍二、map的介绍 题目练习总结 前言 1.关联式容器 在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、 forward_list(C11)等,这些容器统称为序列式容…

【C++】3.类和对象(中)

一、类的6个默认成员函数 在上一篇博客中,我们计算了空类的大小为 1 。那么空类中真的什么东西都没有吗?其实不是的,当一个类在什么都不写的时候就会自动生成6个默认的成员函数(用户没有写,但是编译器自动生成的成员函…

AI在运维实践中的价值提升

在2024年的AI赛道上,利用大数据 、机器学习算法、人工智能来改善运维效率已成为软件运营商发展的新主张,通过AI在运维流程的洞察、决策和执行,从而提升效率、减少故障时间,优化用户体验。通过分析大量数据来识别趋势和模式&#x…

C ++ 和 C语言的优缺点分别是什么?

C语言,它简直就是编程世界的一块磐石。简洁、直接,让人一眼就能明白它想干嘛。它的运行速度快,接近硬件操作,特别适合那些需要直接与硬件打交道的场景。但就是因为这种接近硬件的特性,C语言在抽象层次上就显得有点捉襟…

科技感画册制作方法,视觉效果直接拉满

随着科技的不断进步,科技感画册制作也变得更加精彩和引人注目。通过巧妙地运用先进的设计工具和技术,以及结合创新的视觉元素,可以轻松地将画册的视觉效果直接拉满。 那你想知道怎么制作吗?现在我来教你这个方法吧,方法…

第九届少儿模特明星盛典 全球赛首席体验官『彭禹锦』精彩回顾

2024年1月30日-2月1日,魔都上海迎来了龙年第一场“少儿形体行业美育春晚”!由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官!近2000名少儿模特选手从五湖四海而来,决战寒假这场高水准,高人气&#xff…

docker安装并跑通跑通QQ机器人实践(1)-前言及展示

随着大模型技术的迅猛发展,行业应用日益丰富且专业化。为了有效利用大模型的强大功能,建立与之紧密互动的应用接口至关重要。在此背景下,QQ、微信、钉钉等主流即时通讯工具凭借其广泛的用户覆盖和便捷的通信特性,成为连接用户与大…

CompletableFuture 处理异步异常

1、自定义线程池 Configuration public class ThreadPoolConfig {public static ThreadPoolExecutor getThreadPoolExecutor() {int availableProcessors Runtime.getRuntime().availableProcessors();return new ThreadPoolExecutor(availableProcessors,availableProcessor…

深入探索:Zookeeper+消息队列(kafka)集群

目录 前言 一、Zookeeper概述 1、Zookeeper概念 2、Zookeeper 特点 3、Zookeeper工作机制 4、Zookeeper 选举机制 4.1 第一次启动选举机制 4.2 非第一次启动选举机制 5、Zookeeper 数据结构 6、Zookeeper 应用场景 二、部署 Zookeeper 集群 1、环境部署 2、安装 z…

Linux进阶篇:linux操作系统一个神奇的分区:swap交换分区

linux操作系统一个神奇的分区:swap交换分区 1 Swap交换分区概念 Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就…

macOS 待机一段时间后所有打开的应用会被退出

最近在使用MacBook电脑时,发现电脑在待机一段时间再登录进去时,发现所有打开的应用都被退出了,就跟刚开机一样,很影响使用体验,查找资料时发现有个设置被打开了,只需关闭这个设置就可以解决该问题&#xff…

数据结构--选择排序

1、选择排序 1.1 基本认识 1.1.1 基本概念 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n) 的时间复杂度。 1.1.2 算法步骤 (1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起…

Java并发--内存结构图及线程安全

内存结构图 内存-> (开辟的数组) -> (方法区,堆,栈,程序计数器,本地方法栈) 堆:几乎所有的对象实例都在这里分配内存。堆中每个对象的头信息都标属着他属于哪个类。 方法区它用于存储已被虚拟机加载的类型信息…

实现iOS App代码混淆

简介 在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

Python输入与输出

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 零基础学Python 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python视频教程以及Python相关电子书合集 私信未回可以加V:hacker0327 备注零基础学Python 订阅专…

浏览器渲染原理-解释回流重绘以及为什么transform效率高

浏览器是如何渲染页面 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启染流程。 整个渲染流程分为多个阶段&#xf…

HW面试经验分享 | 某服蓝队初级

前言 依稀记得是22年 7、8月份参加的HW,当时是比较炎热的时候,但又夹杂一丝秋意。也是头一次去离家乡比较远的地方,多少有点忐忑……(怕被噶腰子、水土不服、吃穿用住没着落等等),但最终也是平安无事且顺利…