海康威视DS-K56A0人证设备集成(1)
海康威视DS-K56A0硬件集成
- 1.需求
- 2.代码实现
- 设备登录
- 报警布防监听
- 回调函数
1.需求
集成海康威视DS-K560人证对比终端设备,实现人脸+身份证识别,识别出身份证信息,抓拍人脸照片以及身份证照片
2.代码实现
1.首先我们需要把海康威视的的部分库文件导入到我们的项目中,没有库文件可以去海康威视的官网下载最新的SDK,压缩包里面会有库文件,链接我会放在最下面。
需要导入的文件有:HCNetSDKCom文件夹、AudioRender.dll、HCCore.dll、HCNetSDK.dll、hlog.dll、hpr.dll、libeay32.dll、ssleay32.dll。
以下是我的库文件存放路径大家可以参考一下
2.
设备登录
/*** 登录* */public static void login(){//注册之前判断有没有已注册用户,有就删除if(lUserID>-1){//注销hCNetSDK.NET_DVR_Logout(lUserID);lUserID = -1;}//注册 //设备IP地址m_sDeviceIP = "192.168.1.64";m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());//设备账户 如果没有,一般默认为adminm_sUsername = "admin";m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());//设备密码 购买时会提供m_sPassword ="1232132";m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());//设备端口m_strLoginInfo.wPort =8000;//海康威视登录登录方法lUserID =hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);//判断注册是否成功if(lUserID==-1){JOptionPane.showMessageDialog(null, "false,错误号:" + hCNetSDK.NET_DVR_GetLastError());} else {JOptionPane.showMessageDialog(null, "success");}}
报警布防监听
//布防public static void initMemberFlowUpload(){//设置报警回调函数boolean callflag = hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(new Haikangimpl(),null);if(callflag){System.out.println("callback----success+设置回调函数成功");}//启用布防-其他报警布防参数不需要设置,不支持HCNetSDK.NET_DVR_SETUPALARM_PARAM lpSetupParam = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();lpSetupParam.dwSize=lpSetupParam.size();lpSetupParam.byLevel=1;//智能交通布防优先级:0- 一等级(高),1- 二等级(中),2- 三等级(低)lpSetupParam.byAlarmInfoType=1;//智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT)lpSetupParam.byDeployType =1; //布防类型(仅针对门禁主机、人证设备):0-客户端布防(会断网续传),1-实时布防(只上传实时数据)lpSetupParam.write();final int lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID,lpSetupParam);if (lAlarmHandle==-1){System.out.println("NET_DVR_SetupAlarmChan_V41 error, %d\n"+hCNetSDK.NET_DVR_GetLastError());hCNetSDK.NET_DVR_Logout(lUserID);hCNetSDK.NET_DVR_Cleanup();System.out.println("布防失败");}else {System.out.println("bufangsuccess++布防成功");}//等待过程中,如果设备上传报警信息,在报警回调函数里面接收和处理报警信息Timer timer =new Timer();// 实例化Timer类timer.schedule(new TimerTask() {@Overridepublic void run() {//撤销布防上传通道if (! hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle)){System.out.println("! hCNetSDK.NET_DVR_CloseAlarmChan_V31(lAlarmHandle)\n"+ hCNetSDK.NET_DVR_GetLastError() +"\n" +hCNetSDK.NET_DVR_GetErrorMsg(null) );hCNetSDK.NET_DVR_Logout(lUserID);hCNetSDK. NET_DVR_Cleanup();return;}//注销用户hCNetSDK.NET_DVR_Logout(lUserID);//释放SDK资源hCNetSDK.NET_DVR_Cleanup();this.cancel();System.gc();//主动回收垃圾}}, 100 * 60 * 1000 );// 这里毫秒}
回调函数
public class Haikangimpl implements HCNetSDK.FMSGCallBack_V31{@Overridepublic boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {String sAlarmType = new String();Date today = new Date();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String[] sIP = new String[2];
// sAlarmType = new String("lCommand=0x") + Integer.toHexString(lCommand);switch (lCommand){case HCNetSDK.COMM_ID_INFO_ALARM: ///身份证信息*/HCNetSDK.NET_DVR_ID_CARD_INFO_ALARM strIDCardInfo = new HCNetSDK.NET_DVR_ID_CARD_INFO_ALARM();strIDCardInfo.write();Pointer pIDCardInfo = strIDCardInfo.getPointer();pIDCardInfo.write(0, pAlarmInfo.getByteArray(0, strIDCardInfo.size()), 0, strIDCardInfo.size());strIDCardInfo.read();sAlarmType = sAlarmType + ":门禁身份证刷卡信息,身份证号码:" + new String(strIDCardInfo.struIDCardCfg.byIDNum).trim() + ",姓名:" +new String(strIDCardInfo.struIDCardCfg.byName).trim() + ",报警主类型:" + strIDCardInfo.dwMajor + ",报警次类型:" + strIDCardInfo.dwMinor;
// String s =new String(strIDCardInfo.struIDCardCfg.byName).trim();
// /*System.out.println(sAlarmType);*/
// String name=new String(strIDCardInfo.struIDCardCfg.byName).trim();//姓名
// String cardnum=new String(strIDCardInfo.struIDCardCfg.byIDNum).trim();//身份证号码
// String address=new String(strIDCardInfo.struIDCardCfg.byAddr).trim();//地址
// String struBirth=new String(String.valueOf(strIDCardInfo.struIDCardCfg.struBirth)).trim();//出生日期
// System.out.println("name:"+name+"\ncardnum:"+cardnum+"\naddress:"+address);
// System.out.println(sAlarmType);//身份证图片if (strIDCardInfo.dwPicDataLen > 0) {SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");String newName = sf.format(new Date());FileOutputStream fout;try {String filename ="F:\\硬件集成\\人证合一\\CH-HCNetSDKV6.1.4.42_build20200527_win64\\CH-HCNetSDKV6.1.4.42_build20200527_win64\\Demo示例\\4- Java 开发示例\\3-明眸门禁优化接口\\Test1\\lib\\pic" +newName + "_IDInfoPic.jpg";fout = new FileOutputStream(filename);//将字节写入文件long offset = 0;ByteBuffer buffers = strIDCardInfo.pPicData.getByteBuffer(offset, strIDCardInfo.dwPicDataLen);byte[] bytes = new byte[strIDCardInfo.dwPicDataLen];buffers.rewind();buffers.get(bytes);fout.write(bytes);fout.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//抓拍图片if (strIDCardInfo.dwCapturePicDataLen > 0) {SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");String newName = sf.format(new Date());FileOutputStream fout;try {String filename = "F:\\硬件集成\\人证合一\\CH-HCNetSDKV6.1.4.42_build20200527_win64\\CH-HCNetSDKV6.1.4.42_build20200527_win64\\Demo示例\\4- Java 开发示例\\3-明眸门禁优化接口\\Test1\\lib\\pic" +newName + "_IDInfoCapturePic.jpg";tFamilyinfo.setYhzp(filename);fout = new FileOutputStream(filename);//将字节写入文件long offset = 0;ByteBuffer buffers = strIDCardInfo.pCapturePicData.getByteBuffer(offset, strIDCardInfo.dwCapturePicDataLen);byte[] bytes = new byte[strIDCardInfo.dwCapturePicDataLen];buffers.rewind();buffers.get(bytes);fout.write(bytes);fout.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case HCNetSDK.COMM_ALARM_ACS: //门禁主机报警信息soutHCNetSDK.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();sAlarmType = sAlarmType + ":门禁主机报警信息,卡号:"+ new String(strACSInfo.struAcsEventInfo.byCardNo).trim() + ",卡类型:" +strACSInfo.struAcsEventInfo.byCardType + ",报警主类型:" + strACSInfo.dwMajor + ",报警次类型:" + strACSInfo.dwMinor;System.out.println(sAlarmType);System.out.println(strACSInfo.pPicData);System.out.println("上传类型:"+strACSInfo.byPicTransType);if(strACSInfo.dwPicDataLen>0){SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");String newName = sf.format(new Date());FileOutputStream fout;try {String filename = ".\\pic\\"+ new String(pAlarmer.sDeviceIP).trim() +"_byCardNo["+ new String(strACSInfo.struAcsEventInfo.byCardNo).trim() +"_"+ newName + "_Acs.jpg";fout = new FileOutputStream(filename);//将字节写入文件long offset = 0;ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen);byte [] bytes = new byte[strACSInfo.dwPicDataLen];buffers.rewind();buffers.get(bytes);fout.write(bytes);fout.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT://实时人脸抓拍上传HCNetSDK.NET_VCA_FACESNAP_RESULT strFaceSnapInfo = new HCNetSDK.NET_VCA_FACESNAP_RESULT();strFaceSnapInfo.write();Pointer pFaceSnapInfo = strFaceSnapInfo.getPointer();pFaceSnapInfo.write(0, pAlarmInfo.getByteArray(0, strFaceSnapInfo.size()), 0, strFaceSnapInfo.size());strFaceSnapInfo.read();sAlarmType = sAlarmType + ":人脸抓拍上传,人脸评分:" + strFaceSnapInfo.dwFaceScore + ",年龄段:" + strFaceSnapInfo.struFeature.byAgeGroup + ",性别:" + strFaceSnapInfo.struFeature.bySex;SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); //设置日期格式String time = df.format(new Date()); // new Date()为获取当前系统时间//人脸图片写文件try {FileOutputStream small = new FileOutputStream(System.getProperty("user.dir") + "\\pic\\" + time + "small.jpg");FileOutputStream big = new FileOutputStream(System.getProperty("user.dir") + "\\pic\\" + time + "big.jpg");if(strFaceSnapInfo.dwFacePicLen > 0){try {small.write(strFaceSnapInfo.pBuffer1.getByteArray(0, strFaceSnapInfo.dwFacePicLen), 0, strFaceSnapInfo.dwFacePicLen);small.close();} catch (IOException ignored) {}}if(strFaceSnapInfo.dwFacePicLen > 0){try {big.write(strFaceSnapInfo.pBuffer2.getByteArray(0, strFaceSnapInfo.dwBackgroundPicLen), 0, strFaceSnapInfo.dwBackgroundPicLen);big.close();} catch (IOException ignored) {}}} catch (FileNotFoundException ignored) {}break;
// case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT:
// HCNetSDK.NET_DVR_ID_CARD_INFO_ALARM
// break;default://throw new IllegalStateException("Unexpected value: " + lCommand);System.out.println("Unexpected value: " + lCommand);}return true;}
}
海康威视DS-K56A0人证设备集成(1)相关推荐
- 【Android,Kotlin,TFLite】移动设备集成深度学习轻模型TFlite(图像分类篇)
深度学习.Tensorflow.TFLite.移动设备集成深度学习轻模型TFlite.图像分类篇 Why i create it? 为了创建一个易用且易于集成的TFlite加载库, 所以TFLiteL ...
- 格雷希尔GripSeal能为设备集成商做什么?
大中小型设备集成商在进行项目设计的时候,除了一些核心的电气.机械.动作等,还需要处理各种类型的接口连接问题,特别是做气密测试.性能测试.或是爆裂测试时,需要对这些接口快速封堵进行通水.通油.通制冷剂. ...
- 关于MES与设备集成方式及注意项目
关于MES与设备集成方式及注意项目 一.常见的设备取数方法 随着设备自动化程度的不断提升,如何实现设备数据采集.存储.计算.分析就显得越来越重要. 由于公司的设备非一家采集,存在各种样式的设备,数据采 ...
- 智能建筑中高低压配电设备集成监控和管理系统应用分析-李亚俊
安科瑞 李亚俊 [摘 要]电力智能监控系统是信息时代的产物,反映了人类在高效经济时代对生活质量的不断追求,美好的希望和简化的工作程序.当前,正在建造越来越多的智能建筑物,并且智能建筑物是使用计算机技术 ...
- 内网窄带宽环境下的设备集成,如何有效运用流媒体服务器搭建云端视频监控管理平台
视频监控的实时预览与回看,除了依赖于服务器性能外,还对带宽要求比较高,假设标清视频码流为1M,一个网络环境下有100个监控设备,同时进行视频实时直播和录像,上行带宽占用就>100M,当同时有10 ...
- java 设备集成,java 集成 海康 SDK
1.pom 依赖jna,最好用 3.0.9,其他的少文件 com.sun.jna-local jna-local 3.0.9 使用命令将jar放到依赖库 mvn install:install-fil ...
- android车载娱乐系统场景,复合式娱乐综合体,共享设备集成场景化空间-迷你ktv官网...
在科技的推动下,我们正在进入一个泛娱乐的时代. 共享娱乐空间场景 在这个时代,谁能把科技与娱乐结合起来,甚至发展出一种新的方式,任何人都有可能站起来赢.在一个完整的工业生态系统中,适当的甚至是独特的商 ...
- 老龄人口公交出行_在设计技术时要考虑到老年人口
老龄人口公交出行 Abstract - The senior user base, which we will define as sixty-five years or older, is ofte ...
- 海康威视人脸识别设备对接(一)环境搭建
需要对接海康威视人脸识别设备,这里选择明眸门禁,还有其他的没研究过 打开海康威视开放平台 https://open.hikvision.com/ 选择开放体系,一直选择到设备集成SDK 这里我选择设备 ...
最新文章
- matlab生产正弦mif文件
- ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
- “稳定”凸包----poj1228
- android 仿ios tabs,React Native兼容iOS Android的TabBar
- PHP file_get_contents 设置超时时间
- 面向对象阶段个人总结
- C++中用frugally-deep调用keras的模型并进行预测
- matlab weibpdf函数,matlab建模常用函数
- 3d页游开发_大翅膀等于页游风?天谕手游扭转印象,阿云嘎同款黑翅膀最有排面...
- 基于centos6.5 hbase 集群搭建
- 沈伟华:图神经网络的三连问
- git:关联github和本地仓库
- 双线程交替修改变量 条件变量
- NumPy 简单应用
- declspec(dllexport)和declspec(dllexport)的实际应用
- (生物信息学)R语言与统计学入门(九)—— 单因素cox回归分析
- ps污点修复画笔用法和案例:去除脸上痘痘
- EPOCH, BATCH, INTERATION
- 浅谈Oracle RAC --集群管理软件GI
- Ajax传递数组对象