获取门禁记录方式-实时获取

Posted 摧残一生 涅槃重生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取门禁记录方式-实时获取相关的知识,希望对你有一定的参考价值。

实时获取

开启门禁布防,每次门禁有记录产生都会主动发送信息,其中布防的方式有两种,一种是布防后只能开启一个监听,该监听海康的4200软件也在使用,因此建议在使用期间不要开启4200;另一种监听能开启多个,不过感觉这个不靠谱,建议用第一个,毕竟4200都在用。

注意:使用实时获取时,人员编号不要有字母,例如“001”是可以的,但是“ry001”不行,因为在回调函数中只能获取到dwEmployeeNo变量而不能获取byte数组的变量信息,例如编号是“ry001”时,dwEmployeeNo为空。注意!注意!注意!

流程
  1. NET_DVR_Init(初始化)

  2. NET_DVR_SetDVRMessageCallBack_V50(设置报警回调函数)

    1. 引用方法
    [DllImport(@"..\\..\\runtime\\hk\\HCNetSDK.dll")]
    public static extern bool NET_DVR_SetDVRMessageCallBack_V50(int iIndex, MSGCallBack fMessageCallBack, IntPtr pUser);
    
    1. 参数说明

      参数 说明
      iIndex 默认为1
      fMessageCallBack CHCNetSDK.MSGCallBack的回调函数
      pUser IntPtr.Zero
      返回值 true:成功;false:失败
    2. 代码举例

      CHCNetSDK.MSGCallBack m_falarmData一定不能为局部变量

      //设置报警回调函数,m_falarmData不能为局部变量,因为一旦设置为局部变量,回调函数则无法调用
      m_falarmData = new CHCNetSDK.MSGCallBack(MsgCallback);
      if (!CHCNetSDK.NET_DVR_SetDVRMessageCallBack_V50(1, m_falarmData, IntPtr.Zero))
      
          _logerror.Error("回调函数初始化失败");
      
      

      MsgCallback类会在“步骤6”中体现

  3. NET_DVR_Login_V40(登录获得UserId)

  4. NET_DVR_SetupAlarmChan_V41(设置布防)

    目的是布防,并且获得布防句柄,alarmHandle

    1. 引用方法
    [DllImport(@"..\\..\\runtime\\hk\\HCNetSDK.dll")]
    public static extern int NET_DVR_SetupAlarmChan_V41(int lUserID, ref NET_DVR_SETUPALARM_PARAM lpSetupParam);
    
    1. 参数说明

      参数 说明
      lUserID 登录句柄
      lpSetupParam 声明即可,一般不用赋值,如果赋值请参看海康SDK说明
      返回值 布防句柄,后期撤防时需要该句柄进行撤防
    2. 代码举例

      // 设置布防参数
      CHCNetSDK.NET_DVR_SETUPALARM_PARAM struSetupAlarmParam = new CHCNetSDK.NET_DVR_SETUPALARM_PARAM();
      struSetupAlarmParam.dwSize = (uint)Marshal.SizeOf(struSetupAlarmParam);
      //布防优先级 0最高,1次之,我自己设置的是1
      struSetupAlarmParam.byLevel = 1;
      // 上传报警信息类型,只要设备不太老建议使用1,因为旧版本的回调函数是全局的,如果多类设备布防时会有问题
      struSetupAlarmParam.byAlarmInfoType = 1;
      // 布防类型:0-客户端布防,1-实时布防,和4200抢占该状态
      struSetupAlarmParam.byDeployType = (byte)0;
      // 布防
      int alarmHandle = CHCNetSDK.NET_DVR_SetupAlarmChan_V41(userId, ref struSetupAlarmParam);
      
  5. 门禁产生记录(有人刷脸/指纹)

    人为刷一次已经布防的门禁,让他产生记录

  6. 进入回调函数,通过判断lCommand为CHCNetSDK.COMM_ALARM_ACS时,开始解析门禁记录

    产生记录后会触发MsgCallback方法

    private void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
    

    参数说明

    参数 说明
    lCommand 命令
    pAlarmer 报警设备信息
    pAlarmInfo 报警记录信息

    代码举例

    public static readonly object _mj = new object();
    private void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
    
        switch (lCommand)
        
            case CHCNetSDK.COMM_ALARM_ACS:
                //进入门禁触发该方法
                lock (_mj)
                
                    ProcessCommAlarmACS(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
                
                System.GC.Collect();
                break;
            // 报警主机触发该方法    
            case CHCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报警上传
                break;
            default:
                break;
        
    
    

    ProcessCommAlarmACS方法

    private void ProcessCommAlarmACS(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
    
        try
        
            // 登录句柄
            int userId = pAlarmer.lUserID;
            // 门禁记录保存的entity,可自行设置
            AcessLogEntity acessLogEntity = new AcessLogEntity();
            // 将pAlarmInfo转换为NET_DVR_ACS_ALARM_INFO,门禁记录的struct
            CHCNetSDK.NET_DVR_ACS_ALARM_INFO struAcsAlarmInfo = (CHCNetSDK.NET_DVR_ACS_ALARM_INFO)Marshal.PtrToStructure(pAlarmInfo,
                typeof(CHCNetSDK.NET_DVR_ACS_ALARM_INFO));
            // 参见主动获取中的“AcessLogEntity.GetMinorType”
            if (AcessLogEntity.GetMinorType(struAcsAlarmInfo.dwMinor).Length < 1)
            
                return;
            
            char[] csTmp = new char[256];
    		// 获得门禁记录时间
            acessLogEntity.AccessTime = String.Format("0,4-1:D2-2 3:D2:4:D2:5:D2", 
                                                      struAcsAlarmInfo.struTime.dwYear,
                                                      struAcsAlarmInfo.struTime.dwMonth,
                                                      struAcsAlarmInfo.struTime.dwDay,
                                                      struAcsAlarmInfo.struTime.dwHour,
                                                      struAcsAlarmInfo.struTime.dwMinute,
                                                      struAcsAlarmInfo.struTime.dwSecond);
    		// 获得人员编号,这里的类型是uint,人员管理中的人员编号一定要设置为整形,不能带字母
            uint pin = struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo;
            acessLogEntity.Name = Person[pin].Name;
            acessLogEntity.Verify = AcessLogEntity.GetMinorType(struAcsAlarmInfo.dwMinor);
            acessLogEntity.Pin = String.Format("0", pin);
            // 后续还有其他逻辑,因和实时获取记录无关,因此删除
        
        catch (Exception ex)
        
            _logerror.Error("门禁报错", ex);
        
    
    
    
  7. NET_DVR_CloseAlarmChan_V30(撤防)

    1. 引用方法
    [DllImport(@"..\\..\\runtime\\hk\\HCNetSDK.dll")]
    public static extern int NET_DVR_Login_V40(ref NET_DVR_USER_LOGIN_INFO pLoginInfo, ref NET_DVR_DEVICEINFO_V40 lpDeviceInfo);
    
    1. 参数说明

      参数 说明
      pLoginInfo 登录时需要的信息:
      sDeviceAddress:设备地址
      wPort:端口号
      sUserName:用户名
      sPassword:密码
      lpDeviceInfo 声明即可,一般不用赋值,如果赋值请参看海康SDK说明
      返回值 登录句柄,当返回值不等于-1时即为登录成功,该句柄后期会一直使用
    2. 代码举例

  8. NET_DVR_Logout(注销)

  9. NET_DVR_Cleanup(结束)

面部识别门禁

人脸识别门禁系统逻辑五大层次架构
1.采集层
人脸识别门禁系统需能为系统获取开展人脸识别分析应用所需基础图像数据的各种采集方式,主要包括以下几种:
数据库信息批量采集
可以从第三方人脸识别门禁系统批量获得建库所需人员信息及相片数据,用以建立人脸识别门禁系统自己的人员数据库。
2.数据层
包括相片库,基础模板库和索引库三种数据库。
相片库:
人脸识别门禁系统
外来人员库,预约来访人员库,黑名单人员库信息及相片。
基础模板库:
升与相片库相对应的人像识别比对基础模板库。
索引库:
索引库是本平台的重要核心,是应用和特征库之间的重要桥梁,索引库在各相片库及基础特征库之间按人员信息建立索引,可以为各警种的人像智能识别比对应用提供数据共享;此外还可根据不同警种业务需求建立相应的业务特征库索引,缩小识别比对范围,提高识别比对效率。
3.支撑层

人脸建模
该模块负责从静态图片以及人脸识别中定位和提取出人脸数据,并对人脸数据进行建模和局部分析,抽取出相应的人脸特征,进而对局部特征作结构化处理。
人脸识别比对和人脸识别门禁系统
该模块是人脸识别分析技术应用的核心,负责完成从获取的人脸图像与数据库中的人脸图像进行特征比对和检索等关键功能。
4.功能层
包括了人脸识别门禁系统应用的所有基础功能模块:人员建库,人脸特征采集,实时数据上传,基础信息管理,人脸特征比对分析,人脸特征比对报警及人像抓拍分布统计等功能模块或子系统。
5.应用层
具有人像识别比对相关业务需求的应用功能。

以上是关于获取门禁记录方式-实时获取的主要内容,如果未能解决你的问题,请参考以下文章

面部识别门禁

如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录

代码门禁

Firebase实时数据库如何在没有密钥的情况下获取子记录

如何从 firebase 实时数据库中获取数据并更改一个文本字段以表示该特定记录?

实时控制软件设计第二周作业-停车场门禁控制系统状态机设计