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

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

团队介绍

参赛单位:北京理工大学
队伍名称:飞虎队
指导老师:李彬
参赛杯赛: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.rhkb.cn/news/193249.html

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

相关文章

Python数据容器(字典)

字典 1.字典的定义2.字典数据的获取3.字典的嵌套4.嵌套字典的内容获取5.字典的常用操作6.常用操作总结7.遍历字典8.练习 1.字典的定义 同样使用{},不过存储的元素是一个一个的:键值对,语法如下 # 定义字典字面量 {key:value,key:value,...,…

邮件钓鱼-邮件来源伪造-SPF绕过-setoolkitgohishswaks钓鱼

0x00 SPF简介 SPF即发送方策略框架,某种邮件服务器会有自己的SPF策略设定,可以设定SPF为只允许某些主机发送邮件等,当设定后第三方就无法伪造成邮件服务器的管理员对用户下发邮件。 是否存在SPF的验证: linux下:dig…

day17_多线程基础

今日内容 零、 复习昨日 一、作业 二、进程与线程 三、创建线程 四、线程的API 一、复习 IO流的分类 方向: 输入,输出类型: 字节(XxxStream),字符(XxxReader,XxxWriter)字节输入流类名: FileInputStream字节输出流类名: FileOutputStream字符输入流类名: FileReader字符输出流类…

bclinux aarch64 ceph 14.2.10 对象存储 http网关 CEPH OBJECT GATEWAY Civetweb

相关内容 bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds: ceph-deploy mds-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设…

RabbitMQ之消息应答和持久化

文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中,我们的消费者在…

Django之模版层

文章目录 模版语法传值模版语法传值特性模版语法标签语法格式if模板标签for模板标签with起别名 模版语法过滤器常用过滤器 自定义过滤器、标签、inclusion_tag自定义过滤器自定义标签自定义inclusion_tag 模版导入模版继承 模版语法传值 模板层三种语法{{}}:主要与数据值相关{%…

【LLM】0x00 大模型简介

0x00 大模型简介 个人问题学习笔记大模型简介LLM 的能力:LLM 的特点: LangChain 简介LangChain 核心组件 小结参考资料 个人问题 1、大模型是什么? 2、ChatGPT 在大模型里是什么? 3、大模型怎么用? 带着问题去学习&a…

Linux Centos 根目录扩展分区(保级教程)

Centos 根目录扩展分区 1. 扩展背景2.列出磁盘信息3. 对磁盘进行分区4. 重启Linux5. 将PV加入卷组centos并分区6.查看分区结果 1. 扩展背景 虚拟机初始分配20G内存,扩容到80G。 2.列出磁盘信息 可以得知容量信息以及即将创建的PV路径(通常为“/dev/s…

2024上海国际智能驾驶技术展览会(自动驾驶展)

2024上海国际智能驾驶技术展览会 2024 Shanghai International Autonomous driving Expo 时间:2024年3月26-28日 地点:上海跨国采购会展中心 随着科技的飞速发展,智能驾驶已经成为了汽车行业的重要趋势。在这个时代背景下,汽车不…

Qt 线程串口

文章目录 ui设置创建线程函数初始串口run函数接收发送数据读取数据处理读取的数据写入数据写入启动的命令 主线程 ui设置 创建线程函数 #include <QObject> #include <QThread> #include <QSerialPort> #include <QSerialPortInfo>class SerialPort :…

微信小程序广告banner、滚动屏怎么做?

使用滑块视图容器swiper和swiper-item可以制作滚动屏&#xff0c;代码如下&#xff1a; wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…

Unity Meta Quest 一体机开发(六):HandGrabInteractor 和 HandGrabInteractable 知识点

文章目录 &#x1f4d5;教程说明&#x1f4d5;HandGrabInteractor⭐HandGrabAPI⭐HandWristPoint⭐GripPoint⭐PinchPoint⭐PinchArea⭐HandGrabVisual⭐HandGrabGlow &#x1f4d5;HandGrabInteractable⭐Support Grab Type⭐Pinch Grab Rules 和 Palm Grab Rules⭐Unselect M…

【Java 进阶篇】JQuery 案例:全选全不选,为选择添彩

在前端的舞台上&#xff0c;用户交互是一场精彩的表演&#xff0c;而全选全不选的功能则是其中一段引人入胜的剧情。通过巧妙运用 JQuery&#xff0c;我们可以为用户提供便捷的全选和全不选操作&#xff0c;让页面更富交互性。本篇博客将深入探讨 JQuery 中全选全不选的实现原理…

pytorch tensor数据类型转换为python数据

一、item() input: x torch.tensor([1.0]) x.item()output: 1.0二、tolist() input: a torch.randn(2, 2) a.tolist() a[0,0].tolist()output: [[0.012766935862600803, 0.5415473580360413],[-0.08909505605697632, 0.7729271650314331]]0.012766935862600803

【论文阅读】(CTGAN)Modeling Tabular data using Conditional GAN

论文地址&#xff1a;[1907.00503] Modeling Tabular data using Conditional GAN (arxiv.org) 摘要 对表格数据中行的概率分布进行建模并生成真实的合成数据是一项非常重要的任务&#xff0c;有着许多挑战。本文设计了CTGAN&#xff0c;使用条件生成器解决挑战。为了帮助进行公…

IDEA如何打断点调试

目录 1. 设置断点2. 调试3. 调试的基本操作3.1 step over3.2 step into 跟 Force step into3.3 step out3.4 resume program3.5 mute breakpoints3.6 view breakpoints3.6 条件断点 编写代码的时候&#xff0c;有时候我们需要跟踪代码的运行情况&#xff0c;使用断点调试就是一…

Eclipse打包Springboot项目

首先&#xff0c;在pom.xml文件中添加配置&#xff0c;修改mainClass主函数&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configurat…

蓝桥杯每日一题2023.11.14

题目描述 题目分析 此题目的最终目标是将字母都填上数使等式符合条件&#xff0c;实际我们发现可以使用搜索将所有符合条件的进行判断&#xff08;答案&#xff1a;29&#xff09; 由于小数可能会出现错误故我们将其进行简单变化进行搜索 #include<bits/stdc.h> using…

Git常用指令以及常见问题解决

摘要&#xff1a;记录本人Git常用指令以及常见问题解决 1.Git流程 2.具体操作 git init&#xff1a;初始化目录&#xff08;一般直接git clone远端的工程&#xff0c;这一步都可以省略掉&#xff09;&#xff1b; 输入命令“git config --global user.name xxx”来配置你的用…

wpf devexpress设置行和编辑器

如下教程示范如何计算行布局&#xff0c;特定的表格单元编辑器&#xff0c;和格式化显示值。这个教程基于前一个文章 选择行显示 GridControl为所有字段生成行和绑定数据源&#xff0c;如果AutoGenerateColumns 属性选择AddNew。添加行到GridControl精确显示为特别的几行设置。…