DjiTello + YoloV5的无人机的抽烟检测
一、效果展示
注:此项目纯作者自己原创,创作不易,不经同意不给予搬运权限,转发前请联系我,源码较大需要者评论获取,谢谢配合!
1、未启动飞行模型无人机的目标检测。
DjiTello + YOLOV5抽烟检测
2、启动飞行模型的无人机目标检测。
DjiTello + YOLOV5抽烟检测
二、实现方法和技术
本次抽烟检测采用yolov5s为基础模型进行训练,训练集采用了标注的抽烟人群数据集大约3000-5000张图片(图片均为爬虫获取),尺寸640*640,训练Epoch为300,损失函数采用Adaw,batch_size为64,至此训练完成。然后,最酷的部分来了!我们把训练完成的模型和 PyQT5 结合起来,成功地部署到了 DJITello 无人机上。这就意味着我们的无人机现在可以实时地进行抽烟检测了!想象一下,一个无人机飞过,能够检测到周围是否有人在抽烟。这就是我们这次项目的技术亮点啦!
所采用技术:目标检测、深度学习、QT、Pytorch、djitello无人机编程基础、python爬虫等等。
三、项目涉及难点和优化
1、数据标注较为繁琐
2、各项技术结合起来较为困难,如yolo+tello+qt
3、电脑控制无人机不太方便
4、训练时间较长
5、优化了小目标检测层的细节
6、优化了损失函数
四、基础知识介绍
1、目标检测:
目标检测是一种计算机视觉技术,专注于识别和定位图像或视频中的特定对象。它不仅能够识别图像中的物体,还能够指示这些物体在图像中的位置。
有几种常见的目标检测技术,其中包括:
-
传统方法: 传统的目标检测方法通常使用特征工程和手动设计的算法来识别对象。这些方法包括 Haar 级联、HOG 特征和基于图像分割的技术。
-
深度学习方法: 近年来,深度学习技术,特别是卷积神经网络(CNN),已经成为目标检测领域的主流。著名的深度学习模型如 R-CNN、Fast R-CNN、Faster R-CNN、YOLO(You Only Look Once)和SSD(Single Shot Multibox Detector)等,大大提升了目标检测的准确性和速度。
这些技术在目标检测中的应用非常广泛,涵盖了许多领域,例如自动驾驶、安防监控、医学图像分析、工业质检和无人机等。目标检测技术的不断进步和优化,使得它在实际应用中变得更加可靠和高效。
2、Djitello:
DJITello是一款小型的无人机,可以通过编程语言控制和操控,通常使用Python进行编程。它的主要特点是易于上手和编程,适合初学者和教育用途。
Python与DJITello结合使用可以通过Tello SDK实现。Tello SDK提供了一组命令和API,允许开发者使用Python编写脚本来控制无人机的动作、飞行和获取无人机状态等操作。
使用Python与DJITello结合可以完成许多任务,例如:
- 控制无人机的起飞、降落、悬停和移动。
- 获取无人机的电池状态、飞行高度和速度等信息。
- 实现无人机的图像识别、跟踪或其他计算机视觉任务。
- 将无人机与其他传感器或设备集成,实现更复杂的应用。
整合Python和DJITello为开发者提供了一种快速而灵活的方式,可以通过编程控制无人机,开发各种类型的应用和项目。
3、PYQT5
PyQt5是一个用于创建图形用户界面(GUI)的Python库,它基于Qt框架,提供了丰富的工具和组件,用于构建跨平台的应用程序。它允许开发者利用Python语言的简洁性和强大性,创建出具有各种功能和外观的用户界面。
一些PyQt5的主要特点包括:
-
跨平台性: PyQt5能够在不同的操作系统上运行,包括Windows、MacOS和Linux等。
-
丰富的组件: PyQt5提供了各种丰富的UI组件,例如按钮、文本框、滑块、菜单等,以及更高级的组件,如图表和表格视图。
-
支持多种编程风格: 可以使用Qt Designer(图形化界面设计工具)创建UI并将其与Python代码相结合,也可以直接使用Python代码编写UI。
-
事件驱动编程: PyQt5是基于事件驱动的,允许通过信号(signal)和槽(slot)的机制来处理用户交互和其他事件。
-
与Qt生态系统集成: PyQt5充分利用了Qt框架的功能,能够与其他Qt工具和库进行良好的集成,扩展了其功能和灵活性。
使用PyQt5,开发者可以创建出具有良好交互性和用户友好界面的应用程序,涵盖了各种领域,包括桌面应用、科学计算、游戏开发等。它提供了丰富的工具和灵活性,让开发者能够根据需求创建出多样化的应用。
4、Python爬虫
Python爬虫技术是利用Python编程语言从互联网上获取信息的一种技术。它可以用来自动化地访问网页、抓取数据、分析网页内容并进行处理。Python拥有许多强大的库和工具,使得编写爬虫变得相对简单。
一些常用的Python库和框架用于爬虫技术包括:
-
Requests: 一个简单易用的HTTP库,用于发送HTTP请求和获取响应,非常适合用于爬取网页内容。
-
Beautiful Soup: 一个HTML和XML解析库,能够方便地提取页面中的数据,支持快速的数据提取和处理。
-
Scrapy: 一个强大的Web爬虫框架,提供了更高级的功能和工具,如异步处理、数据存储、页面分析等,适用于大规模数据采集。
-
Selenium: 用于Web应用程序测试的工具,但也可以用于爬虫,支持模拟浏览器行为,例如点击、填写表单等。
Python爬虫技术的流程一般包括以下步骤:
- 发送HTTP请求:使用Requests库或类似工具向目标网站发送请求,获取页面内容。
- 解析页面:使用Beautiful Soup等工具解析HTML或XML页面,提取需要的数据。
- 数据处理:对提取的数据进行处理、清洗或存储,可以存储到数据库、文件或进行进一步的分析。
- 循环迭代:根据需求,可以设置循环迭代,自动访问多个页面或执行多次爬取过程。
Python爬虫技术在许多领域有广泛的应用,包括数据采集、搜索引擎优化、舆情分析、价格监控等。需要注意的是,合法合规是使用爬虫的重要考虑因素,遵守网站的Robots协议和避免对服务器造成负担是保持良好爬虫行为的重要原则。
五、部分代码和图片展示
1、训练参数展示
def parse_opt():parser = argparse.ArgumentParser()parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path or triton URL')parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob/screen/0(webcam)')parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='(optional) dataset.yaml path')parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')parser.add_argument('--view-img', action='store_true', help='show results')parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')parser.add_argument('--save-csv', action='store_true', help='save results in CSV format')parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes')parser.add_argument('--nosave', action='store_true', help='do not save images/videos')parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3')parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')parser.add_argument('--augment', action='store_true', help='augmented inference')parser.add_argument('--visualize', action='store_true', help='visualize features')parser.add_argument('--update', action='store_true', help='update all models')parser.add_argument('--project', default=ROOT / 'runs/detect', help='save results to project/name')parser.add_argument('--name', default='exp', help='save results to project/name')parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)')parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels')parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences')parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')parser.add_argument('--vid-stride', type=int, default=1, help='video frame-rate stride')opt = parser.parse_args()opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expandprint_args(vars(opt))return opt
2、无人机展示

3、QT界面展示

4、检测结果展示

六、总结
深度学习在图像处理和机器视觉等领域广泛应用,其中基于AI的技术如YOLOv5抽烟检测方法,提高了处理效率和准确性。
YOLOv5是一种实时目标检测技术,可识别物体的尺寸、形状、位置和类别。本文改进了YOLOv5网络结构,增加了小目标检测层,采用CIOU损失函数提升模型准确性。结果显示,改进后的模型准确率提高了约6.6%。
然而,传统方法仍然面临挑战。特别是对于大型目标,模型可能出现漏报或误报。抽烟者的移动和不同姿势也增加了检测难度。未来可考虑采用自适应技术和更多数据集,改进损失函数和参数,提高模型的鲁棒性和精确性。
总体而言,该模型能有效检测抽烟者的位置和类型,但仍需进一步改进以提高性能和可靠性。
相关文章:
DjiTello + YoloV5的无人机的抽烟检测
一、效果展示 注:此项目纯作者自己原创,创作不易,不经同意不给予搬运权限,转发前请联系我,源码较大需要者评论获取,谢谢配合! 1、未启动飞行模型无人机的目标检测。 DjiTello YOLOV5抽烟检测 …...
数据库取多个时间字段的最大值
个人网站 要在数据库中取多个时间字段的最大值,可以使用SQL的GREATEST函数。假设有一个表my_table,其中有两个时间字段time1和time2,可以使用以下查询来获取这两个字段的最大值: SELECT GREATEST(time1, time2) AS max_time FRO…...
C/C++ 实现Socket交互式服务端
在 Windows 操作系统中,原生提供了强大的网络编程支持,允许开发者使用 Socket API 进行网络通信,通过 Socket API,开发者可以创建、连接、发送和接收数据,实现网络通信。本文将深入探讨如何通过调用原生网络 API 实现同…...
kotlin 防范竞态
当你调用成员,这个成员可能为null,可能为空值,就必须采用防范竞态条件,这个是 KT 编程的规范化 下面举例: 防范竞态条件【尽量使用 ? 内置函数 空合并操作符】 fun test(){val info: String ? "&q…...
超分辨率重建
意义 客观世界的场景含有丰富多彩的信息,但是由于受到硬件设备的成像条件和成像方式的限制,难以获得原始场景中的所有信息。而且,硬件设备分辨率的限制会不可避免地使图像丢失某些高频细节信息。在当今信息迅猛发展的时代,在卫星…...
防止恶意攻击,服务器DDoS防御软件科普
作为一种恶意的攻击方式,DDoS攻击正以超出服务器承受能力的流量淹没网站,让网站变得不可用。近几年,这种攻击持续增多,由此优秀服务器DDoS防御软件的需求也随之增长。那么如何选择服务器DDoS防御软件,从根本上根除DDoS…...
nint和Pattern matching介绍(C#)
nint 最近看C# 9.0时,发现一个有意思的关键词,就是nint,第一次看到这个,于是好奇心爆棚,就去实际操作了一下。 nint i 1000; Console.WriteLine("i{0}", i);实际结果与int的结果是一样的,那为什…...
部署jenkins一直显示Please wait while Jenkins is getting ready to work
部署jenkins一直显示Please wait while Jenkins is getting ready to work … 需要你进入jenkins的工作目录 vim .jenkins/hudson.model.UpdateCenter.xml将https://updates.jenkins.io/update-center.json更换为更改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates…...
Redis性能压测、监控工具及优化方案
Redis是一款高性能的开源缓存数据库,但是在实际应用中,我们需要对Redis进行性能压测、监控以及优化,以确保其稳定性和高可用性。本文将介绍Redis性能压测、监控工具及优化方案。 01 Redis性能压测 常用的Redis性能压测工具有: …...
使用NVM管理多个Nodejs版同时本支持vue2、vue3
1.安装nvm,下载地址: https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 2.nvm常用命令 Usage:nvm arch : Show if node is running in 32 or 64 bit mode.nvm current : Display active version.nvm debug …...
局域网的网络ip不稳定问题
在局域网的多个设备,互相通信时好时坏,不稳定。 遭遇过的情况如下: 用两个开发板:972开发板1和2,网口同时互相ping,出现1ping 2通--此时2ping 1不通,过段时间,1ping2不通--但2ping又…...
uniapp (vue3)生成二维码
在uni-app中生成二维码,我们可以使用第三方库qrcode.js。以下是一个简单的示例: 首先,我们需要安装qrcode.js库,可以通过npm进行安装: npm install qrcode然后,在你的Vue组件中引入并使用这个库ÿ…...
Android11编译第八弹:root用户密码设置
问题:user版本增加su 指令以后,允许切换root用户,但是,root用户默认没有设置密码,这样访问不安全。 需要增加root用户密码。 一、Linux账户管理 1.1 文件和权限 Linux一切皆文件。文件和目录都有相应的权限&#x…...
XML Schema中的attributeFormDefault
XML Schema中的attributeFormDefault属性,用以指定元素的属性默认是否必须带有命名空间前缀。 attributeFormDefault属性可以取值qualified或unqualified,默认值是unqualified。 当取值为qualified时,表示属性必须用命名空间作为前缀&#x…...
数据结构 / 结构体字节计算
1. 结构体的存储 结构体各个成员的地址是连续的结构体变量的地址是第一个成员的地址 2. 64位操作系统8字节对齐 结构体的总字节大小是各个成员字节的总和,字节的总和需要是最宽成员的倍数结构体的首地址是最宽成员的倍数结构体各个成员的偏移量是该成员字节的倍数…...
rancher2.6 docker版本部署
1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注: 上面命令中rancher的版本v2.6.5,仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本,在github上查看:Release Release v2.6.5 ranche…...
UE5人物残影学习(材质实现)
学习视频 UE4简单的材质球残影人教学,你学会了吗!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rY411q7Yb/?spm_id_from333.788.top_right_bar_window_history.content.click 结果预览 1.创建残值,混合模式勾选半透明 “混合模…...
Spring Boot 内置工具类
一、对象、数组、集合 ObjectUtils 1.获取对象的基本信息 // 获取对象的类名。参数为 null 时,返回字符串:"null" String nullSafeClassName(Object obj)// 参数为 null 时,返回 0 int nullSafeHashCode(Object object)// 参数…...
C语言--每日选择题--Day27
第一题 1. 对于代码段,问下面不可以表示a[1]地址的是() int a[10]; A:&a[0] 1 B:a sizeof(int) C:(int*)&a 1 D:(int*)((char*)&a sizeof(int)) 答案及解析 A A:取到…...
黑马程序员索引学习笔记
文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
