人脸识别门禁系统文档格式.docx

上传人:聆听****声音 文档编号:3633904 上传时间:2023-05-02 格式:DOCX 页数:4 大小:15.03KB
下载 相关 举报
人脸识别门禁系统文档格式.docx_第1页
第1页 / 共4页
人脸识别门禁系统文档格式.docx_第2页
第2页 / 共4页
人脸识别门禁系统文档格式.docx_第3页
第3页 / 共4页
人脸识别门禁系统文档格式.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

人脸识别门禁系统文档格式.docx

《人脸识别门禁系统文档格式.docx》由会员分享,可在线阅读,更多相关《人脸识别门禁系统文档格式.docx(4页珍藏版)》请在冰点文库上搜索。

人脸识别门禁系统文档格式.docx

DataSnap;

文件传输;

文件流;

多线程;

线程同步。

一、引言

为了确保经过安全培训的工人才能进入施工现场,对进入现场施工的工人进行准确的用工统计,传统的门禁系统都是基于IC刷卡来实现的,存在着不少的弊端,比如IC卡易损坏和替打卡,一张卡刷进多个人。

如今芯片和摄像头的发展特别是AI技术的出现让人脸识别技术得到很大的提高和普及,现的人脸识别设备大概500毫秒内完成跟踪识别对比,通过红处技术和算法的提升实现了人体识别,可以有效避免用图像冒充人脸,完全能满足使用。

本项目选用的人脸识别设备是宇泛智能科技提供的产品,这个产品把硬件和算法集成在一起可以离线使用,只要通过POST端口调用就能实现对设备的控制。

原有門禁系统由于使用IC卡刷卡经常出现使用别人的卡进入工地以及一张卡多次刷卡。

使用人脸识别可以有效避免以上的两个问题,授权过的工人经过闸机,闸机上的人脸识别设备跟踪拍照和特针库对比,对比通过给出开关信号给闸机。

单机软件已成过去现在为了能实现协同管理都要求多用户管理,管理客户端与服务端进行数据连接实现对人员管理,服务端除了与管理客户端提供数据服务还根据管理客户端提交的设备通信指令对人脸识别设备进行控制,人脸识别设备完成人员管理读取记录。

二、系统设计与功能的实现

系统用C++builder开发,采用C/S模式,数据库采用MicrosoftSQLServer2008,服务端和客户端之前的数据链接用DataSnap技术来实现。

本系统主要由三大部分组成。

第一部分是服务端,服务端提供数据存储和为客户端及门禁端提供数据服务以及执行指令对人脸识别设备管理设置,为了确保系统能稳定运行且开机就能启动采用服务程序模式。

服务端含有服务数据模块ServerDSServer和多个功能模块组成,服务数据模块为客户端和门禁端提供数据接口,本系统采用DataSnap技术服务端用到的控件为ADOConnection,用ADOQuery连接到MSSQL数据库,DSServer,dsTransport,DataSetProvider控件客户端提供数据接口。

功能模块采用多线程模式,建立专用线程对功能模块监控,当功能模块无反应进入假死就删除线程再重新建立

线程,人脸识别模块从数据库读取要执行的命令并且发送指令到人脸识别设备和读取人脸识别设备的刷卡记录保存到数据库用于客户端出勤查询。

第二部分是客户端包含有数据模块用SQLConnection,DSCon,ClientDataSet控件通过IP和端口连接服务端的数据模块获得数据库数据。

客户端主要用于对人员的管理与维护,部门的添加管理,人员的添加管理及人脸识别设备的管理,及考勤记录查询导出考勤等。

第三部分是门禁端,也是用数据模块SQLConnection,DSCon,ClientDataSet控件连接到服务端,门禁端硬件主要是由主机和人脸识别硬件组成,使用宇泛智能科技的圆柱人脸识别离线设备安装在闸机上,识别通过后给闸机开闸信息,同时门禁客户端通过232取得识别通过人员的ID,显示出人员的相关信息和照

片,每一个设备由一个线程去控制在显示人员信息时会存在线程冲突的事件,为了能够解决冲突问题使用了临界区对象TCriticalSection*pSection,当要显示人员信息时执行Enter锁定,结束后执行Leave释放。

本系统主要难点为文件传输,系统中很多地方要用到文件转输,从客户端传输文件到服务端,比如客户端上传个人信息时要上传个人相片就要用到上传文件,门禁端刷脸记录里的刷脸照片要上传到服务端保存为刷卡记录也是要用到文件上传,打开个人信息时要从服务端下载个人信息中的相片要用到文件下载。

DataSnap技信用于三层数据交换非常方便但没有可直接使用的文件传输功能的控件。

传统文件传输可用windows文件共享保存文件到局域网上电脑,如果网络环改变就无法保存。

如果使用FTP上传要搭设FTP服务增加成本让系统记置更麻烦,如果可以直接使用DataSnap技信实现文件传输就非常方便。

SQLConnection连接到服务端成功后用Saveconnectionparameters可以保存连接服务端TDSServerModulelClient的工程文件,工程文件里自动生成服务端ServerDSServer里的函数调用接口包含服务端的函数名返回值类型及所传递的参数类型。

客户端通过调用这些函数可以在服务端上执行指令从返回值得到结果,上传文件时把文件流和保存目录及文件名做为函数的参数来调用,服务端接收成功返回1失败返回0,下载文件时要下载的文件目录和文件名为函数的参数调用返回为文件流实现文件下载,具体实现如下。

上传文件客户端建一int型函数ClientUpload(TMemoryStream*;

filestream,Stringfilename,Stringfilesize),ClientUpload为上传函数名TMemoryStream*;

filestream为要上传文件的文件流,filename为要保存在服务的文件目录及文件名,filesize为要上传文件的大小用于上传文件的完整性验证,函数内容如下TDSServerModule1Client*clienttreamup=newTDSServerModule1Client(this->

SQLConnection1->

DBXConnection);

intc=clienttreamup->

SDUpLoad(filestream,filepath,sdfilename,filesize);

returnc;

发送文件时新建先取得要发送文件的大小给参数filesize,要保存在服务端的文件名给参数filename,新建一个文件流;

TMemoryStream*sendfiletream=newTMemoryStream()用sendfiletream>

LoadFromFile

(ldfilename)把要发送的文件写进文件流,调用ClientUpload函数时新建一个DBXConnection连接到服务端,并且调用服务端ServerDSServer里的SDUpLoad函数发送文件流。

在服务端ServerDSServer里建一int型函数SDUpLoad(TMemoryStream;

;

*filestream,Stringfilename,String;

filesize),这个函数共有3个参数,filestream为内存型的文件流,

filename是上传上来的文件保存目录及文件名,filesize是上传的文件的大小用于验证文件是否完传输完整。

函数里定义一个文件型指针TFileStream*;

;

refelestream,并且新建一个文件流用于接收内存流来的文件new;

TFileStream(filename,Classes:

fmCreate);

新建文件流之前确保目录是存在的。

定义unsignedcharBuffer[102400];

缓冲区块用于存储接收到使用文件流,intBufferSize=102400;

定义102400的整型,定义ReadCount整型数用于保存未读剩余块数,循环执行ReadCount=filestream->

Read(Buffer,BufferSize);

把读的文件流块保存在Buffer中,执行refelestream->

Write(Buffer,ReadCount);

将读取到的文件块写入到refelestream文件流,直至ReadCount为0文件流接收完成,执行refelestream->

Size取得保存文件的大小与filesize比较如果一样说明接收到文件与客户端文件完全一样,结束后删除文件流refelestream和内存流filestream指针,接收成功返回1接收失败返回0,实现了文件的上传功能。

下载文件刚好相反是从服务端读取文件,调用函数可以返回文件流,客户端建一返回型为文件流型函数用以接收来自服务端的文件流;

TStream*fastcallTClientForm:

ClentDownload(Stringfilename)要下载的文件为为参数函数返回值类型为文件流,函数内容

如下TDSServerModule1Client*client=newTDSServerModule1Clien(t

this->

conClient-

>

DBXConnection);

TStream*c=client->

SDDownload(filename);

建立和服務端的连

接并调用服务端函数并返回内存文件流。

在服务端ServerDSServer里建一个TStream;

*;

fastcallTDSServerModule1:

SDDownload(Stringfilename)函数,filename为要从服务端

取得的文件,函数执行如下,先判断文件是否存在如果所请求下载的文件存在,新建内存型文件流TMemoryStream;

*filestream=newTMemoryStream();

载入文件流filestream->

LoadFromFile(filename);

并返回文件流给客户端。

下载文件时定义unsignedcharBuffer[102400];

intBufferSize=102400;

TStream*filetream;

=;

new;

TFileStream(savefile,Classes:

新建一个文件流用于保存文件,TStream*memorytream=newTMemoryStream();

新建一个内存流用于接收从服务端接收到的文件流,执行memorytream=ClentDownload(filename);

得到服务端的文件流,循环执行以下指令直至接收到所有文件流ReadCount=memorytream->

Read(Buffer,;

BufferSize);

;

filetream->

Write

(Buffer,ReadCount);

ReadCount为0已读取所有文件块。

保存文件流到指定的文件,删除文件流和内存流,把文件从服务端下载到客户端本地。

三、结束语

经过之前编写的几个系统积累的经验及参考各种文献,完成了整个系统的编写,加上人脸识别设备成熟稳定,这套系统的功能完全能达到项目施工人力资源管理的使用要求,只有授权后的人员才能进入施工现场而且杜绝代打卡现象,及时查看每个部门在现场的人数,调整施工人员的部署。

在实际生产中及时统计用工情况提高了劳动力的使作效率,有效杜绝管理漏洞。

在开发过程中特别是解决了基于DataSnap技术实现在网络文件传输,实际使用过程中稳定高效方便,大量使用了文件流对其它使用到和文件流有关图像处理更加容易实现。

参考文献

[1]席卫文,张春晓,李光明等C++Builder6程序设计与实例北京冶金工业出版社;

2003.

[2]蒙祖强龚涛等C++Builder程序员成长攻略中国水利水电出版社2006.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2