【2021集创赛】Arm杯一等奖作品—基于 Cortex-M3 内核 SOC 的动目标检测与跟踪系统

news2024/11/23 11:51:36

本作品介绍参与极术社区的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~

团队介绍

参赛单位:北京理工大学
队伍名称:飞虎队
指导老师:李彬
参赛杯赛:Arm杯
参赛人员:余裕鑫 胡涵谦 刘鹏昀
获奖情况:全国总决赛一等奖,华北赛区一等奖

1.项目简介

视频目标跟踪是计算机视觉领域的重要热点研究方向之一,它在军事领域和民用领域都具有较高的实用价值,如成像制导、智能交通、智能监控、人机交互、医学诊断等方向,但多数相关算法计算量较大,导致实时性较差,所以实时实现目标的检测与跟踪已成为重点研究方向之一。

本系统基于Xilinx Artix XC7A100T平台,在其基础上搭载Cortex-M3内核,AMBA总线,总线上外挂GPIO,LCD,OV5640,DDR3和HDMI等外设模块,基于混合高斯建模及Meanshift等相关算法,实现了对摄像头输入图像的动目标检测与实时跟踪功能,高效运行智能算法,使系统具备了无人实时运行,高效智能化处理任务的能力。

2.系统运行流程介绍

a.系统上电后,对系统的各项外设进行初始化。如配置OV5640摄像头的图像尺寸,曝光时间等各项参数。
b.当系统的检测与跟踪功能关闭时,图像信号通过DDR缓存后,通过HDMI实时显示,可作为一般性的监控功能使用。
c.当系统的检测与跟踪功能打开时,系统会在DDR缓存完两帧图像后,在1ms左右的时间内检测出其中的动目标的位置与大小,而后通过跟踪模块,在不影响图像在HDMI显示的基础上,实时跟踪目标所在的位置,采用红色方框的方式在HDMI实时标记目标所在位置,并通过LCD屏幕实时显示目标所在的位置。
d.同时,系统还配备了正常工作指示信号灯,通过LED定时闪烁的机制实时反馈系统运行状态。

3.系统架构

3.1架构简介

本系统的架构如下图3.1所示。处理器内核采用比赛官方指定的Cortex-M3评估版内核。系统总线采用AMBA总线,总线层数为两层,第一层AHB总线,用于对系统空间进行一个总体的划分;第二层包括一个AHB总线和APB总线,其中AHB用于挂载速度较快的外设,例如OV5640,HDMI等,第二层总线APB由转接模块连接到AHB,用于挂载速度较慢的外设,如Timer,GPIO等。
在这里插入图片描述

 图3.1 整体系统架构图

由OV5640中得到的RGB图像信号是系统处理的主要数据信号,该信号在系统中的流通情况如下图3.2所示,根据下图易知,本系统采用的是通道加速器的形式实现了目标的检测和跟踪功能,其优点的简单易实现,对新手比较友好,同时可以大大加快系统开发效率,缺点是模块的通用性查,针对不同的系统,需要对模块进行大量的修改,通用性较差。针对以上问题,后续将采用加速器IP的形式,提高加速器的通用性。
在这里插入图片描述

图3.2 系统数据流简图

3.2软硬件功能划分

为了充分发挥FPGA的实时性优势,本作品的大部分功能模块在FPGA端实现,如OV5640相关驱动模块、HDMI显示模块、DDR3模块以及加速器模块;ARM端为每个需要触发控制的外设配置一个c和h头文件,用于相关参数的配置,以及对应中断事件的唤醒,如在OV5640模块中,我们通过软件端设置摄像头的图像尺寸,最大曝光帧率等参数。

4.外设挂载

4.1 GPIO外设

本系统在APB总线上挂接GPIO外设,可实时观察系统运行情况,并可通过相应按键进行系统的动态调试。

4.2 LCD外设

本系统采用在APB总线上挂接LCD外设,系统外接LCD外设主要用于实时显示运动目标物体的具体位置,LCD屏幕实时显示的参数共有四个,目标物体左上角的x,y坐标以及目标物体的宽和高。

4.3 OV5640摄像头外设

本设计采用OmniVision公司的OV5640型摄像头。如图4.1为摄像头模块详细框图。
在这里插入图片描述

图4.1 摄像头模块
摄像头模块在成功将一帧图像写入DDR内后向Cortex-M3处理器及加速器模块发送发送帧传输完成中断信号,将Cortex-M3处理器及加速器模块从待机状态唤醒。前两帧图像存储完成后Cortex-M3处理器将图像采集模块暂时关闭,加速器模块开始运行目标检测单元。得到检测结果后Cortex-M3处理器再向图像采集模块发出采集新图像的请求,并开启加速器模块中的目标跟踪单元,执行目标跟踪。

4.4 DDR3存储外设

由于DDR3时序十分复杂,若直接编写DDR3的控制代码,工作量十分大,且性能难以保证,因此我们Xilinx公司提供的MIG IP核来实现DDR的读写。
本设计DDR控制模块框图如图4.2。
在这里插入图片描述

图 4.2 DDR控制模块
如框图所示,DDR读写单元负责与MIG模块进行命令和地址的交互,根据FIFO调度单元中FIFO的剩余数量来切换DDR3的读写命令和地址;FIFO调度单元负责对输入和输出的数据进行时钟域的切换和位宽的转换。

4.5 HDMI显示外设

本系统采用HDMI接口,模块架构如图4.5所示。
图像数据通过DDR输送到HDMI后,先经过视频驱动模块,生成对应图像分辨率的场同步,行同步信号,去除行前后沿,场前后沿,得到需要显示的图像数据;而后将图像数据经过DVI直流平衡编码;再使用五倍的时钟,将图像数据串并转换,最终得到10倍像素速率的串行数据;最后再进行TMDS差分输出,得到显示信号。
在这里插入图片描述

图4.5 HDMI驱动模块

5.加速器设计

如图5.1,我们团队加速器模块由目标检测单元及目标跟踪单元构成,目标检测单元采用混合高斯建模算法,目标跟踪单元采用MeanShift算法。
在这里插入图片描述

图5.1 加速器整体框架
当摄像头完成前两帧数据采集后开启目标检测单元,加速器模块与DDR交换数据并计算相关参数,检测完成后将目标进行框选,开始运行目标跟踪算法。

5.1 混合高斯建模算法

我们团队采用混合高斯背景建模的方法获得背景,以抑制上述环境中噪声对背景消除法的影响,并弥补帧差法的不足。混合高斯背景建模算法假设各个像素点各自完全独立,独立像素点的值的变化在时间上面基本符合高斯分布,利用各像素点值的概率分布,判断其是否属于背景像素点。详细框图如图5.2。

首先初始化预先定义的两个高斯模型,对高斯模型中的参数(像素高斯均值(mean)、方差(sd)、权重(w)、像素与高斯均值的绝对距离(udiff)及匹配标志(match))进行初始化,并求出将要用到的参数。其次,对于每一帧中的每一个像素进行处理,计算其是否匹配某个模型,若匹配,则将其归入该模型中,并对该模型根据新的像素值进行新,若不匹配,则以该像素建立一个高斯模型,初始化参数,代替原有模型中最不可能的模型。最后选择前面几个最有可能的模型作为背景模型,进行腐蚀及膨胀等形态学滤波后提取目标。
在这里插入图片描述

图5.2 检测单元详细框架

5.2 Meanshift目标跟踪算法

运用传统的MeanShift 算法进行目标跟踪。首先是对目标跟踪的初始化,可通过目标检测方法得到需要跟踪的初始目标的外接矩形框,也可以通过鼠标手工选取的方式。本系统中使用的初始目标的矩形的位置及大小根据检测加速器检测得到。然后计算权值矩阵加权下的搜索窗口的直方图分布,用同样的方法计算第N帧对应窗口的直方图分布;以两个目标模板分布的相似性最大为原则,使搜索窗口沿密度增加最大的方向移动,得到目标的真实位置。

MeanShit算法跟踪步骤如下:
1. 计算目标模板的概率密度 ,目标被估计位置 与核窗宽h;
2. 用 初始化当前帧的目标位置,计算候选目标模板 ;
3. 计算当前窗口内各点的权重值;
4. 计算目标的新位置。
经研究,使用YUV像素格式中的Y,即图像亮度来计算图像概率密度 可以得到较好的结果,即系统中在对图像目标进行跟踪时所采用的是RGB转YUV后的数据。
在这里插入图片描述

图5.3 跟踪单元状态转换示意图

6.模块及系统仿真

6.1检测模块仿真

混合高斯建模状态机共由11个状态完成,由于状态较多,且100MHZ时钟下在状态跳转时可能会出现状态跳转错误的情况,为避免此类事件发生,状态参数采用格雷码形式,状态编码如下:IDLE(4’b0000),W_INIT(4’b0001),SD_INIT (4’b0011),UDIFF_MEAN (4’b0010),U_M_2(4’b0110),P_UPDATE(4’b0111),P_UP_2(4’b0101),MODEL_UP(4’b0100),FRAME_JUG(4’b1100),PIXEL_TF (4’b1101)以及M_DONE(4’b1111)。状态机仿真如图6.1所示。
在这里插入图片描述
图6.1 混合高斯建模算法状态机跳转仿真
处理完成标志仿真结果如图6.2所示。
在这里插入图片描述

图6.2 处理完成标志信号仿真结果

6.2 跟踪模块仿真

通过Modelsim仿真后将系统跟踪数据导出,由Matlab采集相应数据画图,如图6.3所示。

在这里插入图片描述
图6.3 Modelsim仿真结果

7.系统整体测试结果

系统整体测试效果如视频所示,可以看到,系统效果较好,另也有较为复杂背景下的演示,欢迎感兴趣的同学与我们交流。

8.参赛体会

通过本次比赛我们对基于ARM Cortex-M3内核的SOC设计有了一定的认识并基本掌握相关设计流程,进一步提高了自己的专业知识水平,同时也感受到了大赛紧张的气氛,很荣幸可以与全国各地200余所高校参赛队伍共同努力。
通过比赛期间的宣讲,我们也更加了解到国内集成电路行业的发展现状。非常感谢赛事组委会的老师和工作人员在本次大赛中的辛苦付出!

作品内容来源于飞虎队,非开源,转载请标明出处。
欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~

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

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

相关文章

腾讯待办下架,待办事项提醒怎么设置?

有不少网友表示自己之前想要记录待办事项的话,就会用腾讯待办小程序,但是近日发现这款待办小程序弹出了“业务关停通知”的公告,将于2023年12月20日全面停止运营并下架。腾讯待办下架的原因是什么呢?从通知上看,下架的…

LeetCode(13)除自身以外数组的乘积【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 238. 除自身以外数组的乘积 1.题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素…

2023-11-14 LeetCode每日一题(阈值距离内邻居最少的城市)

2023-11-14每日一题 一、题目编号 1334. 阈值距离内邻居最少的城市二、题目链接 点击跳转到题目位置 三、题目描述 有 n 个城市,按从 0 到 n-1 编号。给你一个边数组 edges,其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的…

Maven 的 spring-boot-maven-plugin 红色报错

1、想要处理此情况&#xff0c;在工具下面加上指定的版本号。 2、给自己的maven的setting文件加工一下。 <mirrors><!--阿里云镜像1--><mirror><id>aliyunId</id><mirrorOf>central</mirrorOf><name>aliyun maven</name>…

时间序列预测实战(十六)PyTorch实现GRU-FCN模型长期预测并可视化结果

往期回顾&#xff1a;时间序列预测专栏——包含上百种时间序列模型带你从入门到精通时间序列预测 一、本文介绍 本文讲解的实战内容是GRU-FCN(门控循环单元-全卷积网络)&#xff0c;这是一种结合了GRU&#xff08;用于处理时间序列数据&#xff09;和FCN&#xff08;全卷积网络…

基于51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

基于 51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功…

ESP32C3工程找不到蓝牙头文件解决方法

本次在我的工程里要加上蓝牙辅助配网功能的方法。 1、在官方SDK里找到例程并复制头文件和源文件到自己的工程中。 我复制到如下图所示&#xff0c;并增添app_blufi.h以供其它文件操作。并增添make文件。 其中CMakeLists.txt和component.mk如下 2、使能menuconfig里的蓝牙并使能…

基于51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能&#xff1a;讲解视频&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 基于51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲…

小红书自动引流软件的运行分享,以及涉及到技术与核心代码分享

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着互联网的发展&#xff0c;引流成为许多企业和个人获取潜在客户的重要手段。然而&#xff0c;手动引流不仅效率低下&#xff0c;而且效果难以保证。为了解决这一问题…

最短路:leetcode1334. 阈值距离内邻居最少的城市

1334. 阈值距离内邻居最少的城市 有 n 个城市&#xff0c;按从 0 到 n-1 编号。给你一个边数组 edges&#xff0c;其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的双向加权边&#xff0c;距离阈值是一个整数 distanceThreshold。 返回能通过某些路径…

电子学会C/C++编程等级考试2021年03月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:药房管理 随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医…

守护进程daemon(),C 库函数asctime、localtime,UDEV的配置文件,开机自启动,自动挂载U盘

一、守护进程 二、daemon()函数 三、C 库函数asctime、localtime 四、设置守护进程开机自启动 五、守护进程应用 编写判断守护进程是否在运行的程序 守护进程不让控制程序退出 把相关守护进程设置成开机自启动 六、dmesg 七、UDEV的配置文件&#xff08;udev的rules编写&am…

cesium 自定义顶点属性

// 创建平面const planeGeometry new Cesium.PlaneGeometry({vertexFormat: Cesium.VertexFormat.POSITION_AND_ST, // 位置和UV});const geometry Cesium.PlaneGeometry.createGeometry(planeGeometry);// [3]-----[2]// | |// [0]-----[1]geometry.attributes.color…

Django 的国际化与本地化详解

概要 随着全球化的发展&#xff0c;为 Web 应用提供多语言支持变得日益重要。Django 作为一个功能强大的 Web 框架&#xff0c;提供了一套完整的国际化&#xff08;i18n&#xff09;和本地化&#xff08;l10n&#xff09;工具&#xff0c;使得开发多语言应用变得简单。本文将详…

Sui上TVL突破1.28亿美金,浅谈DeFi续创新高背后的基础知识

根据财富商业洞察研究&#xff0c;DeFi市场预计从2022年的555.8亿美元增长到2030年的3370.4亿美元。推动这一增长的活动包括对token的交易、借贷和借款&#xff0c;这通常是点对点的&#xff0c;无需传统金融机构的参与。随着Sui网络于今年五月份启动主网和其SUI token&#xf…

稳定扩散 img2img 的工作原理

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 在本教程中&#xff0c;我将介绍&#xff1a; 这种技术在实践中有用的几种方式当您提供输入图像时&#xff0c;模型内部实际发生的…

第二章 (导数与微分)

导数简介 路程与时间关系函数 就是 速度与时间关系函数 的 原函数。 路程与时间关系函数 求导 &#xff08;或者叫导函数&#xff09; —————求导—————> 就是 vt关系的导数 求导得到》导函数 导函数积分 得到 原函数 你一开始速度为0&#xff0c;然后速度不断…

绘图软件 OmniGraffle mac中文版特点说明

OmniGraffle mac是一款图形绘制和图表设计软件&#xff0c;主要面向 macOS 和 iOS 平台。它适用于用户创建流程图、组织结构图、原型设计、网站线框图、地图等各种类型的图形。该软件的界面直观&#xff0c;用户友好&#xff0c;让用户能够轻松地创建和编辑复杂的图形。 OmniGr…

计算图片中两个任意形状多边形相交部分的大小

一张图片中两个任意多边形相交的面积计算方法。本文参考https://blog.csdn.net/PanYHHH/article/details/110940428&#xff1b;加了一个简单的示例&#xff0c;也对代码做了一点清淅化。原博客中还有其他链接&#xff0c;是C代码&#xff0c;没有看原理&#xff0c;但以下代码…

漏洞复现--IP-guard flexpaper RCE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…