无人机UAV目标检测与跟踪(代码+数据)

前言

近年来,随着无人机的自主性、灵活性和广泛的应用领域,它们在广泛的消费通讯和网络领域迅速发展。无人机应用提供了可能的民用和公共领域应用,其中可以使用单个或多个无人机。与此同时,我们也需要意识到无人机侵入对空域安全造成的潜在威胁。今年早些时候,多次无人机目击事件导致机场停飞,给航空公司带来了巨大的经济损失。

在这里插入图片描述

目前,在计算机视觉社区中,没有一个高质量的反无人机数据集被用于真实动态场景的捕捉。为了弥补这一空白,该项目提出了一个新的数据集、评估指标和基线方法,用于发现、检测、识别和跟踪无人机的领域。该数据集包含高质量的全高清视频序列(包括RGB和IR),涵盖了多种多尺度无人机的多次出现,并且密集注释了每个帧中的边界框、属性和标志,指示目标是否存在。

数据介绍

该数据集包含三个子集,即训练子集、track 1测试子集和track 2测试子集。训练子集由200个热红外视频序列组成,并发布详细的注释文件(包括目标是否存在、目标位置信息和各种挑战)。track 1测试子集也包含200个视频序列,仅提供第一帧中目标的位置信息;track 2测试子集包含200个视频序列,该track不提供任何标记信息,需要参与者通过检测和跟踪来获取目标的存在标志和相应的目标位置信息。以上三个子集之间没有任何重叠部分。我们建议参与者根据训练子集中的多类标签信息训练适合的检测器或跟踪器模型。
在这里插入图片描述

环境要求

运行脚本

> conda activate project_uav
> python detect_tracking.py

project_uav环境主要包括:

pytorch(1.7.1)、
torchvision(0.8.2)、
Cython、tqdm、
PyYAML、
matplotlib、
numpy、Pillow、
opencv、scipy

代码

from __future__ import divisionimport os
import cv2
import sys
import time
import torch
import struct
import socket
import logging
import datetime
import argparseimport numpy as np
from PIL import Imageimport pdb# sys.path.append(r"C:\Users\aaa\Desktop\DetectionLib\DroneTracker")
# sys.path.append(r"C:\Users\aaa\Desktop\DetectionLib\DroneDetector")# from detector import DroneDetection
# from trackinguav.evaluation.tracker import Trackerfrom detect_wrapper.Detectoruav import DroneDetection
from tracking_wrapper.dronetracker.trackinguav.evaluation.tracker import Trackersys.path.append(os.path.join(os.path.dirname(__file__),'detect_wrapper'))
sys.path.append(os.path.join(os.path.dirname(__file__),'tracking_wrapper\\dronetracker'))
sys.path.append(os.path.join(os.path.dirname(__file__),'tracking_wrapper\\drtracker'))import warnings
warnings.filterwarnings("ignore")# # import torchvision
# # from torch.utils.data import DataLoader
# # from torchvision import datasets
# from torch.autograd import Variable
#import matplotlib.pyplot as plt
#import matplotlib.patches as patches
#from matplotlib.ticker import NullLocator
#import jsong_init = False
g_detector = None  # 检测器
g_tracker = None   # 跟踪器
g_logger = None
detect_box=None
track_box=None
g_data = None
detect_first =True
g_enable_log = True
repeat_detect=Truecount = 0
g_frame_counter = 0
TRACK_MAX_COUNT = 150Visualization = 1
sendLocation = 0#全局socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#目标主机的IP和端口, 用来发送坐标
IP = '192.168.0.171'
Port = '9921'def safe_log(msg):if g_logger:g_logger.info(msg)def send_bbs(bbs):global g_loggerif g_logger:g_logger.info('send a box : {}'.format(bbs))def mono_to_rgb(data):w, h = data.shapeimg = np.zeros((w, h, 3), dtype=np.uint8)img[:, :, 0] = dataimg[:, :, 1] = dataimg[:, :, 2] = datareturn imgdef rgb_to_ir(data):w, h, c = data.shapeimg = np.zeros((w, h), dtype=np.uint8)img = data[:,:,0]return imgdef distance_check(bbx1, bbx2, thd):cx1 = bbx1[0]+bbx1[2]/2cy1 = bbx1[1]+bbx1[3]/2cx2 = bbx2[0]+bbx2[2]/2cy2 = bbx2[1]+bbx2[3]/2dist = np.sqrt((cx1-cx2)**2+(cy1-cy2)**2)return dist<thddef scale_coords(img1_shape, coords, img0_shape):# Rescale coords (xyxy) from img1_shape to img0_shapegainx = img1_shape[0] / img0_shape[0]gainy = img1_shape[1] / img0_shape[1]coords[0]= coords[0]/gainxcoords[1]= coords[1]/gainycoords[2]= coords[2]/gainxcoords[3]= coords[3]/gainycoords = [int(x) for x in coords]return coords

这段代码实现了一个目标检测与跟踪的功能。以下是对代码的解释:

  • g_init = False: 标志变量,用于表示是否进行了初始化操作。

  • g_detector和g_tracker: 用于保存检测器和跟踪器的对象。

  • g_logger: 日志记录器对象,用于记录日志信息

  • detect_box和track_box: 分别用于保存检测到的目标框和跟踪的目标框。

  • g_data: 用于保存图像数据。

  • detect_first: 标志变量,表示是否为第一次检测。

  • g_enable_log: 是否启用日志记录。

  • repeat_detect: 是否重复检测。

  • count和g_frame_counter: 计数器,用于计算帧数和跟踪目标的持续时间。

  • TRACK_MAX_COUNT: 最大跟踪次数,超过该次数则重新进行检测。

结论

反无人机目标检测与跟踪的意义在于应对无人机在现实世界中可能带来的潜在威胁,并保障空域安全。以下是这方面的几个重要意义:

空域安全:无人机的广泛应用给空域安全带来了新的挑战。通过开展反无人机目标检测与跟踪研究,可以及时发现和追踪潜在的无人机入侵行为,确保空域的安全和秩序。

防范恶意活动:无人机技术的快速发展也为一些恶意活动提供了新的工具和手段,如无人机进行窥探、非法监听、破坏等。反无人机目标检测与跟踪的研究可以帮助及时发现和阻止这些恶意活动,维护社会的稳定和安全。

保护隐私:无人机的普及使用可能会侵犯个人和公共场所的隐私。通过有效的反无人机目标检测与跟踪技术,可以帮助及时识别和遏制一些侵犯隐私的无人机行为,保护个人和公众的合法权益。

防止事故与损失:无人机的不当使用可能给航空运输和其他行业带来安全风险和经济损失。通过反无人机目标检测与跟踪技术,可以及时发现潜在的无人机干扰和威胁,预防事故和减少经济损失

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客:NC59 矩阵的最小路径和

牛客&#xff1a;NC59 矩阵的最小路径和 文章目录 牛客&#xff1a;NC59 矩阵的最小路径和题目描述题解思路题解代码 题目描述 题解思路 动态规划&#xff0c;递推公式&#xff1a;matrix[i][j] min(matrix[i-1][j], matrix[i][j-1]) 题解代码 func minPathSum( matrix [][…

【数据科学赛】2023全球智能汽车AI挑战赛 #¥95000 #LLM文档问答 #视频理解

CompHub[1] 最新的比赛会第一时间在群里通知&#xff0c;欢迎加群交流比赛经验&#xff01;&#xff08;公众号回复“加群”即可&#xff09; 以下内容由AI辅助生成&#xff0c;可能存在错误&#xff0c;可进入比赛主页[2]查看更多(文末阅读原文) 比赛主办方 吉利汽车集团、阿…

【C++】:类和对象(中)之拷贝构造函数+赋值运算符重载

拷贝构造函数 概念 在现实生活中&#xff0c;可能存在一个与你一样的自己&#xff0c;我们称其为双胞胎 那在创建对象时&#xff0c;可否创建一个与已存在对象一某一样的新对象呢&#xff1f; 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用…

FPGA的斐波那契数列Fibonacci设计verilog,代码和视频

名称&#xff1a;斐波那契数列Fibonacci设计verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 设计一个产生斐波那契数列&#xff08;也叫黄金分割数列&#xff09;的硬件电路: 斐波那契数列中每个数为其相邻前两个数的和:即FNFN1FN2,(数列…

Python:函数篇(每周练习)

编程题&#xff1a; Python第四章作业&#xff08;初级&#xff09; (educoder.net) 题一&#xff1a;无参无返回值函数 def print_hi_human(): # 函数名用小写字母print("人类&#xff0c;你好&#xff01;")if __name__ __main__:print_hi_human() 题二&#…

设计模式篇---组合模式

文章目录 概念结构实例总结 概念 组合模式&#xff1a;组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 当我们开发中遇到树形结构的业务时&#xff0c;可以考虑使用组合模式。&#xff08;我也没有想明白为啥…

Mysql数据库 2.SQL语言 数据类型与字段约束

Mysql数据类型 数据类型&#xff1a;指的是数据表中的列文件支持存放的数据类型 1.数值类型 Mysql当中有多种数据类型可以存放数值&#xff0c;不同的类型存放的数值的范围或者形式是不同的 注&#xff1a;前三种数字类型我们在实际研发中用的很少&#xff0c;一般整数类型…

空中计算(Over-the-Air Computation)学习笔记

文章目录 写在前面 写在前面 本文是论文A Survey on Over-the-Air Computation的阅读笔记&#xff1a; 通信和计算通常被视为独立的任务。 从工程的角度来看&#xff0c;这种方法是非常有效的&#xff0c;因为可以执行孤立的优化。 然而&#xff0c;对于许多面向计算的应用程序…

游戏反虚拟框架检测方案

游戏风险环境&#xff0c;是指独立于原有设备或破坏设备原有系统的环境。常见的游戏风险环境有&#xff1a;iOS越狱、安卓设备root、虚拟机、虚拟框架、云手机等。 因为这类风险环境可以为游戏外挂、破解提供所需的高级别设备权限&#xff0c;所以当游戏处于这些设备环境下&am…

ARM可用的可信固件项目简介

安全之安全(security)博客目录导读 目录 一、TrustedFirmware-A (TF-A) 二、MCUboot 三、TrustedFirmware-M (TF-M) 四、TF-RMM 五、OP-TEE 六、Mbed TLS 七、Hafnium 八、Trusted Services 九、Open CI 可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现…

【UE5】 ListView使用DataTable数据的蓝图方法

【UE5】 ListView使用DataTable数据的蓝图方法 ListView 是虚幻引擎中的一种用户界面控件&#xff0c;用于显示可滚动的列表。它可以用于显示大量的数据&#xff0c;并提供了各种功能和自定义选项来满足不同的需求。 DataTable是虚幻引擎中的一种数据表格结构&#xff0c;用于存…

Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式

目录 一、Vue Router 1.1、下载 1.2、基本使用 a&#xff09;引入 vue-router.js&#xff08;注意&#xff1a;要在 Vue.js 之后引入&#xff09;. b&#xff09;创建好路由规则 c&#xff09;注册到 Vue 实例中 d&#xff09;展示路由组件 1.3、切换路由的两种方式 1.…

ubuntu20.04 nvidia显卡驱动掉了,变成开源驱动,在软件与更新里选择专有驱动,下载出错,调整ubuntu镜像源之后成功修复

驱动配置好&#xff0c;环境隔了一段时间&#xff0c;打开Ubuntu发现装好的驱动又掉了&#xff0c;软件与更新 那里&#xff0c;附加驱动&#xff0c;显示开源驱动&#xff0c;命令行输入 nvidia-smi 命令查找不到驱动。 点击上面的 nvidia-driver-470&#xff08;专有&#x…

wps excel js编程

定义全局变量 const a "dota" function test() {Debug.Print(a) }获取表格中单元格内容 function test() {Debug.Print("第一行第二列",Cells(1,2).Text)Debug.Print("A1:",Range("A1").Text) }写单元格 Range("C1").Val…

【面试经典150 | 栈】有效的括号

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;栈哈希表 其他语言cpython3 写在最后 Tag 【栈】 题目来源 20. 有效的括号 题目解读 括号有三种类型&#xff0c;分别是小括号、中括号和大括号&#xff0c;每种括号的左右两半括号必须一一对应才是有效的括号&#…

JetBrains系列IDE全家桶激活

jetbrains全家桶 正版授权&#xff0c;这里有账号授权的渠道&#xff1a; https://www.mano100.cn/thread-1942-1-1.html 附加授权后的一张图片

【MySQL】8.0新特性、窗口函数和公用表表达式

文章目录 1. 新增特性2. 移除旧特性2.1 优点2.2 缺点 3. 新特性1&#xff1a;窗口函数3.1 使用窗口函数前后对比3.2 窗口函数分类3.3 语法结构3.4 分类讲解3.4.1 序号函数3.4.1.1 ROW_NUMBER()函数3.4.1.2 RANK()函数3.4.1.3 DENSE_RANK()函数 3.4.2 分布函数3.4.2.1 PERCENT_R…

【RNA structures】RNA-seq 分析: RNA转录的重构和前沿测序技术

文章目录 RNA转录重建1 先简单介绍一下测序相关技术2 Map to Genome Methods2.1 Step1 Mapping reads to the genome2.2 Step2 Deal with spliced reads2.3 Step 3 Resolve individual transcripts and their expression levels 3 Align-de-novo approaches3.1 Step 1: Generat…

Vue2基础知识(一) 认识Vue

&#x1f48c; 所属专栏&#xff1a;【Vue2】&#x1f600; 作 者&#xff1a;长安不及十里&#x1f4bb;工作&#xff1a;目前从事电力行业开发&#x1f308;目标&#xff1a;全栈开发&#x1f680; 个人简介&#xff1a;一个正在努力学技术的Java工程师&#xff0c;专注基础和…

【JavaEE初阶】 线程池详解与实现

文章目录 &#x1f334;线程池的概念&#x1f384;标准库中的线程池&#x1f340;ThreadPoolExecutor 类&#x1f6a9;corePoolSize与maximumPoolSize&#x1f6a9;keepAliveTime&#x1f6a9;ThreadFactory&#x1f6a9;workQueue&#x1f6a9;RejectedExecutionHandler handl…