毕业作品网站

 首 页 机械毕业设计 电子电气毕业设计 计算机毕业设计 土木工程毕业设计 视觉传达毕业设计 理工论文 文科论文 毕设资料 帮助中心 设计流程 
垫片
您现在所在的位置:首页 >>毕设资料 >> 文章内容
                 
垫片
   我们提供全套毕业设计和毕业论文服务,联系微信号:biyezuopinvvp QQ:1015083682   

基于WebCam的人脸检测技术开题报告

文章来源:www.biyezuopin.vip   发布者:毕业作品网站  

本科生毕业论文(设计)开题报告

论文题目: 基于WebCam的人脸检测技术                .


一、选题依据(背景与意义、国内外研究现状与发展趋势)

基于视频流的人脸分析是目前计算机模式识别和图形图像领域中的研究热点,其目的是在视频中自动检测、定位、跟踪和识别人脸。该技术能广泛应用于基于内容的图像检索、视频编码、生物认证、计算机安全、电子商务等领域。虽然已经有很多人脸检测和识别算法,但至今仍有大量的研究者在研究这项技术,这是因为人脸是一个动态的目标,在表达形式上有高度的可变性,导致该项技术仍然是机器视觉中的难点。

基于WebCam(Internet上的摄像头)的人脸检测和跟踪技术是将人脸分析技术与基于Internet的视频流相结合的一项技术,可以应用于在Internet上的身份认证和安全。目前已经有大量的生物认证技术(如指纹识别,虹膜识别,人脸识别)应用于身份认证,用于加强传统身份认证技术(如口令)。但是这些技术均只能用于本机操作,而不能用于Internet上身份的验证。例如,我系计算机教育与应用研究所开发出了基于B/S模式的考试系统,从理论上说可以实现在Internet上的考试。然而,由于不能解决在Internet上的身份认证,该系统目前只能适用于在局域网中进行在线测试。可以设想,如果有了基于WebCam的人脸检测和跟踪技术,我们就可以在此基础上实现考试过程中的身份认证和考试监控。

人脸分析的任务包括人脸检测,人脸识别和人脸跟踪。人脸检测是许多后期应用的预处理过程。有许多方法可以用于人脸检测,这些方法可以分成四大类:

(1)基于知识(Knowledge-based)的方法,是基于规则的方法,试图对人脸特征在直觉上建模。

(2)基于特征不变性(Feature invariant)的方法,是利用特征的不变性进行检测,如比例、方位、灰度级和肤色等)。

(3)模板匹配(Template matching)的方法,通过手工定义人脸的模板,或者是脸部特征,来与输入图像进行匹配。

(4)基于体视(Appearance-based)的方法,通过机器学习的方法找到人脸中的相关特征。通常,人脸跟踪系统采用单一的一种检测技术来识别和跟踪人脸。然而一种模态只适用于在某些特定条件下的跟踪,因此总会在无约束的自然场景下有失败的情况。

另外,对于基于WebCam的人脸检测和跟踪系统来说,由于WebCam所传输图像的质量和速度都不是很高,因此对人脸检测和跟踪算法提出了更高的健壮性和实时性要求。

二、研究目标与主要内容(含论文提纲)

基于WebCam(Internet上的摄像头)的人脸检测和跟踪技术本身可以分为如下几部分:

1.利用WebCam获取视频流(预处理);

2.人脸的检测(包括从背景中确定人脸的存在,以及验证检测到人脸是否是参加在线考试的人员);

3.人脸的跟踪(在在线考试的过程中实时监控考试对象)。

由于时间有限的缘故,在此次毕业设计中,本文要研究的内容和目标是“利用WebCam获取视频流”和“从获取的视频流帧中确定人脸的存在”这两部分。

论文提纲:

1人脸检测的意义,国内外的情况综述

2 基于肤色的人脸定位

2.1彩色空间,以及彩色空间的转换

2.2人脸肤色模型,二值化

2.3后处理

2.4人脸区域的定位

3视频流

3.1 视频工具包Video for Windows

3.2视频流采集的实现

3.2.1 AVICap主要功能

3.2.2 视频采集算法

3.2.2.1视频采集数据结构

3.2.2.2函数实现

3.2.2.3 视频流存储

3.3视频流的显示

4试验数据与展望

4.1试验数据

4.2展望

三、拟采取的研究方法、研究手段及技术路线、实验方案等

根据第二部分的内容,本文中要解决的问题如下:

1.如何从WebCam中得到视频流里的某一帧。

设想的解决途径是:利用Visual C++中提供的AVICap命令集来捕获视频流中的单帧图像。因为2.AVICap支持实时的视频流捕获和单帧捕获并提供视频源的控制。

实际操作思路:因为AVICap的主要功能是通过一个采集窗口(Capture Windows)来提供的, 而且,各功能函数的调用都需要采集窗口的句柄,AVIVCap的消息也是传递给采集窗口的,所以我们需要实现这样一个采集窗口(Capture Windows)。具体从三方面操作来实现:

(1)建立采集窗口:使用CapCreatCaptureWidows函数;

(2)连接一个采集设备(本论文中的采集设备是WebCam):使用CapDriverConnect函数;

(3)获取窗口状态(窗口的状态被定义在CAPSTATUS这个数据结构中,它包含了大量的有用信息,可以通过CapGetStatus函数得到CAPSTATUS的指针),从采集设备WebCam中得到视频帧。

得到视频帧的过程是通过调用程序自定义的回调函数来实现的。所谓回调函数,其作用就是向采集设备(WebCam)的驱动程序发出读写命令,从而实现程序和设备之间定时或不定时地通信,这里的通信可以是视频流回调函数定时地从USB摄像头取回一帧数据以便回放,也可以是其他回调函数的操作。因为这部分要解决的问题是从WebCam中得到视频流里的某一帧,所以,我们需要实现的回调函数是“单帧采集回调函数”。函数体如下:

LRESULT PASCAL FrameCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)

{

if(!ghWndMain) return FALSE;

wsprintf(gachBuffer,”Preview frame#%ld”,gdwFrameNum++);

// The wsprintf function formats and stores a series of characters and values in a buffer. Any arguments are converted and copied to the output buffer according to the corresponding format specification in the format string. The function appends a terminating null character to the characters it writes, but the return value does not include the terminating null character in its character count.(wsprintf函数是)

// int wsprintf(

LPTSTR lpOut,    // pointer to buffer for output

LPCTSTR lpFmt,   // pointer to format-control string

...              // optional arguments

);

SetWindowText(ghWndMain,(LPSTR)gachBuffer);

// The SetWindowText function changes the text of the specified window's title bar (if it has one). If the specified window is a control, the text of the control is changed. However, SetWindowText cannot change the text of a control in another application.

//BOOL SetWindowText(

HWND hWnd,         // handle to window or control

LPCTSTR lpString   // address of string

);

Return(LRESULT)TRUE;

}

//---------------------------------------------------------------------------------------

LRESULT FAR PASCAL VideoCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)

//参数lpVHdr指向视频流数据块的头信息

{

((CMainFrame*)AfxGetMainWnd())->m_dibinfo.bitmapheader.

biSizeImage=lpVHdr->dwBytesUsed;

//把视频流数据块的实际字节数赋值到以DIBINFO(该数据结构是用于存储一帧信息)定义的变量m_dibinfo的bitmapheader作用域的biSizeImage作用域,其中,bitmapheader是用BITMAPINFOHEADER(文件信息头)数据结构定义的变量,该变量的biSizeImage作用域是用来存放一帧图像的字节数。

memcpy(((CMainFrame*)AfxGetMainWnd())->m_dibinfo.buffer+

((CMainFrame*)AfxGetMainWnd())->m_dibinfo.VideoFormatSize,

lpVHdr->lpData,lpVHdr->dwBytesUsed);

//把视频流的图像信息拷贝到内存中;

// lpVHdr的lpData作用域是指向被锁定的数据缓冲的指针,在这里,这个被锁定的数据缓冲应该是视频流的图像信息;

// lpVHdr的dwBytesUsed作用域表示的是视频流数据块的实际字节数;

(((CMainFrame*)AfxGetMainWnd())->GetActiveView())->

InvalidateRect(NULL,FALSE);

//InvalidateRect函数是用来在指定窗口的更新区域添加一个矩形。其中,这个更新区域表示的是窗口用户的一部分,且是必须被重画的一部分)

return(LRESULT)TRUE;

}

//---------------------------------------------------------------------------------------

了解视频单帧图像在内存中的存储方式,从而确定合适的颜色模型。

Windows中位图文件有两种格式,一种是“设备相关”位图(Device Depend Bitmap,DDB),另一种是“设备无关”位图(Device Independ Bitmap,DIB)。因为,DDB位图没有保存位图的调色板,因此要使用DDB位图必须在同类设备中显示,且此设备在位平面或彩色上与原设备有同样的彩色安排,否则色彩就可能完全失真。所以,我在论文中选择DIB位图。DIB位图由三部分构成(如下),保存顺序依次是:文件信息头(BITMAPINFOHEADER)——>调色板(RGBQUAD)(真彩色图像没有调色板)——>图像数据(BITMAPDATA)。

(1)BITMAPINFOHEADER(文件信息头)结构定义为

typedef struct tagBITMAPINFOHEADER{  // bmih

DWORD   biSize;               //BITMAPINFOHEADER结构的大小;

LONG    biWidth; //位图的宽度,单位是像素;

LONG    biHeight; //位图的高度,单位是像素;

WORD    biPlanes; //位图显示设备位数,必须是1;

WORD    biBitCount;               //位图颜色位数,定义了位图每像素的位数;

DWORD    biCompression;               //压缩标志,BI_RGB类型为非压缩,BI_RLE4和BI_RLE8为行程编码压缩;

DWORD   biSizeImage;              //图像字节数,它可由文件头中的其他域计算出,需注意的是每排像素必须在32位或其倍数上结束,如果一排像素不到32位边界,则用“0”填充其余位;

LONG    biXPelsPerMeter; //图像x方向分辨率;

LONG    biYPelsPerMeter; //图像y方向分辨率;

DWORD   biClrUsed;              //图像颜色数,指图像用到的颜色数,如果该数为0,则用到的颜色数为2的biBitCount次方;如果不用置0,表示所有颜色都用到,如果位图被压缩,则必须置0;

DWORD   biClrImportant;              //图像重要颜色数,通常置为0,表示所有颜色都重要;

} BITMAPINFOHEADER;

(2)RGBQUAD(文件调色板)结构的定义为

typedef struct tagRGBQUAD { // rgbq

BYTE     rgbBlue; //颜色的蓝色分量;

BYTE     rgbGreen; //颜色的绿色分量;

BYTE    rgbRed;              //颜色的红色分量;

BYTE    rgbReserved;             //保留,为0

} RGBQUAD;

RGBQUAD数据结构是BMP所包含的颜色表,接在BITMAPINFOHEADER结构之后含有位图中用到的每种颜色的RGB信息。在位图中有多少种颜色,就有多少RGBQUAD数据结构项;biClrUsed值就是RGBQUAD元素的数目。

对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图像,图像数据就是实际的R、G、B值,一个像素是由3个字节24位组成,第1个字节(前8位)表示B,第2个字节(中间8位)表示G,第3个字节(后8位)表示R。

(3)BITMAPDATA(图像数据)

BMP文件中位图化的图像数据是以连续行的形式存储的,但图像是以相反的顺序存储,即文件读出的第一行是图像的最后一行。图像数据是从左下角到右上角顺序排列的。(biWidth(位图的宽度)*biBitCount(位图颜色位数)得到的是每一行图像占用的位数,所以在进行色彩空间的转换时,对于存放图像的内存缓冲的读取就可以以这个位数的长度来进行。)

设想的解决途径是:根据DIB位图格式,定义存储视频帧的数据结构,了解AVICap中用于捕获视频流单帧图像的这些函数的输入输出。

实际操作思路:

1)根据DIB位图格式,定义如下数据结构DIBINFO用来存放一帧视频帧。

typedef struct{

int   headsize;    //bitmap headsize

char buffer[32000]; //bitmap head and data

BITMAPINFOHEADER              bitmapheader; //文件信息头结构

DWORD VideoFormatSize; //表示视频格式的结构尺寸

}DIBINFO,*PDIBINFO;

2)还需要一个表示视频数据块的数据结构VIDEOHDR,它的定义如下:

typedef struct videohdr_tag{

LPBYTE  lpData;                             //pointer to locked data buffer(指向被锁定的数据缓冲的指针)

DWORD  dwBufferLength;       //Length of data buffer(数据缓冲的大小)

DWORD  dwBytesUsed;         //Bytes actually used(实际使用的字节数)

DWORD  dwTimeCaptured;      //Milliseconds from start of srteam(视频流开始的时间,以毫秒为单位)

DWORD  dwUser; //for client’s use(用户使用的作用域)

DWORD  dwFlags; //assorted flags (see defines)

DWORD  dwReserved[4]; //reserved for driver(为设备保留的作用域)

} VIDEOHDR,NEAR * PVIDEOHDR,FAR * LPWIDEOHDR;

在解决第2个问题的基础上,确定人脸检测算法。设想的解决途径待定,但在本文第三部分,先给出了一种拟解决的人脸检测算法。

因为人脸的肤色信息是人脸中最大块,最集中的特征,所以我们首先想到的就是通过人脸的肤色信息,初步把人脸从背景中区分出来。“经过统计证明,不同人种,不同环境下的肤色区别主要受亮度影响,受色度影响较小(《安全监控中的一种快速人连定位算法》)”,所以检测视频帧中某一像素是否表示人脸像素,可以通过“阈值处理(阈值处理就是对于输入图像的各像素灰度值的某定值(称为阈值,threshold)范围内时,赋予对应输出图像的像素为白色或黑色。)”的方法对该像素的色度值进行判断,然后把符合“阈值处理”公式的像素标识出来,从而得到人脸的大致位置。但是,当我们从WebCam得到一帧视频帧时,视频帧中像素使用RGB色彩空间表示的,而“阈值处理”方法中的公式则是针对YCrCb色彩空间内的三个分量而言的,所以我们需要先转换色彩空间。(YCrCb色彩空间(即YUV),其中的Y分量是表示像素的亮度,Cr分量表示红色分量,Cb表示蓝色分量,通常把Cr和Cb称为色度,其中,决定了色调,而代表颜色的饱和度。因此,当把RGB彩色空间转换成YCrCb色彩空间时,因为人眼对于亮度的敏感程度大于对于色度的敏感程度,所以可以让相临的像素使用同一个色度值,而凡是符合“阈值处理”公式的像素就是我们需要的肤色像素。)

RGB色彩空间到YUV色彩空间的转换方程:

Y=0.299R+0.587G+0.114B

V(Cr)=R-Y=-0.299R-0.587G+0.886B

U(Cb)=B-Y=0.701R-0.587G-0.114B

YCrCb 色彩空间到RGB色彩空间的转换方程:

R' = 1.164 (Y-16) + 1.596(Cr -128)

G' = 1.164 (Y-16) - 0.813 (Cr -128) - 0.392(Cb-128)

B' = 1.164 (Y-16) + 1.596 (Cr-128)

转换好色彩空间后使用“阈值”方法来判断肤色像素。

“阈值处理”方法的判断公式:

公式一:

对于图像中每个像素(i,j)满足M(i,j)=

则将图像转变成一个二值图像,其中白色区域就是肤色区域(《安全监控中的一种快速人脸定位算法》)。

公式二:

如果一个像素在YCrCb色彩空间的Cr(V),Cb(U)分量满足如下两个不等式组中的任意一个,那么就把这个像素识别为脸部肤色。(摘自《Detection and Tracking of Faces in Real-Time Environments》)

不等式组一:0.2611tan-10.3111 且 4378

不等式组二:0.25tan-10.3611 且070

得到视频帧中的肤色像素后,在通过人脸肤色的建模公式得到人脸的大致位置。

公式三(人脸肤色建模(色彩建模)公式):

     且      

其中:=114.38;=160.02;=1.60;=2.41;a=25.39;b=14.03;=2.53

对肤色像素的膨胀、腐蚀操作

膨胀(dilation)是指某像素的邻域内只要有一个像素是白像素,则该像素就由黑变白,其他保持不变;

腐蚀(erosion)是指某像素的邻域内只要有一个像素是黑像素,则该像素就由白变黑,其他保持不变;

从图形学的角度来理解,一个像素的邻域范围内最多可以有8个像素与之相邻,所以我们在确定膨胀、腐蚀操作中的邻域范围时,可以有8连通,4连通,左右连通或上下连通,这里,我们选择4连通。也就是说,膨胀、腐蚀操作中某个像素的邻域范围,是与该像素相邻的上下、左右四个像素。

去掉一些离散的非人脸区域

递归统计图像中出现连续白色像素的区域内这些白色像素点的个数,然后用一个常量AREAPIXEL来界定白色像素点的个数,凡是个数小于AREAPIXEL的连续区域都被判定为非人脸区域,并将这些区域内的像素置为黑像素。

大致定位人脸区域

设想的思路:通过扫描图像来检测出人脸的边缘。根据图像的存储原理,首先,依次从下往上进行扫描,出现白色像素的第一行就是人脸的下边界,记该行为y1。确定了下边界以后,再往上扫描,一旦出现全为黑色像素的一行,就说明这行扫描线的前面一行是人脸上边界,记前面一行为y2。同理,再依次从左往右进行扫描,记下人脸的左右边界为x1,x2。由此得到的坐标(x1,y1),(x2,y1),(x1,y2),(x2,y2)所确定的矩形即为人脸区域。

四、中外文参考文献目录(作者、书名论文题目、出版社或刊号、出版年月或出版期号)

[1]     Thomas Fromherz, Peter Stucki, Martin Bichsel. A Survey of Face Recognition. MML Technical Report, No 97.01, Dept. of Computer Science, University of Zurich, 1997.

[2]      R.C.K Hua, L.C. De Silva, P. Vadakkepat. Detection and Tracking of Faces in Real-Time Environments. International Workshop on Recognition, Analysis, and Tracking of Faces and Gestures in Real-Time Systems,Sep. 26 - 27, 1999, p.96

[3]      Ming-Hsuan Yang, David J. Kriegman, Narendra Ahuja. Detecting Faces in Images: A Survey. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2002,VOL. 24, NO. 1

[4]      Do-Joon Jung, Chang-Woo Lee, Yeon-Chul Lee, Sang-Yong Bak, Jong-Bae Kim, Hyun Kang, Hang-Joon Kim. PCA-Base Real-Time Face Detection and Tracking. International Technical Conference on Circuits/Systems, Computers and Communications (ITC-CSCC'02), Jul, Phuket, Thailand, Jul. 16-19, 2002, Vol. 1, p.615-618

[5]      James L. Crowley, Francois Berard. Multi-Modal Tracking of Faces for Video Communications. Proceedings of the 1997 Conference on Computer Vision and Pattern Recognition (CVPR '97), 1997, p.640

[6]      Vladimir Vezhnevets, Vassili Sazonov, Alla Andreeva. A Survey on Pixel-Based Skin Color Detection Techniques. Graphics,Media Laboratory.

[7]       Rein-Lien Hsu, Mohamed Abdel-Mottaleb, Anil K. Jain. Face Detection in Color Images. IEEE Trans. Pattern Analysis and Machine Intelligence, May 2002, vol. 24, no. 5, p. 696-706

[8]  阮鹏,赵明生,安全监控中的一种快速人脸定位算法,清华大学电子工程系网络与人机语音通信研究所,2003

[9]  胡晓军,邓波,高宏伟等《Visual C++高级开发范例解析》,电子工业出版社,2002

[10] 徐慧,《Visual C++数字图像实用工程案例精选》,人民邮电出版社,2004

五、研究的整体方案与工作进度安排(内容、步骤、时间)

1.2003年12月底——2004年2月初:熟悉设计课题,构建环境,查找资料,研究和阅读资料,翻译相关的外文资料和撰写阅读综述。

2.2004年2月中旬:在完成外文翻译和阅读综述的基础上,撰写开题报告。

3.2004年1月中旬——3月初:学习数字图象处理技术和基本的模式识别技术,深入阅读一篇文献,研究其具体的实现细节。

4.2004年3月初——3月底:制定原型系统实现方案,并根据方案进行一次Seminar。

5.2004年3月底——5月初:开发系统,在4月初接受学院的中期检查。

6.2004年5月初——5月底:撰写论文,同时作一次完整的Seminar。

7.2004年6月初:修改论文,参加论文答辩。

六、研究的预期目标及主要特点及创新点

预期目标:利用WebCam获取视频流,从获取的视频流帧中确定人脸的存在。

创新点:自定义人脸肤色建模公式和人脸定位公式。

  全套毕业设计论文现成成品资料请咨询微信号:biyezuopinvvp QQ:1015083682     返回首页 如转载请注明来源于www.biyezuopin.vip  

                 

打印本页 | 关闭窗口
本类最新文章
手部康复指板屈伸按摩装置的机构设 智能电表控制电路设计 论文指导记 家用光伏发电系统逆变电源设计 开
家用光伏发电系统逆变电源设计 任 家用光伏发电系统逆变电源设计 选 钢筋调直机机械结构设计 开题报告
| 关于我们 | 友情链接 | 毕业设计招聘 |

Email:biyeshejiba@163.com 微信号:biyezuopinvvp QQ:1015083682  
本站毕业设计毕业论文资料均属原创者所有,仅供学习交流之用,请勿转载并做其他非法用途.如有侵犯您的版权有损您的利益,请联系我们会立即改正或删除有关内容!