运行环境:
.NET Framework 4 Client Profile
软件包清单(有简体中文版和繁体中文版):
Enroll.exe
Enroll.ini
EnrollService.dll
配置文件 Enroll.ini 内容:
; 登录设置 [LOGIN] SERVICE= USER= TIMEOUT=5000 ; 登记机设置 [DEVICE] IP= PORT=9922 CODEPAGE=65001 TEMPLATES=18 IDREADER=1 ; 员工工号 [STAFFID] LENGTH=18 MAXLENGTH=18 CASESENSITIVE=0 SILENTSUCCESS=1 STRANGER=1
配置文件 Enroll.ini 说明:
SERVICE | 服务器端提供的Web Services服务连接地址 |
USER | 用于自动保存最近的登录人员列表 |
TIMEOUT | 设置登录Web Services的超时等待时间,默认5000毫秒 |
IP | 用于自动保存最近连接的设备IP地址 |
PORT | 人脸通设备的命令接收端口,默认为9922 |
CODEPAGE | 设备的通信字符集编码,简体中文为936,繁体中文为950 |
TEMPLATES | 单个人员的模板采集数,由人脸通设备决定 |
IDREADER | 是否允许通过身份证读卡器自动输入信息。1:允许 0:不允许 |
LENGTH | 工号固定长度,如果长度不固定,其值设为0 |
MAXLENGTH | 工号长度不固定时,允许的最大长度 |
CASESENSITIVE | 工号字母是否区分大小写。1:区分大小写 0:不区分大小写 |
SILENTSUCCESS | 登记成功时不弹窗提示。1:不提示 0:提示 |
STRANGER | 是否允许陌生人登记。1:允许 0:不允许 |
说明:目前身份证读卡器只支持北京昌贸技术有限公司的CM008系列
供用户实现的C#动态库 EnrollService.dll 参考代码(用户需要自己实现 EnrollService 类的5个方法):
/* ---------------------------------------------------------- * 文件名称:EnrollService.cs * * 作者:秦建辉 * * QQ:36748897 * * 博客:http://www.firstsolver.com/wordpress/ * * 开发环境: * Visual Studio V2012 * .NET Framework 4 Client Profile * * 版本历史: * V1.0 2013年06月27日 * 供用户实现的人脸登记服务动态库参考代码 ------------------------------------------------------------ */ using Splash.Linq; using System; namespace Hanvon { /// <summary> /// 人员信息 /// </summary> public class EnrolledEmployee { /// <summary> /// 员工工号 /// </summary> public String EmployeeId { get; set; } /// <summary> /// 员工姓名 /// </summary> public String RealName { get; set; } // 显示名称 /// <summary> /// 员工昵称 /// </summary> public String NickName { get; set; } // 用于语音播报,如果为空,则播报姓名 /// <summary> /// 人脸模板数据 /// </summary> public String[] Templates { get; set; } // Base64编码 /// <summary> /// 人员照片 /// </summary> public String Photo { get; set; } // Base64编码 } /// <summary> /// 人脸采集模块网络服务接口 /// </summary> public class EnrollService { /// <summary> /// 构造函数 /// </summary> /// <param name="ServicesUrl">Web Services 服务连接地址</param> /// <param name="LoginTimeout">Web Services 连接超时时间</param> public EnrollService(String ServicesUrl, Int32 LoginTimeout) { // 完成Web Services接口调用初始化 } /// <summary> /// 操作员登录校验 /// </summary> /// <param name="UserName">采集人员账号</param> /// <param name="Password">采集人员密码</param> /// <param name="ErrorMessage">输出:错误信息提示</param> /// <returns>错误代码,0表示成功</returns> public Int32 Login(String UserName, String Password, out String ErrorMessage) { if (String.IsNullOrEmpty(UserName) || String.IsNullOrEmpty(Password)) { ErrorMessage = "用户名和密码不能为空!"; return -1; } else { // 密码限定为“123456” if (Password.Equals("123456")) { ErrorMessage = "登录成功!"; return 0; } else { ErrorMessage = "密码错误!"; return -2; } } } /// <summary> /// 操作员退出登录 /// </summary> /// <param name="ErrorMessage">输出:错误信息提示</param> /// <returns>错误代码,0表示成功</returns> public Int32 Logout(out String ErrorMessage) { ErrorMessage = "退出登录成功!"; return 0; } /// <summary> /// 获取员工姓名 /// </summary> /// <param name="EmployeeId">要查询的员工工号</param> /// <param name="RealName">输出:员工姓名,用于设备显示</param> /// <param name="NickName">输出:员工昵称,昵称用于语音播报,如果没有,则播报姓名</param> /// <param name="TemplateCount">输出:已采集的人脸模板数。如果大于0,则程序会提示此人已登记人脸,确认是否重新登记</param> /// <param name="ErrorMessage">输出:错误信息提示</param> /// <returns>错误代码,0表示成功</returns> public Int32 GetEmployeeName(String EmployeeId, out String RealName, out String NickName, out Int32 TemplateCount, out String ErrorMessage) { if (String.IsNullOrEmpty(EmployeeId)) { RealName = null; NickName = null; TemplateCount = 0; ErrorMessage = "员工工号错误!"; return -1; } else { RealName = "秦建辉"; NickName = "秦司令"; TemplateCount = 0; ErrorMessage = "操作成功!"; return 0; } } /// <summary> /// 存储人脸采集数据 /// </summary> /// <param name="Employee">要存储的人脸数据,包括工号、姓名、昵称、模板、照片</param> /// <param name="ErrorMessage">输出:错误信息提示</param> /// <returns>错误代码,0表示成功</returns> public Int32 SaveEnrolledEmployee(EnrolledEmployee Employee, out String ErrorMessage) { // 人脸数据存储目录 String SAVE_FOLDER = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Hanvon\\Enroll\\"; LINQToINI iniFile = new LINQToINI(); // 写入人员信息 iniFile.WriteProfileString("PERSON", "EmployeeId", Employee.EmployeeId); // 工号 iniFile.WriteProfileString("PERSON", "RealName", Employee.RealName); // 姓名 iniFile.WriteProfileString("PERSON", "NickName", Employee.NickName); // 昵称 iniFile.WriteProfileString("PERSON", "Photo", Employee.Photo); // 照片 // 写入模板 for (Int32 i = 0; i < Employee.Templates.Length; i++) { iniFile.WriteProfileString("TEMPLATES", i.ToString(), Employee.Templates[i]); } // 存储人脸数据 if (iniFile.Save(SAVE_FOLDER + Guid.NewGuid().ToString() + ".dat")) { ErrorMessage = "存储人脸登记数据成功!"; return 0; } else { ErrorMessage = "存储人脸登记数据失败!"; return -1; } } } }
软件界面: