天天看點

海康sdk遠端門禁_海康威視人臉門禁對接開發(一)調用裝置篇

上一篇的準備工作做好後,給裝置通上網,需要在裝置上面配置

1.注冊裝置,裝置會傳回:唯一使用者ID,lUserID

public static void main(String[] args) {

HCNetDeviceUtil hcNetDeviceUtil=new HCNetDeviceUtil();

//注冊

String lUserID = hcNetDeviceUtil.loginDevice("127.0.0.1", "8000", "admin", "admin12345");//海康的門禁裝置端口統一為:8000

System.out.println(lUserID);

}

2.對裝置進行布防,布防就是建立裝置資料上傳的通道,我們就能在報警回調函數實作類,裡面接收到人臉比對的結果

public static void main(String[] args) throws Exception {

HCNetDeviceUtil hcNetDeviceUtil=new HCNetDeviceUtil();

//注冊裝置

String lUserID=hcNetDeviceUtil.loginDevice("1270.0.1", "8000", "admin", "admin12345");

//對裝置布防

hcNetDeviceUtil.SetupAlarmChan(Integer.parseInt(lUserID));

//下發夾号,我用的是工号下發

byte[] cardInfo = hcNetDeviceUtil.setCardInfo(0, "123456", "李四");

//下發人臉

byte[] faceByte=new byte[2];//一定要将照片轉成byte[],裝置隻接收這種資料

hcNetDeviceUtil.setFaceInfo(Integer.parseInt(lUserID), cardInfo, faceByte);

}

package com.ykl;

import com.sun.jna.Pointer;

import com.utils.HCNetSDK.NET_DVR_ALARMER;

import com.utils.*;

//報警回調函數實作類:用于接收人臉識别比對結果

public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {

@Override

public boolean invoke(int lCommand, NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {

if(lCommand==HCNetSDK.COMM_ALARM_ACS) {//門禁主機報警資訊

HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo=new HCNetSDK.NET_DVR_ACS_ALARM_INFO();

strACSInfo.write();

Pointer pACSInfo=strACSInfo.getPointer();

pACSInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size());

strACSInfo.read();

if(strACSInfo.dwMajor==5 && strACSInfo.dwMinor==75) {

String ip=new String(pAlarmer.sDeviceIP).trim();

String punchTime=strACSInfo.struTime.toStringTime();

//工号如果以0開頭的裝置會将0給去掉,這是個坑

String empCode=Integer.toString(strACSInfo.struAcsEventInfo.dwEmployeeNo);

//一定要加trim(),将多餘的空格去掉,不然根據這個卡号去資料查資料的時候肯定會出現:期望xx,實際xxx

String cardNo=new String(strACSInfo.struAcsEventInfo.byCardNo).trim();

System.out.println(ip+punchTime+empCode+cardNo);

//接下來的資料庫的操作,就自己寫把

}

}

return true;

}

}

3.下發夾号與人臉

public static void main(String[] args) throws Exception {

HCNetDeviceUtil hcNetDeviceUtil=new HCNetDeviceUtil();

//注冊裝置

String lUserID=hcNetDeviceUtil.loginDevice("1270.0.1", "8000", "admin", "admin12345");

//下發夾号,我用的是工号下發

byte[] cardInfo = hcNetDeviceUtil.setCardInfo(0, "123456", "李四");

//下發人臉

byte[] faceByte=new byte[2];//一定要将照片轉成byte[],裝置隻接收這種資料

hcNetDeviceUtil.setFaceInfo(Integer.parseInt(lUserID), cardInfo, faceByte);

}

4.這個時候去裝置前面刷個臉,就可以了,報警回調函數裡面就會列印接收到的資料了

5.你要是想要調用,擷取人臉卡号,删除人臉卡号,就自己調用就好了

最後附上demo:

連結:https://pan.baidu.com/s/1O3_m-ydCENFoMmcSZr2Ytg

提取碼:jr0x