# 基于云台的视觉跟踪控制系统 **Repository Path**: Vincenzo/visual_tracking_control_system_based_on_cloud_platform ## Basic Information - **Project Name**: 基于云台的视觉跟踪控制系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2018-03-21 - **Last Updated**: 2025-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于云台的视觉跟踪系统 ### 构建环境 - Visual Studio 2013 win32控制台程序 - 配置OpenCv,按照CSDN教程配置 - 引入串口库文件,而库的编写需要根据不同的平台来编写,windows下是使用了文件句柄,将串口当做文件来操作,引入编写好的库之后,直接调用 - 最重要的是引入DSStream.h这个头文件,以及放在根目录下面的DSStream.dll动态链接库(程序运行时候需要调用特定函数引入的库,而非编译时候需要的库,比如stdio.h stdafx.h这些) ### 技术参数 - 云台最高旋转速度110度/s,可以通过七个字节码配置 - 云台cpu。。待定 明天我去实验室, - 云台摄像头,采集图像,以每秒60帧的稳定速率传到计算机图形采集卡中,以供OpenCv程序进行处理 - 人脸移动后,从响应到达稳态需要1.2s左右 - 采用RS-232串口通信,RS232接口主要用于下载程序或用来与上位机、触摸屏通信,二RS485接口主要用于组建使用RS485协议的网络,实现通信控制。 - 控制云台采用PELCO-D协议,通过串口发送指令控制云台,数据格式为:1位起始位、8位数据、1位停止位、无校验位、波特率为:2400B/S。 ![image-201803210227210](1.png) ![image-201803210227525](2.png) 发送七个字节的指令来控制云台 ### 调用函数以及各自功能 - useSerial(int x, int y):传入的是面部中心的坐标,通过该坐标和摄像头采集图片中心区域范围的边界数值比较,判断云台的移动方向 - detectAndDisplay(Mat frame):人脸识别,其实这个网上直接有代码,直接从网上抄的。要说道理的话: - 目前人脸检测分类器大都是基于haar特征利用Adaboost学习[算法](http://lib.csdn.net/base/datastructure)训练的,利用样本(大约几百幅样本图片)的 harr 特征进行分类器训练,得到一个级联的boosted分类器。训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本(例如人脸或汽车等),反例样本指其它任意图片,所有的样本图片都被归一化为同样的尺寸大小(例如,20x20)。分类器训练完以后,就可以应用于输入图像中的感兴趣区域(与训练样本相同的尺寸)的检测。检测到目标区域(汽车或人脸)分类器输出为1,否则输出为0。 - 为了检测整副图像,可以在图像中移动搜索窗口,检测每一个位置来确定可能的目标。为了搜索不同大小的目标物体,分类器被设计为可以进行尺寸改变,这样比改变待检图像的尺寸大小更为有效。所以,为了在图像中检测未知大小的目标物体,扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描。 - 分类器中的“级联”是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器,这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。 - opencv的源代码中已经给我们提供了一些训练好的分类器,例如人脸检测分类器,人体检测分类器等。那么如果没有什么特定的需要,我们完全可以利用这些分类器直接进行人脸及人体检测。 - 从文件中加载分类器、利用分类器进行检测、检测完成后释放分类器。这三个阶段对应三个函数: - 函数**cvLoadHaarClassifierCascade**用于从文件中装载训练好的利用哈尔特征的级联分类器,或者从OpenCV中嵌入的分类器数据库中导入。分类器的训练可以应用函数haartraining(详细察看opencv/apps/haartraining) 这个数值是在训练分类器时就确定好的,修改它并不能改变检测的范围或精度。 - 函数**cvHaarDetectObjects** 使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域,并且将这些区域作为一序列的矩形框返回。函数以不同比例大小的扫描窗口对图像进行几次搜索(察看cvSetImagesForHaarClassifierCascade)。每次都要对图像中的这些重叠区域利用cvRunHaarClassifierCascade进行检测。 有时候也会利用某些继承(heuristics)技术以减少分析的候选区域,例如利用 Canny 裁减(prunning)方法。 - 函数**cvReleaseHaarClassifierCascade**释放cascade的动态内存,其中cascade的动态内存或者是手工创建,或者通过函数cvLoadHaarClassifierCascade 或 cvLoad分配。 - 这三个函数包含在库文件opencv_objdetect231d.lib中,在附加依赖项中添加相应的库文件 - cvtColor(frame, frame_gray, COLOR_BGR2GRAY);颜色空间转换,即将彩色图转换成GRAY图 - equalizeHist(frame_gray, frame_gray);灰度图像直方图均衡化,关于这个概念,可以看看[这个,解惑好文](http://blog.csdn.net/garfielder007/article/details/50135517), 均衡化之后才能调用分类器进行人脸识别。 - PS:这些原理之前我们都没时间看,直接用教程试出来的。 - StreamNotify,每次视频捕捉卡传来图像时候作为**回调函数**调用,得到视频的宽高参数,并传递给IamgeCanny进行处理,根据 - 我只做了检测,人脸识别这个,请教杰学霸。 ### 研究意义(干嘛用的) - 所谓视觉跟踪,就是指对图像序列中的运动目标进行检测,提取、识别和跟踪,获得运动目标的运动参数,如位置、速度、加速度等,以及运动轨迹,从而进行进一步处理与分析,实现对运动目标的行为理解,以完成更高一级的任务。 - 视觉跟踪间题引起广泛关注是由于它能够应用于民用和军事的许多领域,主要包括三个方面:视频监视,图像压缩和三维重构。 - 具体到本项目,就是处理云台传输来的图像,检测出人脸,并进行跟踪。展开来说,可以跟踪特定物体,保证在移动过程中不会丢失目标,如监视不停移动的生物,远程控制摄像头,人机交互 ## 项目疑难点 - 注意头文件的引入,windows下面一定要引入windows.h或者stdafx.h,而且这两个不能共存,OpenCv按照配置文件配置好即可。 - 命名空间,虽然using namespace std是非常不优雅的方式,可能会导致冲突,但是作为一个小项目,直接就用了,因为没有使用导致代码报错过。 - 配置OpenCv一定要按照教程,路径配置问题需要格外注意。另外,要引入函数库。 - 注意识别和检测的概念,检测只能检测物体,识别却能区分物体 - 每次都要实例化一个串口实例,初始化次数过多导致超调的发生,如果只有一个人物,完全可以通过在全局实例化,一直占用互斥资源,提高响应速度,经过改进,效果显著。 - 为了能够得到适合OpenCv处理的图片,需要通过DSStream_GetVideoStandard(0, &zhishi, &avail)函数用来得到当前视频的制式,由于OpenCv直接可以使用的为rgb24格式,所以如果得到的不是这个制式,需要设置。 - 我只做了人脸检测并跟踪,有可能说下人脸识别的修理,但是时间很紧,而且这个项目,做过之后觉得,最难的还是配置了,但是听起来,人脸检测识别更加高科技一点,我觉得问题不大。