当前位置: 首页 > news >正文

基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)

在这里插入图片描述

摘要:基于YOLOv5的疲劳驾驶检测系统使用深度学习技术检测常见驾驶图片、视频和实时视频中的疲劳行为,识别其闭眼、打哈欠等结果并记录和保存,以防止交通事故发生。本文详细介绍疲劳驾驶检测系统实现原理的同时,给出Python的实现代码、训练数据集以及PyQt的UI界面。在界面中可以选择各种图片、视频进行检测识别,可对图像中存在的多个目标进行识别分类。博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。本博文目录如下:

文章目录

  • 前言
  • 1. 效果演示
  • 2. 疲劳驾驶检测
  • 下载链接
  • 结束语

➷点击跳转至文末所有涉及的完整代码文件下载页☇

基于YOLOv5的疲劳驾驶检测系统演示与介绍(Python+清新界面+数据集)


前言

        疲劳驾驶,是指在长时间连续行车后,驾驶员在心理技能和生理机制上发生变化,在客观上表现为驾驶技能的下降,并且表现出打瞌睡、反应迟钝、四肢无力、注意力不集中以及判断能力下降等现象。具不完全统计,50%的交通安全事故起源驾驶员意识不清醒从而酿成车祸。

        对驾驶员的疲劳状态进行实时检测是汽车安全驾驶的关键的一环,因此在驾驶车辆时需要对驾驶员的疲劳状态进行实时检测及时做出预警。基于视觉特征的驾驶员疲劳状态检测方法,主要是利用摄像机对驾驶状态下的驾驶员面部特征进行实时采集,然后使用基于视觉以及图像处理的方法,获取得到驾驶员的眼部、嘴部以及头部区域信息等特征信息。最后,使用一定的判别方法对提取到的驾驶员眨眼间频率,打哈欠等特征分析,对驾驶员疲劳状态进行检测。随着当前深度学习方法在目标检测方向上的应用深入,基于YOLOv5的目标检测方法具有应用的可能性与应用前景。

        基于YOLOv5的疲劳驾驶检测系统应用深度学习技术检测常见驾驶过程中可能存在的疲劳驾驶行为,包括闭眼、打哈欠等常见行为,以方便对驾驶员的安全驾驶进行监测分析;系统采用登录注册进行用户管理;对于图片、视频和摄像头捕获的实时画面,系统可检测画面中的疲劳驾驶行为;系统支持结果记录、展示和保存,每次检测的结果记录在表格中。对此这里给出博主设计的界面,同款的简约风,功能也可以满足图片、视频和摄像头的识别检测,希望大家可以喜欢,初始界面如下图:

在这里插入图片描述

        检测类别时的界面截图(点击图片可放大)如下图,可识别画面中存在的多个类别,也可开启摄像头或视频检测:

在这里插入图片描述

         详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。


1. 效果演示

        这里通过动图看一下识别的效果,系统主要实现的功能是对图片、视频和摄像头画面中的疲劳驾驶行为进行识别,识别的结果可视化显示在界面和图像中,另外提供多个人脸的显示选择功能,演示效果如下。

(一)系统介绍

        经查阅相关文献,疲劳在人体面部表情中表现出大致三个类型:打哈欠(嘴巴张大且相对较长时间保持这一状态)、眨眼(或眼睛微闭,此时眨眼次数增多,且眨眼速度变慢)等。这里使用YOLOv5识别这些数据特征,实时地分析驾驶员的疲劳驾驶行为,并及时作出安全提示。

(二)技术特点

         (1)YOLO v5算法实现,模型一键切换更新;
         (2)检测图片、视频等图像中的各疲劳驾驶行为;
         (3)摄像头监控实时检测,便携展示、记录和保存;
         (4)支持用户登录、注册,检测结果可视化功能;
         (5)提供训练数据集和代码,可重新训练模型;

(三)用户注册登录界面

        对于系统登录界面如下图所示,可以输入用户名和密码进行登录注册功能,在输入正确后可以进入主界面。

在这里插入图片描述

(四)选择图片识别

        系统可以选择图片文件进行识别,点击图片选择按钮图标选择图片后,显示所有人脸识别的结果,可通过下拉选框查看单个结果,以便具体判断某一疲劳驾驶人员。本功能的界面展示如下图所示:

在这里插入图片描述

(五)视频识别效果展示

        如果要识别视频中的疲劳驾驶情况,可以点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别人脸,并将是否疲劳驾驶的结果记录在右下角表格中,效果如下图所示:

在这里插入图片描述

(六)摄像头检测效果展示

        在真实场景中,如果需要利用设备摄像头获取实时画面,并对画面中的疲劳驾驶行为进行识别,可点击摄像头按钮后系统进入准备状态,系统显示实时画面并开始检测画面中的驾驶员,识别结果展示如下图:
在这里插入图片描述


2. 疲劳驾驶检测

(一)疲劳驾驶数据集

        这里我们使用的疲劳驾驶数据集,包含训练数据集656张图片、验证集188张图片、测试集94张图片,共计938张图片。

在这里插入图片描述
        每张图像均提供了图像类标记信息,图像中疲劳驾驶的bounding box,数据集并解压后得到如下的图片。

在这里插入图片描述
(二)网络结构

         Yolov5网络结构是由Input、Backbone、Neck、Prediction组成。Yolov5的Input部分是网络的输入端,采用Mosaic数据增强方式,对输入数据随机裁剪,然后进行拼接。Backbone是Yolov5提取特征的网络部分,特征提取能力直接影响整个网络性能。Yolov5的Backbone相比于之前Yolov4提出了新的Focus结构。Focus结构是将图片进行切片操作,将W(宽)、H(高)信息转移到了通道空间中,使得在没有丢失任何信息的情况下,进行了2倍下采样操作。

在这里插入图片描述

(三)训练过程

         网络的训练由于数据量较大进行实验时将数据分为多个批次, 每个批次中含有 一定数目图像, 经过前向、 反向传播后更新网络参数, 训练出误差合适的网络。测试时, 图像由网络进行识别, 根据得到的识别正确率来验证网络的可行性。

        对前面介绍过的数据集经过处理后标签文件均转换为YOLOv5训练所需的标记格式,基于此数据集,我们在train.py中设置必要参数后,运行该脚本进行模型训练,训练过程在终端的显示如下图所示。

在这里插入图片描述
        在深度学习中,我们通常通过损失函数下降的曲线来观察模型训练的情况。而YOLOv5训练时主要包含三个方面的损失:矩形框损失(box_loss)、置信度损失(obj_loss)和分类损失(cls_loss),模型训练曲线图如下图所示。

在这里插入图片描述

        一般我们会利用召回率recall和精度precision,两个指标p和r都是简单地从一个角度来判断模型的好坏,为了综合评价目标检测的性能,一般采用均值平均密度map来进一步评估模型的好坏。我们通过设定不同的置信度的阈值,可以得到在模型在不同的阈值下所计算出的p值和r值,一般情况下,p值和r值是负相关的,绘制出来可以得到如下图所示的曲线。

在这里插入图片描述
(四)预测过程

        在训练完成后得到最佳模型,接下来我们将帧图像输入到这个网络进行预测,从而得到预测结果,其中预测方法(predict.py)部分的代码如下所示:

def predict(img):img = torch.from_numpy(img).to(device)img = img.half() if half else img.float()img /= 255.0if img.ndimension() == 3:img = img.unsqueeze(0)t1 = time_synchronized()pred = model(img, augment=False)[0]pred = non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classes=opt.classes,agnostic=opt.agnostic_nms)t2 = time_synchronized()InferNms = round((t2 - t1), 2)return pred, InferNms

        得到预测结果我们便可以将帧图像中的目标框出,以下是读取视频文件并进行检测的脚本,首先将图片数据进行预处理后送predict进行检测,然后计算标记框的位置并在图中标注出来。

if __name__ == '__main__':# video_path = 0video_path = "./UI_rec/test_/疲劳驾驶检测.mp4"# 初始化视频流vs = cv2.VideoCapture(video_path)(W, H) = (None, None)frameIndex = 0  # 视频帧数try:prop = cv2.CAP_PROP_FRAME_COUNTtotal = int(vs.get(prop))# print("[INFO] 视频总帧数:{}".format(total))# 若读取失败,报错退出except:print("[INFO] could not determine # of frames in video")print("[INFO] no approx. completion time can be provided")total = -1fourcc = cv2.VideoWriter_fourcc(*'XVID')ret, frame = vs.read()vw = 850vh = 500print("[INFO] 视频尺寸:{} * {}".format(vw, vh))output_video = cv2.VideoWriter("./results.avi", fourcc, 20.0, (vw, vh))  # 处理后的视频对象# 遍历视频帧进行检测while True:# 从视频文件中逐帧读取画面(grabbed, image) = vs.read()image = cv2.resize(image, (850, 500))# 若grabbed为空,表示视频到达最后一帧,退出if not grabbed:print("[INFO] 运行结束...")output_video.release()vs.release()exit()# 获取画面长宽if W is None or H is None:(H, W) = image.shape[:2]img0 = image.copy()img = letterbox(img0, new_shape=imgsz)[0]img = np.stack(img, 0)img = img[:, :, ::-1].transpose(2, 0, 1)  # BGR to RGB, to 3x416x416img = np.ascontiguousarray(img)pred, useTime = predict(img)det = pred[0]p, s, im0 = None, '', img0if det is not None and len(det):  # 如果有检测信息则进入det[:, :4] = scale_coords(img.shape[1:], det[:, :4], im0.shape).round()  # 把图像缩放至im0的尺寸number_i = 0  # 类别预编号detInfo = []for *xyxy, conf, cls in reversed(det):  # 遍历检测信息c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3]))# 将检测信息添加到字典中detInfo.append([names[int(cls)], [c1[0], c1[1], c2[0], c2[1]], '%.2f' % conf])number_i += 1  # 编号数+1label = '%s %.2f' % (names[int(cls)], conf)# 画出检测到的目标物plot_one_box(image, xyxy, label=label, color=colors[int(cls)])# 实时显示检测画面cv2.imshow('Stream', image)output_video.write(image)  # 保存标记后的视频if cv2.waitKey(1) & 0xFF == ord('q'):break# print("FPS:{}".format(int(0.6/(end-start))))frameIndex += 1

        执行得到的结果如下图所示,图中行人和置信度值都标注出来了,预测速度较快。基于此模型我们可以将其封装成一个带有界面的系统,在界面上选择图片、视频或摄像头然后调用模型进行检测。

在这里插入图片描述

        博主对整个系统进行了详细测试,最终开发出一版流畅得到清新界面,就是博文演示部分的展示,完整的UI界面、测试图片视频、代码文件,以及Python离线依赖包(方便安装运行,也可自行配置环境),均已打包上传,感兴趣的朋友可以通过下载链接获取。
在这里插入图片描述


下载链接

    若您想获得博文中涉及的实现完整全部程序文件(包括测试图片、视频,py, UI文件等,如下图),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

在这里插入图片描述

    在文件夹下的资源显示如下,下面的链接中也给出了Python的离线依赖包,读者可在正确安装Anaconda和Pycharm软件后,复制离线依赖包至项目目录下进行安装,离线依赖的使用详细演示也可见本人B站视频:win11从头安装软件和配置环境运行深度学习项目、Win10中使用pycharm和anaconda进行python环境配置教程。

在这里插入图片描述

注意:该代码采用Pycharm+Python3.8开发,经过测试能成功运行,运行界面的主程序为runMain.py和LoginUI.py,测试图片脚本可运行testPicture.py,测试视频脚本可运行testVideo.py。为确保程序顺利运行,请按照requirements.txt配置Python依赖包的版本。Python版本:3.8,请勿使用其他版本,详见requirements.txt文件;

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见参考博客文章里面,或参考视频的简介处给出:➷➷➷

参考博客文章:https://zhuanlan.zhihu.com/p/615310050

参考视频演示:https://www.bilibili.com/video/BV1bL411k7Wj/

离线依赖库下载链接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n (提取码:oy4n )


界面中文字、图标和背景图修改方法:

        在Qt Designer中可以彻底修改界面的各个控件及设置,然后将ui文件转换为py文件即可调用和显示界面。如果只需要修改界面中的文字、图标和背景图的,可以直接在ConfigUI.config文件中修改,步骤如下:
        (1)打开UI_rec/tools/ConfigUI.config文件,若乱码请选择GBK编码打开。
        (2)如需修改界面文字,只要选中要改的字符替换成自己的就好。
        (3)如需修改背景、图标等,只需修改图片的路径。例如,原文件中的背景图设置如下:

mainWindow = :/images/icons/back-image.png

        可修改为自己的名为background2.png图片(位置在UI_rec/icons/文件夹中),可将该项设置如下即可修改背景图:

mainWindow = ./icons/background2.png

结束语

        由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

相关文章:

基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)

摘要:基于YOLOv5的疲劳驾驶检测系统使用深度学习技术检测常见驾驶图片、视频和实时视频中的疲劳行为,识别其闭眼、打哈欠等结果并记录和保存,以防止交通事故发生。本文详细介绍疲劳驾驶检测系统实现原理的同时,给出Python的实现代…...

【Linux】-- 进程优先级和环境变量

目录 进程的优先级 基本概念 如何查看优先级 PRI与NI NI值的设置范围 NI值如何修改 修改方式一 : 通过top指令修改优先级 修改方式二 : 通过renice指令修改优先级 进程的四个重要概念 环境变量 基本概念 常见的环境变量 查看环境变量 三种…...

iOS 紧急通知

一般通知 关于通知的各种配置和开发,可以参考推送通知教程:入门 – Kodeco,具有详细步骤。 紧急通知表现 紧急通知不受免打扰模式和静音模式约束。当紧急通知到达时,会有短暂提示音量和抖动(约2s)。未锁…...

即时零售:不可逆的进化

“人们经常问我,这个世界还是平的吗?我经常跟他们说,亲爱的,它真的是平的,比以前更平了。”2021年3月,《世界是平的》作者托马斯弗里德曼在演讲时说。如他所说,尽管逆全球化趋势加剧&#xff0c…...

零售数据总结经验:找好关键分析指标和维度

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 每逢月末、季末、年终,运营部门的同事又要开始进行年终总结分析。那么,对零售连锁企业来说,…...

从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

目录引言技术选型正文创建基础架构IDEA创建项目添加Netty监听端口编写客户端进行测试总结引言 由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的。 本篇教程给新人用于学习游戏服务器的基本知识,给新人们一些学习…...

C++中那些你不知道的未定义行为

引子 开篇我们先看一个非常有趣的引子&#xff1a; // test.cpp int f(long *a, int *b) {*b 5;*a 1;return *b; }int main() {int x 10;int *p &x;auto q (long *)&x;auto ret f(q, p);std::cout << x << std::endl;std::cout << ret <&…...

java基础面试题(四)

Mysql索引的基本原理 索引是用来快速寻找特定的记录&#xff1b;把无序的数据变成有序的查询把创建索引的列数据进行排序对排序结果生成倒排表在倒排表的内容上拼接上地址链在查询时&#xff0c;先拿到倒排表内容&#xff0c;再取出地址链&#xff0c;最后拿到数据聚簇索引和非…...

@PropertySource使用场景

文章目录一、简单介绍二、注解说明1. 注解源码① PropertySource注解② PropertySources注解2. 注解使用场景3. 使用案例&#xff08;1&#xff09;新增test.properties文件&#xff08;2&#xff09;新增PropertySourceConfig类&#xff08;3&#xff09;新增PropertySourceTe…...

【C语言进阶:刨根究底字符串函数】strtok strerror函数

本节重点内容&#xff1a; 深入理解strtok函数的使用深入理解strerror函数的使用⚡strtok Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part ofstr1sep参数是个字符串&#xff0c;定义了用作分隔符的字符集合。第一个参数指…...

西安石油大学C语言期末重点知识点总结

大一学生一周十万字爆肝版C语言总结笔记 是我自己在学习完C语言的一次总结&#xff0c;尽管会有许多的瑕疵和不足&#xff0c;但也是自己对C语言的一次思考和探索&#xff0c;也让我开始有了写作博客的习惯和学习思考总结&#xff0c;争取等我将来变得更强的时候再去给它优化出…...

读《Multi-level Wavelet-CNN for Image Restoration》

Multi-level Wavelet-CNN for Image Restoration&#xff1a;MWCNN摘要一. 介绍二.相关工作三.方法摘要 存在的问题&#xff1a; 在低级视觉任务中&#xff0c;对于感受野尺寸与效率之间的平衡是一个关键的问题&#xff1b;普通卷积网络通常以牺牲计算成本去扩大感受野&#…...

【Linux】安装DHCP服务器

1、先检测网络是否通 get dhcp.txt rpm -qa //查看软件包 rpm -qa |grep dhcp //确定是否安装 yum install dhcp //进行安装 安装完成后 查询 rpm -ql dhcp 进行配置 cd /etc/dhcp 查看是否有遗留dhcpd.conf.rpmsave 删除该文件 cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sampl…...

功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂

咱们直接开门见山&#xff0c;没错我的粉丝向我投来了喜报&#xff0c;从功能测试转型测试开发&#xff0c;进入大厂&#xff0c;摆脱最初级的点点点功能测试&#xff0c;拿到高薪&#xff0c;遗憾的是&#xff0c;这名粉丝因为个人原因没有经过指导就去面试了&#xff0c;否则…...

数据结构之哈希表

常见的三种哈希结构 数组set&#xff08;集合&#xff09;map(映射) set&#xff08;集合&#xff09; 集合底层实现是否有序数值是否可以重复能否更改数值查询效率增删效率std::set红黑树有序否否O(log n)O(log n)std::multiset红黑树有序是否O(log n)O(log n)std::unordere…...

linux信号理解

linux信号&#xff1a;用户、系统或进程发送给目标进程的信息&#xff0c;以通知目标进程中某个状态的改变或是异常。 信号产生原因&#xff1a;软中断或者硬中断。可细分为如下几种原因&#xff1a; ①系统终端Terminal中输入特殊的字符来产生一个信号&#xff0c;比如按下&am…...

HC小区管理系统window系统安装教程

实操视频 HC小区管理系统局域网window物理机部署教程_哔哩哔哩_bilibili 一、下载安装包 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1XAjxtpeBjHIQUZs4M7TsRg 提取码&#xff1a;hchc 或者 123盘 hc-window.zip官方版下载丨最新版下载丨绿色版下…...

自动化测试工具软测界的不二之选,还不快速来了解

目录 引言&#xff1a; 前言&#xff1a; 一.龙测AI-TestOps云平台使用教程 1.如何登录龙测AI-TestOps云平台 登录方法① 登录方法② 2.龙测AI-TestOps云平台界面布局 3.龙测AI-TestOps云平台菜单功能 ①创建项目 ②应用管理 ③设备管理 ④订单 二.总结 引言&#…...

centos系统/dev/mapper/centos-root目录被占满的解决方式

最近在做虚拟机部署docker微服务时&#xff0c;发现磁盘内存占满&#xff0c;无法进行操作。open /var/lib/dpkg/info/libc6:amd64.templates: no space left on device接下来就写下我在备份虚拟机上如何解决根目录被占满的问题&#xff1a;1、查看虚拟机磁盘使用情况df -h可以…...

【C++】STL容器、算法的简单认识

几种模板首先认识一下函数模板、类模板、栈模板。函数模板函数模板就是一个模型&#xff0c;而模板函数是函数模板经过类型实例化的函数。如下template<class T>是一个简单的函数模板&#xff1a;template<class T> T Max(T a, T b) {return a > b ? a : b; } …...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...