上一篇的準備工作做好後,給裝置通上網,需要在裝置上面配置
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