# 基于帧差法的运动目标检测系统
## 一、系统实现功能介绍
利用带硬核的ZYNQ平台,合理利用以并行运算见长的FPGA和以控制见长的ARM核,用帧差法高效地实现了对OV5640采集的运动目标进行检测,并通过HDMI输出到显示器上。在PL端主要实现视频图像的采集、灰度转换、帧间差分算法的设计,而PS端主要完成了对OV5640摄像头的配置以及和DDR3存储器的读取。采用软硬件协同的方式,通过OV5640进行视频图像的采集,使用VDMA IP核将数据存储到DDR中,在经过处理后将结果通过HDMI输出至显示器显示。该系统能够实时检测出运动目标,并在很大程度上解决了当前运动目标检测跟踪有关的算法在嵌入式平台上运行实时性差、耗费资源大、功耗高的问题。基于该硬核实现的的智能信息处理系统,具有创新性、实用性和具体的应用场景。
## 二、系统架构图与软硬件功能划分
本系统利用利用带硬核的ZYNQ 7020进行设计,采用软硬件协同的设计方法,完成运动目标检测系统的实现。
系统的架构如图2-1所示,PL端通过OV5640摄像头进行图像采集后,先要将图像数据转换成AXI4-Stream的格式,才能通过VDMA的写通道写入帧缓存中。本系统采用Xilinx提供的Video in to AXI4-Stream IP核,以实现将采集的RGB格式视频数据流转换成AXI4-Stream流,与VDMA IP之间进行数据通信,实现把数据通过VDMA0写入到 DDR3。每次写入一幅图像的数据的同时,通过VDMA0读出前一帧数据,送往运动目标检测加速器进行帧差运算,最后通过VDMA1发出去。VDMA1与AXI4-Stream to Video Out IP核相连,实现将VDMA1输出的AXI-Stream数据流转换成视频协议的数据流。该数据流通过自行封装的HDMP驱动IP DVI_Transmitter后,显示在具备HDMI的显示器上。
![](https://graph-1301143676.cos.ap-chengdu.myqcloud.com/FPGA/DigilentCUP/0709diff/2%25F%7DH686SQ%5D%608%60%60MYAEGS%605.png)
整个系统PL部分主要工作是图像采集、目标检测加速以及图像显示,PS部分主要是完成对OV5640摄像头配置以及对 DDR的读写控制。
## 三、开源软核与硬核使用情况
本系统采用带硬核的ZYNQ的平台进行设计,未使用开源软核,使用板载硬核处理器完成对OV5640摄像头配置以及对 DDR的读写控制。
### 3.1 ZYNQ硬核简介
Zynq-7000 SoC基于Xilinx 全可编程的可扩展处理平台结构,用户可根据自身需求对SoC进行设计,将定制逻辑映射到基于Xilinx FPGA资源的可编程逻辑PL部分,将软件开发放到基于ARM Cortex-A9多核处理器的处理系统PS部分,实现对系统的软硬件开发。此外,28nm、高k金属栅极工艺也让该器件在高性能运行的同时,有着跟同类Cortex-A9双核处理器相比更低的功耗。图3-1为Zynq-7000 SoC内部结构图。
![](https://graph-1301143676.cos.ap-chengdu.myqcloud.com/FPGA/DigilentCUP/0709diff/clipboard_20210709090111.png)
Zynq-7000 SoC的PS部分以ARM处理器为核心,不同于传统配置FPGA的方法,Zynq-7000 SoC总是最先启动PS内的ARM 处理器。因此,可以把配置PL的过程设置成启动过程的一部分实现对PL的完全配置,也可以在系统启动后根据使用需求通过处理器实现对PL的部分可重配置。
Zynq-7000 SoC内通过PS-PL接口的实现PL内定制的知识产权IP核与PS内的ARM处理器及相关资源的连接,同时PS 到PL的接口也提供了可用于PL内定制IP核的所有可用信号。因此,PS和PL之间有功能接口和配置信号这两种类型的接口。
### 3.2 PS端OV5640摄像头配置
本系统采用OV5640图像传感器,其内部结构如图3-2所示,具有500万像素。为了设置摄像头采集的图像数据的输出格式,可通过兼容I2C总线的SCCB控制接口对摄像头进行相应的配置。
摄像头配置的过程,就是往摄像头寄存器写入控制字的过程。在该模块的设计中,将需要配置的所有寄存器地址以及数据构造成一个查找表,按照查找表的地址索引依次读取相应寄存器的地址以及控制字的数据值,对图像传感器进行配置。通过I2C总线配置完一个寄存器后,相对应的查找表的地址加1,然后开始对下一个寄存器进行配置,直至配置完所有的寄存器。
![](https://graph-1301143676.cos.ap-chengdu.myqcloud.com/FPGA/DigilentCUP/0709diff/clipboard_20210709090212.png)
OV5640使用的是两线式SCCB接口总线,用16位(两个字节)表示寄存器地址,其写传输协议如图3-3所示。
![](https://graph-1301143676.cos.ap-chengdu.myqcloud.com/FPGA/DigilentCUP/0709diff/clipboard_20210709090239.png)
其中ID ADDRESS 是由 7 位器件地址和 1 位读写控制位构成,OV5640 的器件地址为0X3C,所以在写传输协议中,ID Address(W)= 0X78;Sub-address(H) 为高8 位寄存器地址,Sub-address(L)为低 8 位寄存器地址,在OV5640 众多寄存器中,有些寄存器是可改写的,有些是只读的,只有可改写的寄存器才能正确写入;Write Data 为C8 位写数据,每一个寄存器地址对应8 位的配置数据。
在OV5640 正常工作之前,必须先对传感器进行初始化,即通过配置寄存器使其工作在预期的工作模式,以及得到较好画质的图像。因SCCB 的写传输协议和 I2C 几乎相同,故直接使用 I2C 的驱动程序来配置摄像头。
![](https://graph-1301143676.cos.ap-chengdu.myqcloud.com/FPGA/DigilentCUP/0709diff/_9F6%28A3SQQB0MXM5746~~OK.png)
图3-4表示摄像头配置模块流程图,根据该流程,通过I2C总线依次对摄像头寄存器进行配置。在配置过程中,每配置一个寄存器,需要传输的数据包括从设备地址、摄像头寄存器地址以及寄存器控制字。当前I2C设备地址为0X78,OV5640传感器寄存器地址数据为16位,寄存器控制字数据为8位。因此通过I2C对摄像头进行配置时,每对一个寄存器进行配置,需要依次传输设备地址、图像传感器寄存器地址以及寄存器控制字数据,总共32位数据,即需要连续写入4个字节的数据。
按照上图流程对摄像头配置模块进行设计,通过该模块对摄像头相关寄存器进行配置,使摄像头能够正常采集外部图像信息,将采集而来的图像数据输送到后端进行处理。
OV5640初始化完毕之后,可使用vsma_api对VDMA以及动态时钟进行配置,如下所示。
```c
//配置VDMA
run_vdma_frame_buffer(&vdma, VDMA_ID, vd_mode.width, vd_mode.height,
frame_buffer_addr,0,0,BOTH);
//配置VDMA1
run_vdma_frame_buffer(&vdma1,VDMA_ID1,vd_mode.width, vd_mode.height,
frame_buffer_addr,0,0,ONLY_READ);
//初始化Display controller
DisplayInitialize(&dispCtrl, DISP_VTC_ID, DYNCLK_BASEADDR);
//设置VideoMode
DisplaySetMode(&dispCtrl, &vd_mode);
DisplayStart(&dispCtrl);
```
### 3.3 DDR读写
在系统设计中,由于在图像处理算法的计算过程中需要对部分或者整帧图像数据进行计算。为了保证系统在进行图像数据计算过程中能够满足时序要求,通常需要对图像数据进行缓存操作。由摄像头采集的实时视频图像数据量较为庞大,一般采用外部存储器来实现对图像数据的缓存。
本系统PL端使用VDMA,通过AXI_HP接口对PS段DDR进行读写。其中,AXI VDMA是Xilinx专门针对视频应用提供的一种高带宽的解决方案,旨在实现AXI4-Stream视频接口和AXI4接口之间的高带宽接入,可以方便地实现双缓冲和多缓冲机制。
由于本系统需要频繁对摄像头的当前帧图像进行写入、对前一帧图像进行读出,使用单帧缓存会造成图像叠加,故本系统使用VDMA的多帧缓存方案。VDMA 用于将AXI Stream 格式的数据流转换为Memo
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计)基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计)基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计)基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计)基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计)基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明(98分毕业设计)基于ZYNQ7020
资源推荐
资源详情
资源评论
收起资源包目录
基于ZYNQ7020的帧差法运动目标检测系统C源码+全部数据+详细文档说明.zip (56个子文件)
-master
ip_repo
DVI_TX
if
TMDS.xml 850B
TMDS_rtl.xml 3KB
ip
src
dvi_encoder.v 5KB
dvi_transmitter_top.v 4KB
asyn_rst_syn.v 748B
serializer_10_to_1.v 5KB
component.xml 23KB
xgui
serializer_10_to_1_v1_0.tcl 195B
DVI_Transmitter_v1_0.tcl 195B
ov5640_cap_data
component.xml 21KB
xgui
ov5640_capture_data_v1_0.tcl 195B
SRC
ov5640_capture_data.v 4KB
rgb2lcd
if
lcd
lcd.xml 778B
lcd_rtl.xml 4KB
ip
rgb2lcd
doc
rgb2lcd.org 900B
src
rgb2lcd.v 3KB
component.xml 53KB
gui
rgb2lcd_v1_4.gtcl 175B
xgui
rgb2lcd_v1_4.tcl 4KB
axi_dynclk_v1_0
src
axi_dynclk_S00_AXI.vhd 18KB
mmcme2_drp.v 15KB
axi_dynclk.vhd 10KB
component.xml 40KB
drivers
dynclk
dynclk.h 9KB
dynclk.c 8KB
display_ctrl
display_ctrl.h 5KB
lcd_modes.h 3KB
display_ctrl.c 15KB
axi_dynclk
src
dynclk.h 9KB
Makefile 508B
dynclk.c 8KB
display_ctrl.h 5KB
lcd_modes.h 3KB
display_ctrl.c 15KB
data
axi_dynclk.tcl 161B
axi_dynclk.mdd 185B
xgui
axi_dynclk_v1_0.tcl 2KB
SDK
ov5640_hdmi_frame_difference
src
emio_sccb_cfg
emio_sccb_cfg.h 1KB
emio_sccb_cfg.c 4KB
Xilinx.spec 34B
vdma_api
vdma_api.h 3KB
vdma_api.c 16KB
README.txt 41B
display_ctrl_hdmi
display_ctrl.h 4KB
lcd_modes.h 4KB
display_ctrl.c 12KB
dynclk
dynclk.h 9KB
dynclk.c 8KB
ov5640
ov5640_init.c 12KB
ov5640_init.h 1KB
lscript.ld 6KB
main.c 3KB
readme.md 18KB
ov5640_hdmi.srcs
constrs_1
new
top.xdc 2KB
sources_1
imports
project
RGB888_YCbCr444.v 2KB
AXI_VIP_Frame_Difference.v 10KB
共 56 条
- 1
资源评论
yava_free
- 粉丝: 3201
- 资源: 1364
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 计算机毕业设计:python+爬虫+cnki网站爬
- nyakumi-lewd-snack-3-4k_720p.7z.002
- 现在微信小程序能用的mqtt.min.js
- 基于MPC的非线性摆锤系统轨迹跟踪控制matlab仿真,包括程序中文注释,仿真操作步骤
- 基于MATLAB的ITS信道模型数值模拟仿真,包括程序中文注释,仿真操作步骤
- 基于Java、JavaScript、CSS的电子产品商城设计与实现源码
- 基于Vue 2的zjc项目设计源码,适用于赶项目需求
- 基于跨语言统一的C++头文件设计源码开发方案
- 基于MindSpore 1.3的T-GCNTemporal Graph Convolutional Network设计源码
- 基于Java的贝塞尔曲线绘制酷炫轮廓背景设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功