基于zedBoard的手势识别及桌面操控系统_项目论文

基于zedBoard的手势识别及桌面操控系统

山东大学信息学院集成电路

Sorin

目录

基于zedBoard的手势识别及桌面操控系统........................................................................ 1

综述................................................................................................................................. 3

手势识别简介.............................................................................................. 3

手势识别应用前景:智能化,家庭化.................................................................. 3

技术背景:软硬件协同设计是大方向.................................................................. 3

项目简介............................................................................................................ 3

系统搭建.......................................................................................................................... 3

zedBoard硬件准备.............................................................................................. 3

Linux软件平台准备............................................................................................. 3

由SD卡启动linux......................................................................................... 3

交叉编译环境搭建....................................................................................... 4

编译OpenCV库与Qt库....................................................................................... 4

数据采集与显示.................................................................................................. 4

USB摄像头数据采集.................................................................................... 4

显示视频..................................................................................................... 4

图像预处理......................................................................................................... 4

滤波操作..................................................................................................... 4

肤色提取..................................................................................................... 4

肤色在不同颜色空间下的聚类分析............................................................... 4

多种提取方式相结合的方案......................................................................... 5

形态学操作抗噪........................................................................................... 5

特征学习与分类.................................................................................................. 5

轮廓与特征.................................................................................................. 5

贝叶斯分类器识别手势................................................................................ 5

文本文件的读取与显示....................................................................................... 5

硬件加速与协同设计........................................................................................... 5

运行效果.......................................................................................................................... 5

肤色提取............................................................................................................ 5

轮廓处理............................................................................................................ 5

手势识别............................................................................................................ 5

系统控制............................................................................................................ 5

项目评估.......................................................................................................................... 5

优缺点分析......................................................................................................... 5

总结与展望......................................................................................................... 5

参考资料.......................................................................................................................... 5

综述

手势识别简介

作为机器视觉领域的一项重要内容,基于视觉的手势识别技术(vBGR, Vision Based Gesture Reeognition)是自然的人机交互下的一个分支,它的发展与人机交互技术息息相关。手势识别就是把各种手势按照一定的规则通过计算机识别出来,指示计算机转化为相应的控制命令或者语义,实现对计算机的控制或信息交流。

手势识别应用前景:智能化,家庭化

智能机器时代的到来,对手势识别系统的需求大大增加。它代表了更自然、直接的人机交互,在智能电视、智能机器、以及智能家居等方面有着非常广泛的应用前景。尤其在智能电视方面,如电视阅读、频道控制等等方面对手势识别的词条数目、识别准确度等都提出了更高的要求。

技术背景:软硬件协同设计是大方向

目前的手势识别系统大都基于纯软件实现,识别速度和硬件成本往往不能兼顾,尤其在嵌入式领域表现更为明显。而软硬件协同设计,用硬件实现预处理,软件配合硬件部分完成智能算法,以达到高速、低成本的设计目的。Xilinx公司的zynq系列芯片以及PlanAhead、HLS工具为大规模系统的软硬件协同设计提供了可能。故本项目采用digilent公司开发的zynq实验平台zedBoard实现手势识别及应用系统的设计。

项目简介

该项目基于zedBoard开发设计,使用xilinx HLS工具进行图像预处理部分的硬件开发,在PS部分搭建linux系统,并使用OpenCV开发智能算法,使用QT完成显示。鉴于当前的识别算法现状,在肤色提取方面,该系统采取多种提取方法结合的方式提高提取成功率;使用Bayes分类器完成静态手势的学习与识别。

完整的系统将能通过手势控制显示屏上文本的缩放、换页等动作,以及完成简单的系统控制指令,来模拟智能电视交互功能实现。

系统搭建

zedBoard硬件准备

要在zedBoard运行linux,首先要在zedBoard配置linux的运行环境,在该项目中选择了Digilent公司的OOB设计作为母版进行改动移植。

OOB设计硬件构成 1

OOB设计硬件 1

Linux软件平台准备

由SD卡启动linux

参照zedBoardCTT制作启动Linux的BOOT文件、deviceTree及ramDisk。

在SDK环境下打开“” Create Zynq Boot Image“,按顺序加入官方提供的FSBL文件、由PlanAhead生成的bitStream文件及u-boot文件,生成u-boot.bin并更名为BOOT.bin,与设备树文件devicetree.dtb,磁盘镜像ramdisk8M.image.gz,以及x-linux内核镜像一起复制到SD卡,插到板卡上,配置启动模式为SD卡启动。

连接串口线,在linux下打开minicom,可以查看到启动信息

配置OpenCV及Qt运行环境

1.在Fedora下安装arm-xilinx-linux-gnueabi

2.交叉编译OpenCV,编译时注意同时编译必要的依赖包

3.交叉编译QtSourceEveryWhere,并配置qMake

4.编译Qt项目,在QtCreator中建立项目并运行成功后,在终端下进入项目文件夹,输入qmake -o Makefile project.pro 生成makefile,再输入make命令可生成在嵌入式系统上运行的qt程序

数据采集与显示

由于openCV不支持在xilinx-linux上使用cvCameraCapture捕捉图像,需要自己编写程序通过V4L读取webCam的图像,并进行处理。

USB摄像头数据采集

V4L是Linux环境下开发视频采集设备驱动程序的一套规范(API),它为驱动程序的编写提供统一的接口,并将所有的视频采集设备的驱动程序都纳入其 的管理之中。V4L不仅给驱动程序编写者带来极大的方便,同时也方便了应用程序的编写和移植。V4L2是V4L的升级版,由于我们使用的OOB是3.3的 内核,不再支持V4L,因而编程不再考虑V4L的api和参数定义。

V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集,本文重点讨论内存映射方式的视频采集。

应用程序通过V4L2接口采集视频数据分为五个步骤:

首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;

其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;

第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;

第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;

第五,停止视频采集。

由此构建V4LCam的类声明如下,方便程序调用

typedef struct{

void *start;

unsigned length;

}buffer;

class V4lCam

{

public:

V4lCam();

struct v4l2_buffer camera_buf;

void init(int width,int height);

buffer *buffers;

void startCamStream();

int init_v4l2(void);

struct v4l2_buffer imgBuf;

buffer *getFrameData();

void releaseCap();

V4Lsize imgSize();

private:

int PicState;

unsigned short IMAGEWIDTH;

unsigned short IMAGEHEIGHT;

int fd;

};

显示视频

要想Qt显示由V4L读取的摄像头图像,要将YUV转化为RGB图像,并通过手动设置QImage数据的方式显示。

V4L读取到的YUV(422)图像转化为RGB图像的部分代码:

V4Lsize camsiz=cam.imgSize();

buf=cam.getFrameData();

CvSize siz;

siz.width=camsiz.width;

siz.height=camsiz.height;

IplImage *img,*img2;

img=cvCreateImage(siz,8,3);

img2=cvCreateImage(siz,8,3);

input2YUVimage((char*)(buf->start),img->imageData,siz.width,siz.height);

cvCvtColor(img,img2,CV_YCrCb2RGB);

在Qt上实现动态显示,使用Qpainter绘制所有的图像并以一定频率刷新即可。

图像预处理

滤波操作

由WebCam读取的图像往往不够清晰,会有很多噪点,为了后面的处理更加方便,首先对图像进行滤波处理。常用的滤波操作包括:中值滤波、高斯滤波等,经过测试,发现核大小为5X5的中值滤波具有更好的效果与运行速度,而且便于硬件实现。

肤色提取

肤色提取是手势识别系统中的第一步,也是最终要的一步,肤色提取的效果甚至可以直接影响识别系统的成败。幸运的事,已有许多前人为此作出了贡献。

肤色在不同颜色空间下的聚类分析
RGB空间

在RGB彩色模型中,所表示的图像由3个图像分量组成,每个分量阁像都是其原色图像。多数的阁像釆集设各都是以CCD技术为核心,直接感知色彩的R、G、B 二个分量,这也使得三基色模型成为图像成像、显示、打印等设备的基础,具有十分重要的作用,被广泛用于视频监视器和彩色摄像机中。

HSV空间

HSV (色调、饱和度、亮度)彩色空间是人们用来从调色板或颜色轮中挑选颜色所用的彩色系统之一。该颜色系统比RGB系统更接近于人们的经验和对彩色的感知。HSV空间中将亮度信息分离,因而色度H分量对光照变化有更高的鲁棒性。经过采样也可得知,肤色在H分量上具有很高的鲁棒性,因此在使用H与S分量进行肤色分割,具有很好的效果。

HSV颜色空间 1

YCrCb颜色空间

YCbCr空间广泛用于图像和视频压缩标准,如MPEG和JPEG都采用此格式,它是YUV彩色空间家族中的一种。在YCbCr模型中,Y表示亮度。Cb和Cr分量分别表示蓝色和红色的色度,并且Cb和Cr之间是二维独立的。经过分析可知,肤色的Cb、Cr分量的联合概率密度图像大概成椭圆分布,故椭圆模型[i]pow(Cb-148,2)/(30.4*30.4)*cos(2.44)+pow(Cr-106,2)/(10.6*10.6)*sin(2.44)<1仍值得采用。但在实际测试的过程中,得到的图像并不十分理想,优势在于在讨论的3中模型中,CrCb的椭圆模型对光照的敏感性是最小的。

多种提取方式相结合的方案

在项目研究过程中,经过多次试验,发现采用HSV空间的HS分量及RGB空间共同进行阈值处理能够获得比较好的效果。在经过查阅文献[ii]及试验得知H分量实际对V分量有一定依赖性,但只要不在光照强烈的室外,分割效果依然不错。经过多次试验,发现在OpenCV环境下,采用85<H<125可以获得比较理想的分割效果。参考文献[iii]限制R>80&&G>25&&B>10&&R-B>15)||(R>210&&G>200&&B>160&&R-G<=15)时可以在RGB空间下获得比较好的分割效果。故最终选取的分割方案如下:

H<130&&H>80&&S<170&&S>15&&R>G&&R>B&&((R>80&&G>25&&B>10&&R-B>15)||(R>210&&G>200&&B>160&&R-G<=15))

形态学操作抗噪

经过固定阈值分割得到的二值化图像具有较多的噪声,当使用形态学操作进行简单的处理。膨胀操作可以连通小的区域,去掉负噪声;腐蚀操作可以将周围环境中的噪点去除。经过多次试验得出,按序进行一次膨胀、两次腐蚀、两次膨胀可以获得最好的形态学处理效果。

特征学习与分类

轮廓与特征

轮廓在表观视觉中十分有用,可用轮廓踢除由于预处理不当引起的空洞,并删除噪点。

在OpenCV中,轮廓是通过序列来表示的,通过cvFindContor可以很方便地获得二值图像的轮廓

为了去除不希望的区域,如环境的干扰、噪点等,并寻找到最合适的轮廓,在查找轮廓的过程中,首先通过周长面积比去掉大面积的背景噪声,然后在剩余的轮廓中选取面积最大的区域作为监测到的手势区域。该部分代码如下:

CvContourScanner scanner = cvStartFindContours(skin,memSto,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE);

while( (seq = cvFindNextContour(scanner) ) != NULL){

area = fabs(cvContourArea(seq));

indexArea=area/(siz.width*siz.height);

lenth=cvContourPerimeter(seq);

if(indexArea<0.009||lenth*lenth/area>150.0){

cvSubstituteContour(scanner,NULL);//删除当前的轮廓

}else{

CvBox2D box=cvMinAreaRect2(seq,memSto);

box_area=box.size.width*box.size.height;

seq2= cvConvexHull2(seq,memStoHull,CV_CLOCKWISE,1);

if(area>areaMax){

areaMax=area;

classifydata.areaRatio=areaMax/fabs(cvContourArea(seq2));

classifydata.recRatio=areaMax/(box.size.height*box.size.width);

classifydata.angle=box.angle;

rec_wid=box.size.width;

indAraMax=indexArea;

indLenMax=(lenth*lenth)/area;

seqMax=seq;

hullMax=seq2;

}

// }

}

}

seq=cvEndFindContours(&scanner);

提取到轮廓后可以获得很多有用的特征,其中具有缩放旋转不变性的如归一化Hu矩、周长面积比、以及其凸包凸缺陷等特征都可提供良好的分类依据。

贝叶斯分类器识别手势

贝叶斯分类的基础是概率推理,就是在各种条件的存在不确定,仅知其出现概率的情况下,如何完成推理和决策任务。概率推理是与确定性推理相对应的。

openCV中与贝叶斯分类器相关的API函数有以下几个:

(1)CvNormalBayesClassifier::CvNormalBayesClassifier();

该函数为默认构造函数;

(2)CvNormalBayesClassifier::CvNormalBayesClassifier(const Mat& trainData, const Mat& response, const Mat& varIdx=Mat(),const Mat& sampleIdx=Mat());

该函数实际是在默认构造函数内部调用train()函数进行分类器训练;

(3)bool CvNormalBayesClassifier::train(const Mat& trainData, const Mat& response, const Mat& varIdx=Mat(),const Mat& sampleIdx=Mat());

该函数进行贝叶斯分类器的训练,输入向量必须为行向量;变量response必须为整数,但其在初始化时类型可被设置为CV_32FC1;

所有特征向量必须完整,不允许训练样本集的某一个向量存在数据缺失;

(4)float CvNormalBayesClassifier::predict(const Mat& samples, Mat* result=0);

该函数根据用户输入的测试样本的特征向量,返回其所属的类别;注意,如果输入是很多个测试样本的特征向量组成的矩阵,返回值为result矩阵;

在该项目中,先构造贝叶斯分类器在上位机学习训练已经获得的特征数据,并将分类器数据导出在嵌入式设备上使用

部分代码

if(IS_TRAINING&&(!TRAIN_COMPLETED)){

classifier.load("classifier.txt");

classifier.train(train_mat,res_mat,Mat(),Mat(),0);

classifier.save("classifier.txt");

TRAIN_COMPLETED=1;

}

识别结果见附件

硬件加速与协同设计

使用zynq平台进行开发的巨大优势就在于可以使用HLS进行高层次综合,用硬件加速代替原本使用软件完成的部分。其中图像处理中基于像素流的预处理部分最适合使用HLS进行加速,通过AXI-Stream+DMA与PS直接进行高速数据通信,可以极高地加速系统运行。

软硬件协同设计的基本流程如下:

运行效果

在屏幕的左上角即为读入的源图像与检测到的轮廓及凸包的叠加图,右下角为检测到的肤色区域,右上角为通过轮廓重建的二值图像,由此可以看到有效地去除了噪点并填补了内部及边缘处的空洞。

result显示的是由分类器返回的结果,该手势与训练时预置的索引号是一致的,对手势的倾斜角度的判断-45也是正确的,其他的特征值是分类器用来学习与识别的,在这里无法直观得到信息

项目评估

优缺点分析

该项目仅仅作为一个参考模型,显示了软硬件协同设计进行智能视觉处理的基本思路。 利用现有技术,大大缩短了开发周期提高了开发质量。

但该项目尚有许多不足之处,如在肤色提取环节上仍有较大上升空间以及识别手势数量较少等。

总结与展望

参考资料

《软硬件协同设计——基于Zynq》

《精通Qt编程(第四版)》

《Learning OpenCV》

Xilinx官方文档

懒兔子博客

超群天晴博客


[i]

[ii]

[iii]

时间: 2024-08-26 09:57:08

基于zedBoard的手势识别及桌面操控系统_项目论文的相关文章

基于Node和MongoDB的Web微博系统

基于Node和MongoDB的Web微博系统 概述 项目是受到<Node.js开发指南>一书启发,作者BYVoid大佬是当时第一批Node开发者,当时学习者迫切需要一个这么DEMO.当然现在已经过去很多年了,Node早就更新无数次了,12年的这本书也就过时,许多代码都根本跑不通了,最后还是要以官网API为准. 项目的后台用的express. 数据库部分自己写的原生MongoDB,没有去用控制力更强大的mongoose框架,多写原生东西对自己有好处. 前端用的是jQuery,underscore

基于 VNCServer + noVNC 构建 Docker 桌面系统

by Falcon of TinyLab.org 2015/05/02 简介 基于 ssh + Xpra 构建 Docker 桌面系统 刚介绍了如何通过 Ssh + Xpra 构建 C/S 架构的 Docker 桌面系统. 本文介绍另外一种 B/S 架构的 Docker 桌面系统,即基于 VNCServer + noVNC 构建一个可以通过浏览器直接访问的 Docker 桌面系统. noVNC VNCServer 是一个为了满足分布式用户共享服务器资源,而在服务器开启的一项服务,对应的客户端软件

基于无线信号的手势识别研究现状调查

摘要:进入21世纪以来,人机交互技术持续发展,手势识别是代表之一.2013年,华盛顿大学的研究人员提出了使用无线信号进行手势识别的方法,给传统的手势识别技术带来的一定的挑战,但是这一技术并不是很成熟,暂时没有投入商业使用.本文详细介绍了手势识别,并叙述了基于无线射频的手势识别的研究现状. 关键词:无线信号.手势识别.人机交互 一.背景 进入二十一世纪以来,随着世界科技持续不断的进步以及计算机突飞猛进的发展和普及,人机交互技术(Human-Computer Interaction,简称HCI)在世

开源倾情奉献:基于.NET打造IP智能网络视频监控系统

转载自 http://www.cnblogs.com/gaochundong/p/opensource_ip_video_surveillance_system_part_1_introduction.html 开源倾情奉献系列链接 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(二)基础类库介绍 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(三)命令行工具集 开源倾情奉献:基于.NET打造IP智能网络视频

基于HTML5的燃气3D培训仿真系统

最近上线了的基于HTML5的燃气3D培训仿真系统,以前的老系统是采用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但因为这次新产品需求要求能运行多移动终端,多年前基于MFC封装OSG的老系统架构也实在该退休了,这年头找能维护MFC这种古董级GUI的靠谱人也非易事. 系统最终采用HT for Web的3D框架实现,项目中的程序员也很高兴有这样的机会终于摆脱维护MFC老系统的宿命,虽然大家都只有C++的开发经验,对HTML/CSS/JS并

项目需求:基于微信平台的拼团活动系统

项目需求分析 基于微信平台的拼团活动系统 一.业务需求 基于微信平台的拼团系统是一个生活类微信公众平台,解决用户获取厦门城市活动信息问题.同城交友这方面在厦门还比较薄弱,可以通过这个平台增进厦门城市内部的交流,促进大家文娱生活的丰富度.应用前景主要在一下几个方面:1.各类商业活动也可以选择该平台来作为推广和营销的渠道.2.通过该平台找到与自己兴趣相关的活动并参与.活动类型可包括音乐.戏剧.讲座.聚会.电影.展览.活动.公益.旅行等众多内容.一切你热衷的饭局.K歌.球赛都能在上面组织.你可以发起一

基于GPU虚拟化的Xendesktop 桌面虚拟化浅析

市面上的桌面虚拟化解决方案至少有4种以上,我了解的有 citrix的xendesktop,vmware 的view,Microsoft 桌面虚拟化,此外还有大家可能比较陌生的quest  vworkspace,当然还有redhat 的桌面虚拟化解决方案. 其实就目前来说最有实力,业界体验最好的应该是citrix的xendesktop,其次是vmware view,微软的再次之,其他的不是非常主流,就不详细描述,本次文章主要是基于GPU虚拟化的Xendesktop 桌面虚拟化浅析. 对于GPU虚拟

基于QT和OpenCV的人脸识别系统

1 系统方案设计 1.1 引言 人脸是一个常见而复杂的视觉模式,人脸所反映的视觉信息在人与人的交流和交往中有着重 要的作用和意义,对人脸进行处理和分析在视频监控.出入口控制.视频会议以及人机交互等领 域都有着广泛的应用前景,因此是模式识别和计算机视觉领域持续的研究热点. 本系统在 FriendlyARM Tiny6410 开发板基础上,利用 OpenCV 计算机视觉库和 QT 图形库,通 过普通的 USB 摄像头实现了自动人脸识别,准确率较高,方便易用. 1.2 系统总体架构 "人脸识别&quo

桌面Linux系统的先驱者慕尼黑现在正在考虑切换回Windows

From: http://arstechnica.com/business/2014/08/linux-on-the-desktop-pioneer-munich-now-considering-a-switch-back-to-windows/ 市政府称,用户不满意Linux的成本高于预期. 世界仍然在等待的Linux桌面这一年的到来,但在2003年看起来好像是可以实现的这个目标. 当时,慕尼黑市宣布计划将属于市政府的14000台PC从微软的技术切换到Linux. 虽然该计划遭到推迟 ,它于2