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

news2024/11/29 9:37:43

前言

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

在这里插入图片描述

目前,在计算机视觉社区中,没有一个高质量的反无人机数据集被用于真实动态场景的捕捉。为了弥补这一空白,该项目提出了一个新的数据集、评估指标和基线方法,用于发现、检测、识别和跟踪无人机的领域。该数据集包含高质量的全高清视频序列(包括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 division



import os
import cv2
import sys
import time
import torch
import struct
import socket
import logging
import datetime
import argparse

import numpy as np
from PIL import Image

import 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 Tracker

from detect_wrapper.Detectoruav import DroneDetection
from tracking_wrapper.dronetracker.trackinguav.evaluation.tracker import Tracker

sys.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 json


g_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=True


count = 0
g_frame_counter = 0
TRACK_MAX_COUNT = 150

Visualization = 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_logger
    if g_logger:
        g_logger.info('send a box : {}'.format(bbs))

def mono_to_rgb(data):
    w, h = data.shape
    img = np.zeros((w, h, 3), dtype=np.uint8)
    img[:, :, 0] = data
    img[:, :, 1] = data
    img[:, :, 2] = data
    return img

def rgb_to_ir(data):
    w, h, c = data.shape
    img = np.zeros((w, h), dtype=np.uint8)
    img = data[:,:,0]
    return img

def distance_check(bbx1, bbx2, thd):
    cx1 = bbx1[0]+bbx1[2]/2
    cy1 = bbx1[1]+bbx1[3]/2
    cx2 = bbx2[0]+bbx2[2]/2
    cy2 = bbx2[1]+bbx2[3]/2
    dist = np.sqrt((cx1-cx2)**2+(cy1-cy2)**2)
    return dist<thd

def scale_coords(img1_shape, coords, img0_shape):
    # Rescale coords (xyxy) from img1_shape to img0_shape
    gainx = img1_shape[0] / img0_shape[0]
    gainy = img1_shape[1] / img0_shape[1]

    coords[0]= coords[0]/gainx
    coords[1]= coords[1]/gainy
    coords[2]= coords[2]/gainx
    coords[3]= coords[3]/gainy
    coords = [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.coloradmin.cn/o/1111187.html

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

相关文章

Windows 端口被占

Windows 端口被占 # 查看所有端口号 netstat -ano# 查看特定端口号 如&#xff1a;13800 netstat -aon|findstr :8800# 查询这个进程的信息 tasklist | findstr "19396"# 关闭占用端口号的进程 # 根据进程号杀死进程 taskkill /T /F /PID 19396 # 这里的19396 为PI…

接口测试详解

为什么要做接口测试&#xff1f; 在公司里&#xff0c;客户端和服务端通常是由不同的团队开发的&#xff0c;在项目开发过程中&#xff0c;客户端和服务端开发的进度不一致&#xff0c;比如服务端先开发完了&#xff0c;这个时候可以先对服务端进行接口测试&#xff0c;确保服…

Kerberos认证协议介绍

概述 官网&#xff1a;https://www.kerberos.org/ 官方文档&#xff1a;http://web.mit.edu/kerberos/krb5-current/doc/ 为TCP/IP网络系统设计的可信的第三方身份认证协议。网络上的Keberos服务基于DES对称加密算法&#xff0c;但也可以用其他算法替代。因此&#xff0c;Keb…

CUDA学习笔记5——CUDA程序错误检测

CUDA程序错误检测 所有CUDA的API函数都有一个类型为cudaError_t的返回值&#xff0c;代表了一种错误信息&#xff1b;只有返回cudaSuccess时&#xff0c;才是成功调用。 cudaGetLastError()用来检测核函数的执行是否出错cudaGetErrorString()输出错误信息 #include <stdi…

minio public桶禁止默认访问权限

问题产生原因: 桶具有公共读写权限,直接访问桶会遍历出桶下所有目录与文件,可能会造成数据泄露。 解决方案: 修改匿名访问策略,需使用mc客户端,对minio进行修改 (高版本可通过自定义策略进行修改) 下载: wget https://dl.min.io/client/mc/release/linux-amd64/mc远程连接…

投标管理与工程实施管理的关键步骤及策略

对于建筑行业来说&#xff0c;投标管理和工程实施管理是重中之重。在管理过程中&#xff0c;需要大量的精力时间&#xff0c;项目管理工具可以帮助我们更为高效的进行投标管理和工程实施管理。 Zoho Projects 项目管理工具可以帮助用户高效组织招投标工作和实现从项目评估、招…

BAT028:批量为指定路径下的文件添加8位创建日期后缀名

引言&#xff1a;编写批处理程序&#xff0c;实现批量为指定路径下的文件添加8位创建日期后缀名。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击…

一张图理解MITRE ATTCK框架

看到一张好图&#xff0c;能对MITRE ATT&CK框架做很好的概述&#xff1a; 可以与笔者之前写过的MITRE文章&#xff08;https://blog.csdn.net/ybdesire/category_12472912.html&#xff09;一起阅读&#xff0c;就能更好的理解MITRE。 参考&#xff1a; 吴沛颖.网络威胁情…

【笔记】Endnote20插入文献

方法一 1.首先选中要参考的文章 2.在word里选好格式 3.在word里点击插入已选文献 前提&#xff1a;已经将光标放在要插入的位置了 4.插入文献即可&#xff0c;效果如下 方法二&#xff08;方便些&#xff0c;但是word容易闪退&#xff09; 1.点击要插入的文献&#xff0c;…

c: Queue Calling

/*** ****************************************************************************** file TakeNumber.h* brief 排队等号* author (geovindu,Geovin Du,涂聚文)* date 2023-10-19* copyright geovindu 站在巨人的肩膀上 Standing on the Shou…

最新高德商家信息导出(公开信息)

本章教程,主要介绍一下,如何从高德地图中根据关键词,获取商家信息,并导出Excel。 官网地址:高德地图 - 精准专业的手机地图 教程仅供参考,请勿滥用,由此带来的法律责任,需由自己承担。 目录 一、需求分析 二、程序代码 三、结果展示

【操作系统】线程的实现方式:用户线程和内核线程

1 用户级线程 完全在用户空间中实现和管理的线程。 它们的创建、同步和调度由应用程序通过用户级别的线程库实现&#xff0c;所有的线程管理工作都由应用程序负责&#xff0c;无需操作系统内核干预。在用户看来有多个线程&#xff0c;但操作系统并不能意识到线程的存在。 缺点…

vmware 16pro安装 mac10.14.6,期间遇到的问题

1、分配硬盘内存尽量分大点&#xff0c;建议是40g&#xff0c;我分了80g&#xff0c;后面下载解压xcode发现还不够&#xff0c;又增加最后分了120g 2、安装过程&#xff0c;卡在选语言的地方&#xff0c;鼠标和键盘无法操作。需要在虚拟机设置中&#xff0c;勾选以下选项“显示…

vue 树状结构数据渲染 (java 处理 list ->树状)

树状结构 Element ui https://element.eleme.cn/#/zh-CN/component/tree <el-tree :data"data" :props"defaultProps" node-click"handleNodeClick"></el-tree><script>export default {data() {return {data: [{label: 一级…

1815_ChibiOS中的虚拟定时器

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 这个功能其实类似于FreeRTOS的设计&#xff0c;在FreeRTOS中也有这样的设计。 2. 一次性的定时器&#xff0c;这个不仅在FreeRTOS中见过&#x…

shell命令以及运行原理和lLinux权限

shell命令以及运行原理 什么是shell shell是操作系统的外壳程序统称&#xff0c;我们是通过shell去和操作系统沟通的。 从技术角度&#xff0c;shell最简单的定义就是命令行解释器&#xff0c;主要包含两个功能&#xff1a; 将使用者的命令翻译给核心处理 将核心的处理结果…

《数据结构、算法与应用C++语言描述》使用C++语言实现链表队列

《数据结构、算法与应用C语言描述》使用C语言实现链表队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一端称…

告别传统纸质期刊,电子期刊更环保更快捷

​【新发现】随着科技的发展&#xff0c;电子期刊逐渐取代了传统的纸质期刊&#xff0c;成为人们获取信息的新选择。电子期刊不仅环保&#xff0c;而且快捷方便&#xff0c;但是你知道怎么制作电子期刊吗&#xff1f; 不会制作的可以试试我推荐的这个网站----FLBOOK电子杂志制作…

Simulink 最基础教程(一)

1.1基本概念 一个典型的Simulink模型大致如上图这样&#xff1a; 1&#xff09;模块 block&#xff1a;图中画圈的那些&#xff0c;每个模块可以完成一些特定的任务&#xff0c;类似MATLAB中函数的概念。软件提供了很多模块&#xff0c;当然也可以自定义新的模块 2&#xff0…