# ZYNQ_ddctracking
**Repository Path**: openfpga/ddctracking
## Basic Information
- **Project Name**: ZYNQ_ddctracking
- **Description**: ZYNQ使用云台相机进行实时对象跟踪(肤色追踪实验)
- **Primary Language**: Verilog
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 1
- **Created**: 2021-12-26
- **Last Updated**: 2025-05-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 使用云台相机进行实时对象跟踪(肤色追踪实验)
IPC摄像头将跟踪对象保持在视频的中心。

# 硬件

FPGA Zybo

AXIS V5915 50HZ PTZ
# 介绍
对象跟踪是在视频序列的每个连续帧中寻找感兴趣的区域,在许多应用中都很有用,例如汽车行业、自动视频监控系统和手势识别。
该项目展示了使用 Zybo Z7-20 SoC 的 FPGA 加速跟踪算法。该系统还包含 AXIS V5915 PTZ 摄像机,通过与摄像机服务器的 TCP 连接而进行控制达到我们的目的。
# 肤色追踪
肤色识别是在YCbCr色彩空间中完成的,可以通过RGB像素乘以3x3转换矩阵来实现:

转换后,可以创建肤色分类掩码,255 值表示像素被认为是皮肤。

Ta、Tb、Tc、Td 值是通过实验确定的。
分类后,可以计算皮肤区域的中心坐标:

具体位置计算:

Im(i, j) 是 (i, j) 像素坐标的掩码值。
# 控制相机的位置
相机的服务器在 TCP 端口 80 上接受 HTTP 请求,其结构如下所示:

例如,如果我们想将相机绕垂直轴向右旋转 10 度,则应发送以下请求:

其他参数如下表所示:

# 系统架构设计
使用异构 Zynq-7000 SoC,可以将项目划分为两个子系统:在可编程逻辑中实现的肤色跟踪算法,负责计算跟踪对象位置并将其写入 AXI4 Lite 接口,以及负责从 AXI4 获取对象坐标的相机控制系统接口并通过 TCP 循环控制相机的速度。总图如图 1 所示。

# PS端设计
使用了 Xilinx SDK自带的 TCP Client 示例项目的进行修改。主程序循环如图所示(详细见源码)。

# PL端设计
顶块设计如图所示。

# 演示


# 参考来源
> https://github.com/mdanilow/ddctracking
# 使用
Step 1. 摄像头端设置(IP等).
- Open project in Vivado.
- File > Launch SDK.
- camera control project is "clientboys"
- in line 64 of "main.c" define your camera's network location
- in file "tcp_perf_client.c", line 212, edit your camera's request structure
Step 2. Build project
Step 3. Generate bitstream in Vivado
Step 4. Click "Program FPGA" in SDK and then Run