版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要在现代社会中,视频采集与检测被广泛应用于生活的方方面面,特别是现代监控、实时统计等领域,有着巨大的商业前景。本设计研究了广告效果评估系统中的人脸检测和识别技术。本系统是在c+环境下,调用directshow和opencv的库函数编译实现的。directshow是微软公司在activemovie和video for windows的基础上推出的新一代基于com的流媒体处理的开发包,opencv是英特尔公司软件开发中心开发的是面向应用程序开发者开发的计算机视觉库,它由一系列c函数和少量c+构成。另外本设计介绍了快速人脸检测算法,快速人脸检测是viola提出了基于积分图像与adaboost训练
2、的快速人脸检测方法,其中利用积分图像计算矩形特征,再用adaboost方法训练这些矩形特征组成强分类器,由于可以在积分图像上快速的计算这些矩形特征从而使分类器的速度大大提高。本设计的基本思想是安装摄像装置来拍摄动态场景,然后在视频中检测人脸信息,并跟踪其运动。该系统硬件结构简单实用,只需在普通pc上安装一块视频采集卡,与前端摄像头连接以获取视频输入。软件结构主要为视频信息的采集与检测,算法的核心是人脸快速检测检测。关键词: directshow,opencv,人脸检测,人脸跟踪,adaboostabstractin modern society, video capture and detec
3、tion are widely used in all aspects of life, especially modern monitoring, real-time statistics and other fields, has great commercial prospects. the design study to assess the effect of the advertising system of face detection and recognition technology. the system is in c + + environment, called d
4、irectshow and opencv to compile the library functions achieve. the design of the basic idea is to install the camera device to shoot dynamic scenes, and then detected in the face video information, and track their movement. the system hardware structure is simple and practical, just in an ordinary p
5、c to install a video capture card, with the front camera for video input connections. software architecture of the main video information for the collection and testing, the core algorithm for rapid detection of human face detection.key words: directshow,opencv face detection, face tracking, adaboos
6、t目 录前 言1第1章 directshow视频采集原理31.1 ddiectx简介31.2 directx 9.0c41.3 directshow51.4 directshow基本原理61.5系统环境及开发环境71.6 用directshow实现视频采集7第2章 开发平台opencv82.1 opencv简介82.2 opencv图像处理库82.3 opencv中的常用结构9第3章 快速人脸检测13第4章 人脸检测开发环境搭建164.1硬件安装164.2 directx sdk 开发包下载安装174.3 opencv下载与安装184.4 microsoft visual c+环境配置184.
7、5 vc项目的建立18第5章 系统实现215.1系统组成215.2人脸检测的实现21第6章 总结与展望25致 谢26参考文献27附 录directshow视频采集函数28前 言 近年来,随着平面广告的发展,对广告效果的评估越来越被企业重视。从功能上讲,建立一个这样的系统需要做视频采集与检测两方面工作。其核心是利用计算机视觉技术从视频图像中检测人脸并对其行为进行理解与描述,其中重要算法就是快速人脸检测。所谓人脸检测,指在给定的一幅静止图像或一段动态图像序列中,从背景未知的图像中分割、提取并确认可能存在的人脸,如果检测到人脸,则确定其位置与大小,并提取出人脸的特征。论文共分五章,主要内容概要如下:
8、第1章首先介绍了directshow视频采集原理,directshow是微软公司在activemovie和video for windows的基础上推出的新一代基于com的流媒体处理的开发包,主要用于视频采集。第2章主要介绍了系统的一个开发平台opencv,opencv是英特尔公司开发的,是面向应用程序开发者开发的计算机视觉库,它由一系列c函数和少量c+构成,opencv函数库不仅对图像进行过滤,统计,分类等基本操作,而且现了图像处理和计算机视觉方面的很多通用算法,主要用于人脸的检测。第3章摘要介绍了快速人脸检测算法,本算法是viola提出了基于积分图像与adaboost训练的快速人脸检测方法
9、,其中利用积分图像计算矩形特征,再用adaboost方法训练这些矩形特征组成强分类器,由于可以在积分图像上快速的计算这些矩形特征从而使分类器的速度大大提高。第4章主要介绍了系统环境的搭建,主要包括软硬件两个部分以及c+库函数的路径配置。第5章主要介绍了系统的实现主要介绍了实现视频采集与人脸检测的一些重要函数。人脸检测所存在的主要问题:1.实时性问题,在实际应用中,特别是在数字视频监视系统中,人们往往对于系统的实时性要求更高,当有人走进监控器的监视范围之内时,要求能够实时、准确地检测到人脸的位置,并能跟踪它的运动轨迹及大小变化,直到离开所监控的范围。众所周知,在算法设计时,一方面为了提高实时性,
10、需要减少目标特征的数量和复杂度;另一方面为了提高准确度,需要同时使用多个特征进行综合判断,实时性和准确度往往难以同时满足。此外,由于图像本身数据量大,仅仅为了计算某一个特征往往也需要花费大量的时间。在实时性与准确度之间寻找一个合理的折衷,是许多算法设计的一个主要目标。2.遮挡处理问题,目前,大部分人脸检测、运动跟踪系统都不能很好地解决目标之间互遮挡和人体自遮挡等问题,尤其是在拥挤状态下,多人脸检测和跟踪问题更是难于处理。遮挡时,人体只有部分是可见的,简单依赖于背景减除进行运动分割的技术此时将不再可靠,为了减少遮挡或深度所带来的歧义性问题,必须开发更好的模型来处理遮挡时特征与身体各部分之间的准确
11、对应问题。本论文所做的主要工作:本设计的目的是在学习visual c+的同时,熟悉vc的编程环境,了解和学习编程的相关知识,并熟悉了一个工程项目的实现过程。本设计对比了几种人脸检测算法,选择了实时性与准确度相对较好的快速人脸检测adaboost算法。本文所研究的主要是在directshow和opencv支持下的视频采集与检测。第1章 directshow视频采集原理1.1 ddiectx简介directx是一种应用程序接口,directx是由很多api组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。 显示部分担任图形处理的关键,分为directdraw(ddra
12、w)和direct3d(d3d),前者主要负责2d图像加速。它包括很多方面:我们播放mp3、dvd电影、看图、玩小游戏等等都是用的ddraw,你可以把它理解成所有划线的部分都是用的ddraw。后者则主要负责3d效果的显示,比如cs中的场景和人物、fifa中的人物等等,都是使用了directx的direct3d。directx并不是一个单纯的图形api1,它是由微软公司开发的用途广泛的api,它包含有direct graphics(direct 3d+direct draw)、direct input、direct play、direct sound、direct show、direct set
13、up、direct media objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3d图形方面的优秀表现,让它的其它方面显得暗淡无光。directx开发之初是为了弥补windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。 directx 是一组低级“应用程序编程接口”,可为 windows 程序提供高性能的硬件加速多媒体支持。windows 支持 directx 8.0,它能增强计算机的多媒体功能。使用 directx 可访问显卡与声卡的功能,从而使程序可提供逼真的三维图形与令人如醉如痴的音乐与声音效果。 direc
14、tx 使程序能够轻松确定计算机的硬件性能,然后设置与之匹配的程序参数。该程序使得多媒体软件程序能够在基于 windows 的具有 directx 兼容硬件与驱动程序的计算机上运行,同时可确保多媒体程序能够充分利用高性能硬件。 directx 包含一组 api,通过它能访问高性能硬件的高级功能,如三维图形加速芯片和声卡。这些 api 控制低级功能、支持输入设备并控制着混音及声音输出。构成 directx 的下列组件支持低级功能: microsoft directdraw microsoft directdraw api 支持快速访问计算机视频适配器的加速硬件功能。它支持在所有视频适配器上显示图形
15、的标准方法,并且使用加速驱动程序时可以更快更直接地访问。directdraw 为程序以及 windows 系统组件提供了一种独立于设备之外的方法来访问特定显示设备的功能,而不要求用户提供设备功能的其它信息。 2002年底,微软发布directx9.0。directx 9中ps单元的渲染精度已达到浮点精度,传统的硬件t&l单元也被取消。全新的vertexshader编程将比以前复杂得多,新的vertexshader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。 ps 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精
16、度提高无限多;另外ps1.4只能支持28个硬件指令,同时操作6个材质,而ps2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。 vs 2.0通过增加vertex程序的灵活性,显著的提高了老版本的vs性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。 增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制p
17、c图形图像质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。 1.2 directx 9.0c与过去的directx 9.0b和shader model 2.0相比较,directx 9.0c最大的改进,便是引入了对shader model 3.0(包括pixel shader 3.0 和vertex shader 3.0两个着色语言规范)的全面支持。举例来说,directx 9.0b的shader model 2.0所支持的vertex shader最大指令数仅为256个,pixel shader最大指
18、令数更是只有96个。而在最新的shader model 3.0中,vertex shader和pixel shader的最大指令数都大幅上升至65535个,全新的动态程序流控制、 位移贴图、多渲染目标、次表面散射、柔和阴影、环境和地面阴影、全局照明等新技术特性,使得geforce 6、geforce7系列以及radeon x1000系列立刻为新一代游戏以及具备无比真实感、幻想般的复杂的数字世界和逼真的角色在影视品质的环境中活动提供强大动力。因此directx 9.0c和shader model 3.0标准的推出,可以说是directx发展历程中的重要转折点。在directx 9.0c中,sha
19、der model 3.0除了取消指令数限制和加入位移贴图等新特性之外,更多的特性都是在解决游戏的执行效率和品质上下功夫,shader model 3.0诞生之后,人们对待游戏的态度也开始从过去单纯地追求速度,转变到游戏画质和运行速度两者兼顾。因此shader model 3.0对游戏产业的影响可谓深远。1.3 directshowdirectshow是微软公司在activemovie和video for windows的基础上推出的新一代基于com的流媒体处理的开发包2,与directx开发包一起发布。目前,directx最新版本为9.0。directshow为多媒体流的捕捉和回放提供了强有
20、力的支持。运用directshow,我们可以很方便地从支持wdm驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(mdbms)中多媒体数据的存取变得更加方便。 directshow是微软公司提供的一套在windows平台上进行流媒体处理的开发包,与directx开发包一起发布。 运用directshow,我们可以很方便地从支持wdm驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括asf、mpeg、avi、dv、mp3、wave等等,使得多媒体数据的回放变得轻而易举。另外,directshow还集成
21、了directx其它部分的技术,直接支持dvd的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,directshow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。1.4 directshow基本原理directshow的基本原理是多媒体数据在过滤器图表(filter graph)中流动,通过过滤器图表中各过滤器(filter)实现在功能,最终实现多媒体数据在渲染过滤器(vendering filters)中的显示和回放。我们知道,一般过滤器可分为三类:源过滤器(source filters)、转换过滤器(transform filters)、渲染过滤器
22、(vendering filters)。它们分别完成数据提供、数据格式转换(压缩编码等)和数据渲染和回放功能。所以,为了实现在win32系统下的视频采集,我们首先要构造出一个适当的过滤器图表,然后通过应用程序对过滤器图表的管理来完成视频采集的功能。 这里我们一般需要2至3个过滤器。为什么这个数字会不准确呢?那是因为一方面系统采集设备的驱动模型是不确定的(一般有wdm和vfw两种);另一方面同一采集设备它们的filter会由于驱动程序的差异造成filter中引脚(pin)的不一致;还有就 是不同总线的采集设备(pci、usb、agp)它们的filter也是不一致的。比如:同为usb摄像头,有些f
23、ilter有两个输出引脚(capture和preview);而有些filter则只有一个输出引脚(capture)。这里preview引脚用来将做视频预览,capture引脚用来将输入数据以供编码、保存等用处。这几个过滤器分别是:a.video capture filter 采集设备filterb.smart tee filter 将没有preview引脚filter的capture引脚分为两支数据流c.video venderer 视频渲染及回放filter通过上面3个过滤器,我们可以构造出一个完整的视频采集过滤器图(如图1-1) 图1-1视频采集过滤器我们也可以对上面的过滤器图表稍做修改,
24、将它变为一个既可以预览视频,又可以将视频保存为媒体文件的图(如图1-2)。 图1-2将视频保存为媒体图表构造出来后,接下来就午剩下具体的实现了,我们只需依次构造每个filter,然后将各信filter的pin按序相连即可完成图表的构造。最后,我们通过应用程序向图表发送命令(通过图表管理器完成)来控制整个视频采集的流程。1.5系统环境及开发环境a.系统支持directxb.vc+ 6.0安装有directx sdk9.0c.视频采集设备天敏25001.6 用directshow实现视频采集directshow作为directx的一个子集,它为用户提供了强大、方便的多媒体开接口,并且它拥有直接操作
25、硬件的能力,这使得它的效率远胜于用gdi等图形方式编写的多媒体程序。这里结合实践中运用directshow实现视频采(win32) 来加深对directshow的理解和操作能力。视频采集具体实现程序见附录。第2章 开发平台opencv2.1 opencv简介opencv(intel open source computer vision library)是英特尔公司1999年在俄罗斯设立的软件开发中心开发的,是面向应用程序开发者开发的计算机视觉库,它由一系列c函数和少量c+构成,opencv函数库不仅对图像进行过滤,统计,分类等基本操作,而且现了图像处理和计算机视觉方面的很多通用算法,例如运动
26、分析和跟踪、人识别、目标识别、特征检测与跟踪、形状分析(几何形状处理)、3d重构,象分离与检测等3。opencv函数库定义了在图像处理领域中的特定的数据类和操作模型。它和对数字图像底层操作的ipl(intel image processing libra兼容。算法的是基于与ipl数据结构兼容的高度灵活的动态数据结构,超过半以上的函数都在使用intel处理器的时候得到优化。相对于其它图像函数库,opencv是一种源码开放式的函数库,开发者以自由地调用函数库中的相关处理函数。opencv中包含300多个跨平台的中高层api函数,具备强大的图像和矩阵运算能力,可以大大减少开发者的程工作量,有效提高开
27、发效率和程序运行的可靠性。另外,由于opencv有很好的移植性,开发者可以根据需要在ms-windows和linux两种平台进开发。opencv将以公开源码的方式提供,也就是接受方有权在修改之后另向第三方提供,对非商业用途和商业用途都是免费的。这个软件运行在使intel架构处理器的计算机,而操作系统可以是widows95、2000、xp等。由于opencv的在图像处理方面的强大能力,本程序主要建立在opencv图像库的基础上的。 2.2 opencv图像处理库 opencv是英特尔公司于1999年在俄罗斯设立的软件开发中心“software development center”开发的,该公司
28、一直致力于基于个人电脑的计算机视觉应用的开发,可以实时追踪的视觉用户接口技术的普及为目标。初步拟定应用于human-computer interaction (hci,人机互动)、物体确定、面孔识别、表情识别,移动物体追踪、自主运动(ego-motion)、移动机器人等领域。因此,将opencv图像处理库提供给玩具制造商及机器人制造商等从事计算机视觉相关技术的各类企业/团体(英特尔公司)。opencv是intel公司开发的图像处理和计算机视觉函数库,它有以下特点: 1)开放c源码 2)基于intel处理器指令集开发的优化代码 3)统一的结构和功能定义 4)强大的图像和矩阵运算能力 5)方便灵活
29、的用户接口 6)同时支持ms-windows, linux平台 作为一个基本的计算机视觉、图像处理和模式识别的开源项目, opencv可以直接应用于很多领域,作为第二次开发的理想工具。速度更高的微处理器、廉价的数码相机以及usb 2等技术使高速视频捕获(video capture)成为可能,因此,基于普通个人电脑的实时计算机视觉将可以实现。而且opencv和matlab类似,却比matlab快n倍,并对intel处理器进行优化。2.3 opencv中的常用结构 在opencv函数库4的编程过程中,常常需要用到一些常用的结构,了解这些结构能够很好地用opencv函数库,下面分别对cvsize和i
30、plimage两个结构进行介绍。23.1 cvsize结构cvsize结构表示矩形尺寸的结构,结构体中分别定义了矩形的宽度和高度,具体定义如下:typedef struct cvsize int width;/*矩形宽度,单位为象素*/ int height;/*矩形高度,单位为象素*/ cvsize; 与cvsize结构相关的是其构造函数:inline cvsize cvsize( int width, int height );在定义cvsize结构变量时,可以按照如下方式定义:cvsize size=cvsize(400,300); /*定义宽为400象素,高为300象素的矩形*/cvs
31、ize结构用来设置矩形区域大小,在一些复杂高级的结构体常常能够看到它,如下面将要介绍的iplimage结构。23.2 iplimage结构由于opencv主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是iplimage结构。iplimage结构来源于intel的另外一个函数库image processing library (ipl),该函数库主要是针对图像处理。iplimage结构具体定义如下:typedef struct_ iplimage int nsize; /* iplimage大小*/ int id;/*版本(=0)*/ int nchannels;/*大多数op
32、encv函数支持1,2,3或4个通道*/ int alphachannel;/*被opencv忽略*/ int depth;/*像素的位深度,主要有以下支持格式: ipl depth 8u, ipl depthse 8s, iplee depth 16u,ipl_ depth-16s, iples depthee 32s,iplee depth 32f和ipl depth 64f*/ char colormodel4;/*被opencv忽略*/ char channelseq4;/*同上*/ int dataorder; /* 0一交叉存取颜色通道,1一分开的颜色道.只有cvcreatelma
33、ge可以创建交叉存取图像*/ int origin;/*图像原点位置:0表示顶一左结构,,1表示底一左结构*/ int align;/*图像行排列方式(4 or 8),在opencv被忽略,使用widthstep代替*/ int width;/*图像宽像素数*/ int height;/*图像高像素数*/ struct一p1roi *roi;/*图像感兴趣区域,当该值非空时,只对该区域进行处理*/ struct一limage *maskroi; /*在opencv中必须为null */ void *imageld;/*同上*/ structjpltileinfo/*tilelnfo; /*同上
34、*/ int imagesize;/*图像数据大小(在交叉存取格式下imagesize=image- height* image-widthstep ),单位字节*/ char *imagedata;/*指向排列的图像数据*/ int widthstep;/*排列的图像行大小,以字节为单位*/ int bordermode4;/*边际结束模式,在opencv被忽略*/ int borderconst4; /*同上*/ char *imagedataorigin; /*指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的*/ iplimage; iplimage结构体是
35、整个opencv函数库的基础,在定义该结构变量时需要用到函数cvcreatimage,变量定义方法如下:iplimage* src -cvcreateimage(cvsize(400,300), ipl depth 8u,3); 上句定义了一个iplimage指针变量src,图像的大小是400 x 300,图像颜色深度8位,3通道图像。下面就算法的流程进行讨论: 如流程图2-1所示,对每一帧图像,图像首先被转化为hsv颜色空间来描述,然后根据要被跟踪的目标的直方图模型求其色彩概率分布,目标的质心和大小通过camshift算法对色彩概率分布进行处理后被找到,虚线框为进行meanshift的核心部
36、分。当前的运动目标的位置和大小求得去调整下一帧的位置和大小,这样不停的重复达到对运动目标的跟踪。 图2-1基于opencv的自动跟踪算法流程图第3章 快速人脸检测viola提出了基于积分图像与adaboost训练的快速人脸检测方法5,其中利用积分图像计算矩形特征,再用adaboost方法训练这些矩形特征组成强分类器,由于可以在积分图像上快速的计算这些矩形特征从而使分类器的速度大大提高。此外,构造层叠分类器,首先简单的强分类器排除大多数非人脸窗口,减轻复杂分类器的负担,进而提高速度;另外,层叠分类器训练时下一层分类器的训练在上一层分类器划分的子空间中进行。viola的方法使在保留统计学习方法所具
37、有的鲁棒性情况下使人脸检测的速度大大提高。该方法的分类器基于简单的矩形特征(rectangle feature),区别于传统学习方法是基于象素的。如图3-1就是viola采用的4种矩形特征。图3-1viola使用的4种矩形特征 特征值就是大矩形内阴影部分的灰度累加减去白色部分的灰度累加。这当中每个小矩形都是相同大小的。对于2424的图像窗口,全部特征的数目超过180000个。通过引入积分图像,这些矩形特征可以在常数时间内快速计算。积分图像中对应每个点计算其积分图像值。在(x,y)的积分图像值就是在(x,y)左上角所有灰度的和,即: (3-1)其中是(x,y)点的积分图像值,是(x,y)的原始图
38、像灰度值。矩形特征就是矩形区域象素灰度累加的差,而通过积分图像,任何矩形的象素灰度累加可以通过4个点积分图像值的加减计算完成(如图3-2),所以矩形特征可以用积分图像在参数时间内快速计算。 a b124c d3 图3-2矩形d的像素灰度累加为4+1-(2+3)boosting算法是近几年中分类算法的发展中最重要的成果之一。boosting算法是一种现代统计方法,理论上可以用来改进任何学习算法的性能。schapire在pac学习框架中开发了第一个简单的boosting算法。boosting在很多的计算机学习理论文献中都有所提及,并越来越受到关注。adaboost是一种自适应的boosting算法
39、,主要用途是将若干个弱分类器整合为一个强分类器,其中弱分类器指的是那些性能比随机分类略好一点的分类器。viola通过adaboost学习的方法选择少量有效的矩形特征构造强分类器。对于2424的图像窗口有180000个矩形特征,现在的问题就是通过训练找到少量有效的特征构成一个有效的分类器。adaboost就是用于选择有效的特征、并训练分类器。adaboost通过组合弱分类器构成强分类器。所谓弱分类器,就是它不期望能很好的进行分类,只要达到大于50%的正确率就可以了(而这总是可以保证的)。在这里每个特征对应构造一个弱分类器。具体而言,特征jf对应的弱分类器如下: (3-2)其中,是在训练样本上最小
40、错误分类的阈值,是表示不等式的方向。无论如何,总是可以保证正确分类率大于50%。人脸检测viola的方法6的分类器的构造过程中的特征选取是自动进行的,在所有矩形特征中自动选取最有效分类的特征,不像基于特征的方法需要人为总结启发式规则。其次,其类似分阶段设计的层叠分类器构造时,是通过目标驱动自动构造的,不像一般的分阶段的分类器设计方法每个阶段(层次)的分类器都得人工设计。基于上面的两个优势,viola的方法对一般模式分类问题具有普遍意义,更接近于人类的学习与分类模式。viola通过实验表明,在700mhz pentium iii中该检测算法能够以0.067秒的平均速度处理一幅384*288的图像
41、。其检测效果如图3-3:图3-3人脸检测效果图第4章 人脸检测开发环境搭建视频采集与人脸实时检测系统主要包括两个方面:硬件的连接和软件环境的搭建。4.1硬件安装1摄像头:图4-1摄像头 ib-3535f制式:pal/ntsc 视频输出:1.0vp-p/75bnc 红外波长:850nm 红外距离:30m 2天敏vc4000卡:图4-2天敏vc4000卡-四路卡接口类型:pci,支持一机多卡,一卡四路,支持pal/ntsc,各通道同时工作互不干扰。支持overlay多路同时预览,cpu占用率极低。提供mpeg4压缩引擎,可对多路视频图像进行压缩。支持压缩流/预览流叠加,提供动态avi图像捕获。wi
42、ndows会检测到四次新发现硬件,利用硬件所带光盘,或到其主页去下载驱动程序,选择sdk3000(这是个问题,尚未解决)继续安装。3sdk2500卡:图4-3天敏sdk2500卡-单路卡pci总线,兼容windows即插即用(pnp),安装简易,示画面流畅不间断,每秒可达30(ntsc)帧、25(pal)帧,持ntsc和pal .secam制式,示分辨率可达720x576(pal),供动态avi图像捕获。windows自动检测,注意防止中断冲突,比较可靠的方法是拔掉所有非必要的卡,然后优先插入sdk2500卡,直到发生冲突(检查硬件资源)。4像头与电源:是有缘摄像头,通过同轴电缆与视频采集卡相
43、连即可。5安装demo程序,即可观察到视频采集结果。6持directshow的标准视频输入:程序也可使用其他支持directshow的视频采集设备7。4.2 directx sdk 开发包下载安装1.directshow是基于windows平台的流媒体处理开发包,它与directx一起发布。使用它可以在基于wdm驱动的采集卡上进行数据捕捉。2.下载directx9sdk,需要下载b版本的。这是directx的一个完整版本,一些教新的版本只有updating部分,不完整。3.双击安装到选定目录即可。4.3 opencv下载与安装1.opencv是intel开源计算机视觉库。它由一系列 c 函数和
44、少量 c+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。2.下载地址:3.双击安装opencv,将得到相关的include文件、lib文件和dll及例子等。4.4 microsoft visual c+环境配置1.为了利用directshow和opencv提供的功能,需要配置其include文件和lib文件的路径8(以下$dx_home$代表directx的安装目录;$opencv_home$代表opencv的安装目录)2.include文件路径:tools | options | directories | “include files”i.$dx_home$includeii.$
45、dx_home$samplesc+directshowbaseclassesiii.$opencv_home$cvincludeiv.$opencv_home$cxcoreincludev.$opencv_home$otherlibshighguic)lib文件路径:tools | options | directories | “library files”i.$dx_home$libii.$opencv_home$lib4.5 vc项目的建立1.建立一个基于对话框的mfc程序项目,设工程名为peoplecount2.创建类cshowpic,它是cstatic的一个子类,这个类用于显示位图。
46、i.insert | new class ii.class type = mfc class; base class = cstatic; name=cshowpiciii.检查文件showpic.cpp/h,看自动生成了哪些代码iv.参照我的文件修改showpic.cpp/h,注意其中添加部分和注释3.添加两个picture控件,用于显示视频采集结果和处理结果。将其type设为bitmap,styles中设置“center image”。i.右上角那个即是picture控件 ii.在新添加的控件上单击右键,选择属性iii.general栏下type=bitmap;ididc_video_in
47、putiv.styles栏下选中center imagev.拉大picture控件使其足够显示视频图像vi.对第二个可采用复制的方式,但需修改其ididc_video_result4.为这两个控件添加成员变量,类型为cshowpic。i.在控件上单击右键,选择classwizardii.切换到member variables页面,projectpeople,classnamecpeoplecountdlgiii.双击idc_video_input和idc_video_result,令categorycontrol,variable typecshowpic,自己起个名。比如m_inputvid
48、eownd、m_resultvideownd。注意在cpeoplecountdlg.h中添加#include “showpic.h”头文件iv.检查以下peoplecount.h中是否添加了刚才的两个成员变量5.创建arframegrabber类,它基于directshow来实现对视频的采集。方法是直接将arframegrabber.h和arframegrabber.cpp拷贝到你的工程目录下。然后将其添加到工程中(虽在目录下,但还未添加其信息):project | add to project | files,然后选择这两个文件即可。注意是否有新类添加到左侧列表中。这是directshow编
49、程的核心部分,以后要仔细分析。在peoplecountdlg.h的类声明中添加arframegrabber对象,用来采集图像i.arframegrabber m_framegrabber; /负责图像帧的采集ii.uint m_grabtimerid; /定时器idiii.记的要#include arframegrabber.h添加三个buttons,分别对应初始化、开始和停止(添加过程也很简单,最好能给id起个好名字)。1.m_framegrabber.init(3, true);/设置支持directshow的设备编号,从0开始2.m_framegrabber.setflippedimag
50、e( true ); /设置图像需要上下翻转iii.在开始对应的函数中启动定时器:m_grabtimerid=settimer(100,200,null );可自己查一下settimer函数的声明iv.在peoplecount.cpp中添加1.#include cv.h2.#include highgui.h3.static cvmemstorage* storage = 0;4.static cvhaarclassifiercascade* cascade = 0;5.const char* cascade_name = .datahaarcascade_frontalface_alt.xm
51、l;6.声明并定义void detect_and_draw( iplimage* img );v.在构造函数中添加1.m_grabtimerid = 0;2.cascade = (cvhaarclassifiercascade*)cvload( cascade_name, 0, 0, 0 );/ 调用分类函数/3.if( ! cascade )4.afxmessagebox( fail to load the harr data file!);/调用滤波器函数/5. return;6.storage = cvcreatememstorage( 0 );i)添加lib文件信息 i.project
52、 | settings | linkii.object/library modules = strmiids.lib strmbasd.lib strmbase.lib quartz.lib cxcore.lib cv.lib highgui.lib至此,已经完成了系统软硬件的安装,接下通过程序实现系统功能第5章 系统实现5.1系统组成该系统主要分为两个大模块:硬件部分和软件部分硬件部分包括:摄像头、视频采集卡、相应的数据连接线等。软件结构主要分为三大部分。第一部分是视频信息的获取,通过计算机来控制摄像头的拍摄和视频数据读取过程。第二部分是算法的核心,即通过运动信息提取、人脸检测和人脸检测的结
53、合,确定场景中人的数目、位置和姿态及其运动轨迹。第三部分是统计分析,结合视频分析结果和主观评价反馈,通过机器学习的方法,建立一个自动评估专家系统。除此之外,为了检验视频分析的准确性,还需要在显示部分实时显示出对人脸检测和跟踪的结果。5.2人脸检测的实现5.2.1 人脸检测人脸作为图像与视频中最重要的视觉对象(visual object)9之一,在计算机视觉、模式识别、多媒体技术研究中占有重要的地位。人脸的检测与检索是人脸信息处理及基于内容的检索研究中的一个焦点问题,是近年来研究十分活跃的一个方向,它在智能人机接口、基于内容的检索、数字视频处理、保安等领域有着极为广泛的应用价值。最初人脸研究主要
54、集中在人脸识别领域,而且早期的人脸识别算法都是在认为已经得到了一个正面人脸或者人脸很容易获得的前提下进行的。但是随着人脸应用范围的不断扩大和开发实际系统需求的不断提高,这种假设下的研究不再能满足需求。人脸检测开始作为独立的研究内容发展起来。目前,国内外的文献中所涉及的人脸检测算法已经有很多种,许多重要的国际会议和期刊都也都涉及到人脸检测问题研究论题。人脸检测开始广泛应用到全新人机界面、基于内容的检索、数字视频处理、视觉监测等许多领域。5.2.2 快速人脸检测中的主要函数1.haar滤波器调用10cascade = (cvhaarclassifiercascade*)cvload( cascade_name, 0, 0, 0 );if( ! cascade )afxmessagebox( fail to load the harr data file!);return;storage = cvcreatememstorage( 0 );通过这个函数调用opencv中的haar滤波器分类函数,实现对滤波器的调用。2.采集控制函数void cpeoplecountdlg:onbtninit() m_framegrabber.init( 0, true ); /设置支持directshow的设备编号,从0开始/m_framegrabber.setflippedimage( true )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度信息系统运维服务合同
- 2024年度联合研发合同:两个或多个研发方就共同研发项目达成的一致协议包括研发内容、分工、成果分配等
- 宜宾市长宁县事业单位考核招聘笔试真题2023
- 绍兴市本级卫生健康单位招聘应届医学类毕业生笔试真题2023
- 2024年度洁具环保生产协议
- 二零二四年度拆迁安置补偿合同
- 工程合同范本合同范本
- 二零二四年度人力资源服务合同(含招聘和培训)
- 2024版质量保证合同:泵站设备质量保证与售后服务
- 滁州全椒县招聘社区工作者司法协理员笔试真题2023
- 我是节电小能手课件
- Module 5 Unit 1教案 初中英语 外研版 八年级上册 (2022学年)
- 2022年泰安技师学院教师招聘笔试题库及答案解析
- 人教版九年级下册道德与法治全册教案完整版教学设计含教学反思
- 六年级上册数学课件-6.1 分数混合运算 |西师大版 (共15张PPT)
- 建筑工程勘察项目-技术标
- 道路运输企业职业安全健康管理工作台帐(全版通用)参考模板范本
- 大马大马告诉我
- TSG 81-2022 场(厂)内专用机动车辆安全技术规程
- 口腔组织病理学教学课件:牙源性肿瘤
- 通用模板-封条模板
评论
0/150
提交评论