基于人脸识别考勤系统的照片采集的研究与实现0_4

上传人:pu****.1 文档编号:431749371 上传时间:2024-02-15 格式:DOC 页数:4 大小:73KB
返回 下载 相关 举报
基于人脸识别考勤系统的照片采集的研究与实现0_4_第1页
第1页 / 共4页
基于人脸识别考勤系统的照片采集的研究与实现0_4_第2页
第2页 / 共4页
基于人脸识别考勤系统的照片采集的研究与实现0_4_第3页
第3页 / 共4页
基于人脸识别考勤系统的照片采集的研究与实现0_4_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《基于人脸识别考勤系统的照片采集的研究与实现0_4》由会员分享,可在线阅读,更多相关《基于人脸识别考勤系统的照片采集的研究与实现0_4(4页珍藏版)》请在金锄头文库上搜索。

1、基于人脸识别考勤系统的照片采集的研究与实现王卫锋1,2 李强3(1 华东师范大学计算机科学技术系,上海 200062)(2 新乡学院计算机系,河南 新乡 453000)(3 太原大学外语师范学院计算机系,山西 太原 030012)摘要:本文主要介绍人脸识别考勤系统中人脸照片的采集和显示过程,开发环境为Visual C+ 6.0,以Microsoft 的Video for Windows(VFW) 为核心,利用摄像头进行人脸照片的采集并通过接口程序保存到数据库。关键词:照片采集;人脸识别;考勤系统;捕捉一 写作背景基于人脸识别的考勤系统主要用于对公司员工的出勤统计,员工签到时只需要通过摄像头采集

2、到员工面部信息后,通过人脸识别算法与数据库中预先存入的员工人脸信息的特征值进行比较,识别成功后报出员工的姓名,则考勤成功。本文主要介绍的是考勤机后台管理程序中的人脸信息录入部分的设计,也就是通过摄像头进行员工面部信息的采集,每个员工若干张照片,需要保存到数据库中,同时需要通过一定的算法保存其对应的特征值。限于篇幅,本文就采集一张照片的保存与显示的关键步骤展开阐述,并给出在Visual C+ 6.0实现的必要代码。二 软件支持VFW(Video for Windows)是Microsoft 1992年推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW

3、给程序员提供.VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。现在用户不必专门安装VFW,当用户在安装Windows时,安装程序会自动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等。Visual C+ 6.0 在支持VFW方面提供有vfw32.lib、msacm32.lib、winmm.lib等类似的库。特别是它提供了功能强大、简单易行、类似于MCIWnd的窗口类AVICap。AVICap为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。AVICap支持实时的视频

4、流捕获和单帧捕获并提供对视频源的控制。它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时,它也可将数字视频捕获并保存到文件。在视频捕获之前需要创建一个捕获窗口,所有的捕获操作及其设置都以它为基础。用AVICap窗口类创建的窗口被称为“捕获窗口”。捕获窗口功能强大可以进行视频录像(将一视频流和音频流捕获到一个AVI文件)中或是画面截取。在该系统中主要用到画面截取功能。下面是截取画面时需要用到的几个设置操作:1. 动态地同视频采集设备连接或断开;2. 以Overlay或Preview模式对输入的视频流进行实时显示;a. 预览(Preview)模式:该模式把从捕获硬件传来的数据送

5、入系统内存然后使用图形设备介面(GDI)将视频帧显示在捕获窗口内。此种模式要占用一定的系统资源,一般的视频采集设备都是通过这种显示方式工作的。b. 叠加(Overlay)模式:该模式的视频显示不经过VGA卡,而是将VGA的输出信号与其自身的输出信号合并,形成组合信号显示在计算机的监视器上。在该模式下所捕捉的视频数据的显示不需要占用系统资源,显示效果好。3. 设置捕获速率;4. 显示控制视频源、视频格式、视频压缩的对话框;5. 将捕获的一个单帧图像保存为DIB格式的文件。三 实现原理采集照片时,捕获一帧图像在临时文件夹中保存为DIB格式的文件,然后通过文件类的读操作将位图转化为二进制的流数据并保

6、存数据流的长度,再调用数据库接口函数存入数据库,最后删除临时文件夹里的位图文件;显示时调用数据库访问接口函数从数据库取出照片的二进制数据流数据和数据的长度,再通过文件类的写操作在临时文件夹中生成位图文件,显示完后删除该文件。至于把图片显示到界面上,只需把临时文件夹里的位图文件通过绘图函数显示可以了。特征值的算法不在本文讨论之列。四 实现流程显示照片照片存在指定员工YN显示背景继续查看YN拍照并预览存入数据库满意否启动摄像头启动成功YNYN指定员工照相完成YN照相过程浏览照片过程五 关键程序代码(一) 捕捉照片1. 在头文件中定义摄像头相关的控制成员变量HWND m_hWndCap; /定义视频

7、捕捉窗口CAPDRIVERCAPS m_CapDriverCaps; /捕获驱动器的性能CAPSTATUS m_CapStatus;/捕获窗口的当前状态2. 启动摄像头/创建视频捕捉窗口m_hWndCap = capCreateCaptureWindow(_T(人脸录入), /捕捉窗口的名字WS_CHILD|WS_VISIBLE, /捕捉窗口的样式CAMERA_LEFT, CAMERA_TOP , /捕捉窗口的左上角的位置坐标CAMERA_WIDTH,CAMERA_HEIGHT,/捕捉窗口的宽度和高度m_hWnd,0); /捕捉窗口的父窗口(当前窗口)句柄和编号/将捕捉窗与默认摄像头连接,如果

8、连接成功则/获得捕获驱动的性能,放在结构变量m_CapDriverCaps中if(capDriverConnect(m_hWndCap,0)capDriverGetCaps(m_hWndCap,&m_CapDriverCaps,sizeof(CAPDRIVERCAPS);/如果摄像头支持叠加显示模式则启用叠加显示模式if(m_CapDriverCaps.fHasOverlay)capOverlay(m_hWndCap,TRUE);elsecapPreviewRate(m_hWndCap,66); /设置预览模式的显示速率capPreview(m_hWndCap,TRUE); /启用预览模式至此

9、,如果摄像头正常安装了驱动,就能正常工作了。3. 捕捉并预览照片界面上左边是捕捉窗口,右边留有和捕捉窗口同样大小的区域用于预览或显示捕捉到的照片。capGrabFrameNoStop(m_hWndCap);/捕捉照片且捕捉窗口画面不停止capFileSaveDIB(m_hWndCap, employee.bmp);/保存捕捉到的照片/获得照片句柄用于在界面显示捕捉到的照片m_hPhotoBmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),/取应用程序实例句柄employee.bmp, IMAGE_BITMAP,/照片的名称和照片的类型0,0, /指定照片

10、的宽和高,为零则使用由系统定义的图像默认大小LR_CREATEDIBSECTION|LR_LOADFROMFILE);/ LR_CREATEDIBSECTION:当图像类型为IMAGE_BITMAP时,使函数返回一个DIB位图,/而不是一个兼容的位图。LR_LOADFROMFILE:根据照片的路径和名称装载图像。Invalidate(FALSE); /重绘窗口显示照片为了在界面显示照片还需添加绘图函数OnPaint():/在界面添加picture控件,命名为IDC_STATIC_PICTURE,并指定图片控件CPaintDC dcPicture(GetDlgItem(IDC_STATIC_PI

11、CTURE); CRect rectPic;/定义矩形区域/指定显示在图片控件上GetDlgItem(IDC_STATIC_PICTURE)-GetClientRect(&rectPic);CDC memDC; /建立与显示设备兼容的内存设备场境memDC.CreateCompatibleDC(&dcPicture);memDC.SelectObject(m_hPhotoBmp); /将位图选入内存场境/调用缺省的窗口过程来为没有处理的窗口消息提供缺省的处理CWnd:DefWindowProc(WM_PAINT,(WPARAM)memDC.m_hDC,0);dcPicture.BitBlt(r

12、ectPic.left,rectPic.top,rectPic.Width(),rectPic.Height(),&memDC,0,0,SRCCOPY); /显示位图。前四个参数分别指定显示图片的左上角顶点的位置坐标,和图片的宽高,第五个参数表示源设备场景的地址,第六七两个参数表示显示图片的左上角顶点在源设备环境的矩形区域中的坐标,最后一个参数表示将源矩形图象直接复制到目标矩形上。4. 保存照片到数据库先把捕捉到的位图文件转化成二进制数据,然后通过接口函数保存到数据库中。对数据库的操作请参考DAO或ADO编程。CFile bmpFile; /定义文件类变量if(bmpFile.Open(emp

13、loyee.bmp,CFile:modeRead) /读模式打开照片文件 LONG nLength = bmpFile.GetLength(); /获得照片的文件长度/申请缓冲区保存二进制照片数据unsigned char * pData = new unsigned charnLength;/如果申请到空间就读数据到缓冲区,即得到二进制数据bmpFile.Read(pData,nLength); /读照片文件到缓冲区bmpFile.Close(); /关闭文件Employee.SavePicture(EmployeeID,&pData,nLength);/对数据库访问接口bmpFile.Re

14、move(employee.bmp); /删除临时文件夹里生成的位图文件delete pData; /释放内存中申请的缓冲区5. 断开摄像头capDriverDisconnect(m_hWndCap); /断开摄像头(二) 显示数据库中的照片前面已经实现照片的预览功能,现在只要从数据库取出照片数据,生成位图文件,取得位图的句柄显示问题就解决了。/通过数据库接口得到照片的文件长度(nLength)和二进制照片数据的地址pData。unsigned char * pData = NULL;/定义字符型指针变量employee.GetPicture(&pData,&nLength); /取照片数据/

15、如果取到则生成位图文件CFile outFile(employee.bmp,CFile:modeCreate|CFile:modeWrite);outFile.WriteHuge(LPSTR)pData,nLength);outFile.Close(); /取得生成图片的句柄六 总结Visual C+ 提供的AVICap窗口类为捕获数字视频流及其相关操作提供了很大的方便,极大增强了多媒体程序开发的能力,基本能满足我们的需求。只是由于位图文件本身的特点,程序运行时占用系统内存较多(软件约占9M内存,人脸录入过程软件最多约占19M),考虑到人脸录入模块也只是在系统最初人脸信息录入时使用一次,所以内存问题可以忽略不计。另外在程序设计过程中尤其要注意内存泄露问题,申请的内存空间一定要在用完后释放,否则可能会因为内存耗尽而导致死机。参考文献:1 四维科技,刘祎玮.Visual C+视频/音频开发实用工程案例精选M.北京:人民邮电出版社,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 工业自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号