基于Streamlit和YOLOv5构建危险驾驶行为检测Web应用

(整期优先)网络出版时间:2023-04-26
/ 2

基于Streamlit和YOLOv5构建危险驾驶行为检测Web应用

熊志伟,孙中毅,杨艳红

( 1.苏州大学应用技术学院 工学院)

摘  要:本文介绍了一种基于Streamlit和YOLOv5的Web端危险驾驶行为检测系统。该系统可以检测图片中的危险驾驶行为,也可以检测视频中的危险驾驶行为,还可以使用Streamlit-webrtc实现实时相机检测。该系统由YOLOv5提供检测算法,Streamlit提供Web端的界面,并直接调用YOLOv实现检测和保存。该系统采用了一种新的检测模式,可以更加有效地检测出危险驾驶行为,为道路安全提供了有效的支持。

关键词:Streamlit;YOLOv5;实时检测;危险驾驶行为;Streamlit-webrtc

课题项目:2022年江苏省大学生创新创业训练计划项目202213984016Y。 

1 引言

随着全球对交通安全的重视,针对危险驾驶行为的检测显得极其重要。近年来,计算机视觉技术的快速发展,使得基于深度学习的危险驾驶行为检测技术得以应用。YOLOv5是一种基于深度学习的实时目标检测技术,可以有效识别各种危险驾驶行为。但是传统的检测系统仍以命令行界面的形式存在,不能满足实时检测的需求。因此构建基于YOLOv5的Web端检测系统显得非常必要。本文以Streamlit框架为基础,构建了一种基于YOLOv5的危险驾驶行为Web端检测系统,实现了图片检测、视频检测以及实时相机检测。

2 YOLOv5介绍

YOLOv5是一种快速、准确的目标检测算法,可以用于图像和视频中的对象检测。它使用卷积神经网络(CNN)模型来预测图像或视频中的对象类别和位置。

YOLO系列目标检测算法是表现非常优异的单阶段检测器,检测精度和双阶段的检测精度表现优异,检测速度相对于其他检测器有非常大的优势[1]YOLOv5YOLO系列检测器里检测精度、速度、指标等各个方面较好的一种检测器[2],它的原理是将图像划分成若干个小的网格,然后使用CNN模型预测每个网格中是否存在目标对象。如果存在,则还会预测出目标对象的类别和位置。YOLOv5使用了单尺度预测和多尺度训练的方法。这意味着它可以在一个图像的不同尺度上进行预测,而不是仅在一个固定的尺度上。这使得YOLOv5能够处理大尺度变化的对象,并且能够在更小的图像中检测更小的对象。

由于单阶段算法的优势如图1所示,YOLOv5可以在短时间内处理大量数据,并且具有较高的检测精度。YOLOv5使用了一种称为一阶目标检测的方法,这意味着它在一次扫描后就可以输出对象的位置和类别。这与传统的两阶目标检测方法不同,后者需要两次扫描才能输出结果。这使得YOLOv5更快,并且在处理实时视频时尤其有效。它可以用于多种应用场景,如视频监控、自动驾驶汽车、无人机等。在本文中,我们使用YOLOv5来训练自己制作的驾驶行为检测的数据集,并将训练出来的模型加以保存修改到detect.py中并用来检测图像和视频中的危险驾驶行为。

3 Streamlit介绍

Streamlit是一个针对机器学习应用或者数据可视化的Python框架,没有隐含状态,直接使用函数调用重构。[3]Streamlit是一种新的构建web应用的开源工具,它把Python与用户界面(UI)结合在了一起,可以让用户快速构建出功能强大的网络应用程序,而无需学习任何新的技术。它的目的是使创建自上而下执行的应用程序变得更加简单。

用户可以在浏览器中实时看到程序的输出,并且在与应用程序中的部件交互时,脚本会重新执行并显示新值。使用Streamlit可以节省大量的开发时间,从而让开发者能够把精力放在更多有价值的事情上。由于Streamlit可以直接使用Python代码,因此开发者可以把一个Python程序转换成一个网络应用程序如图2所示,而无需编写任何HTMLJavaScript代码。这样一来,开发者就可以充分利用Python的功能,而无需关心界面的设计、CSSJavaScript等等。

此外,Streamlit还提供了缓存功能,能够跳过重复计算,使更新速度更快如图3所示。Streamlit遵循由上至下的运行顺序,所以每次代码中有进行任何更改,都会重新开始运行一遍,会十分耗时。@st.cache会对封装起来的函数进行缓存,避免二次加载。如果函数中的代码发生变动,cache会重新加载一遍并缓存起来。假如将代码还原到上一次版本,由于先前的数据已经缓存起来了,所以不会进行二次加载。在幕后,Streamlit会在服务端维护所有界面组件的状态。只要用户动作引起界面组件的值发生变化,服务器就会重新执行一遍代码,并且客户端组件的值会通过某种机制自动同步给服务端。Streamlit为提供缓存的机制是:将耗时但不需要频繁重新计算的操作封装为一个函数,并用cache装饰器来标识。

总之,Streamlit

是一种强大的构建Web应用的工具,它可以让开发者以最少的工作量,在最短的时间内构建出功能强大的Web应用程序。 Streamlit的可视化技术可以让开发者用最少的代码构建出自定义界面,所以用Streamlit构建危险驾驶行为检测的界面示例如图4所示。

4  实现

4.1  图像和视频检测

我们使用YOLOv5的detect.py文件的函数实现图片检测和视频检测。首先,我们要从detect中导入函数,然后调用parse_opt()函数,设置opt.source参数,用于指定图像或视频检测的文件路径;opt.conf_thres 参数用于设置检测置信度,取值范围为0-1。接下来,我们就可以进行图片或视频检测了,根据相应检测的行为进行判断,如果是图片检测就要选择相应的图片进行检测,流程是将图片保存到模型下data目录下的images目录下,保存成功的话就可以点开始检测按钮,将检测结果可以保存在指定目录的文件夹下,然而Web则需要返回检测后的图片,同样是视频检测也想这样,因为是调用模型函数并保存结果返回检测结果,所以视频资源的检测不是实时的

4.2  相机检测

4.2.1  Streamlit-webrtc

Streamlit-webrtc是基于Streamlit框架快速开发基于 Web 的实时视频/音频处理的一个库文件,即可以在Streamlit应用程序中使用WebRTC技术进行实时视频流和语音流的交互。而WebRTC协议的英文全称为Web Real-Time Communication,网页即时通信,是一种低时延的协议。相较于传统的直播解决方案,WebRTC协议拥有着不可比拟的三大优势:低延时、流量消耗小、开发及维护资源消耗小。[4]

4.2.2  相机实时检测实现

我们首先导入了必要的库和模型,其中包括Streamlit、numpy、streamlit_webrtc、av、torch等。我们创建了一个名为Detection的类,其中包含了检测结果的名称和概率值。然后我们创建了一个继承自VideoProcessorBase的类YOLOv5VideoProcessor。该类通过重写_annotate_image()方法实现了对视频帧进行检测并返回结果的功能。recv()方法是由streamlit_webrtc调用的,用于在另一个线程中处理视频帧并返回检测结果。最后,我们使用streamlit_webrtc库中的webrtc_streamer函数,创建了一个名为webrtc_ctx的上下文。该函数可以在浏览器中连接到用户的摄像头,并将视频帧传递给上面定义的YOLOv5VideoProcessor

5 结语

本研究表明,Streamlit可以有效地构建一个Web端的YOLOv5检测危险驾驶行为系统,它可以实现图片检测、视频检测和实时相机检测功能。Streamlit框架有助于提高系统开发效率,减少开发周期,简化开发流程,提高开发质量。

未来,YOLOv5网络模型可以进一步改进,以增加检测的准确性和可靠性。此外,Streamlit框架可以更好地支持实时检测,提高检测速度,使用更多的平台和浏览器,以便更好地满足用户需求。

参考文献

[1]胡欣,周运强,肖剑,杨杰.基于改进YOLOv5的螺纹钢表面缺陷检测[J/OL].图学学报:1-12[2023-01-08].http://kns.cnki.net/kcms/detail/10.1034.T.20230106.1212.003.html

[2]唐靓,余明慧,武明虎,等.基于改进YOLOv5的绝绦子缺陷检测算法[J].华中师范大学学报:自然科学版,2022,56(5):771-780.

[3]胡佳敏. 基于卷积神经网络的学生课堂行为识别研究[D].华中师范大学,2020.DOI:10.27159/d.cnki.ghzsu.2020.000955.

[4]王元静.浅谈WebRTC在新媒体直播视频分发中的优劣[J].现代电视技术,2022(09):146-148.

- 1 -