java调用海康人脸识别机5603的sdk的使用总结(三)

4 篇文章 3 订阅

下发人脸

首先,设备中需要有这条数据,卡号已经下发了,但没有人脸信息,现在开始下发人脸信息。

只贴核心代码

步骤:登录  启动远程配置 发送长连接 关闭连接

登录  启动远程配置 关闭连接 前面都讲了,这里重点是发送长连接

定义HCNetSDK.NET_DVR_FACE_PARAM_CFG,这个类的c++版本是:

struct{

  DWORD    dwSize;

  BYTE     byCardNo[ACS_CARD_NO_LEN];

  DWORD    dwFaceLen;

  char     *pFaceBuffer;

  BYTE     byEnableCardReader[MAX_CARD_READER_NUM_512];

  BYTE     byFaceID;

  BYTE     byFaceDataType;

  BYTE     byRes[126];

}NET_DVR_FACE_PARAM_CFG, *LPNET_DVR_FACE_PARAM_CFG;

需要注意的是pFaceBuffer字段,c++中是char  *,这个不能转成String,正确写法如下:

先定义一个类,名字随便取,例如:这个类是存放图片的byte[]信息的

publicstaticclassFACE_INFO extends Structure {

       publicbyte[] byFaceInfo;

    }

 

NET_DVR_FACE_PARAM_CFG的java的定义:

publicstaticclassNET_DVR_FACE_PARAM_CFGextendsStructure {

       publicintdwSize;

       publicbyte[] byCardNo = newbyte[ACS_CARD_NO_LEN];

       publicintdwFaceLen;

       public Pointer pFaceBuffer;

       publicbyte[] byEnableCardReader= newbyte[MAX_CARD_READER_NUM_512];

       publicbytebyFaceID;

       publicbytebyFaceDataType;

       publicbyte[] byRes = newbyte[126];

        }

 

注意:pFaceBuffer被定义成了Pointer而不是String或byte[],其实byte[]我试过,但报错17,就是参数错。

HCNetSDK.FACE_INFO faceInfo = new HCNetSDK.FACE_INFO();

byte[] byteFace = readPic7();

// 将图片转为byte[],java中这里是补码,就是负数,这点和c++,c#不一样,不用管,也不用转成正数。

publicbyte[]readPic7() {

       try {

           FileInputStreaminputStream= newFileInputStream("D:/facetestimg/test2.jpg");

           inti = inputStream.available();

           // byte数组用于存放图片字节数据

           byte[] buff = newbyte[i];

           inputStream.read(buff);

           // 关闭输入流

           inputStream.close();

           returnbuff;

       }catch(Exception e) {

           e.printStackTrace();

       }

       returnnull;

        }

 

faceInfo.byFaceInfo = byteFace;

faceInfo.write(); // 这里很重要,必须写,不然发不下去的。

 

pSendBuf.pFaceBuffer = faceInfo.getPointer(); // 这里就将照片信息赋值进去了

pSendBuf.dwFaceLen = byteFace.length;

pSendBuf.write(); //这个别忘了

// 下发照片

booleanresult= hCNetSDK.NET_DVR_SendRemoteConfig(lHandle, HCNetSDK.ENUM_ACS_INTELLIGENT_IDENTITY_DATA,pSendBuf.getPointer(),pSendBuf.size());

 

有疑问的可以联系我 516658652@qq.com,只要我知道的,尽量回答。

 

最后贴一下核心代码:

HCNetSDK.NET_DVR_FACE_PARAM_COND lpInBuffer = newHCNetSDK.NET_DVR_FACE_PARAM_COND();

           StringcardNo= "1234567";

           for (inti = 0; i < cardNo.length(); i++) {

              lpInBuffer.byCardNo[i] = (byte) cardNo.charAt(i);

           }

           lpInBuffer.dwFaceNum = 1;

           lpInBuffer.byFaceID = (byte) 1;

           lpInBuffer.byEnableCardReader = newbyte[HCNetSDK.MAX_CARD_READER_NUM_512];

           lpInBuffer.byEnableCardReader[0] = 1;

           lpInBuffer.dwSize = lpInBuffer.size();

           FRemoteConfigCallbackfRemoteConfigCallback = newFRemoteConfigCallback();

           lpInBuffer.write();

           // 启动远程配置。

           NativeLonglHandle= hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_SET_FACE_PARAM_CFG,

                  lpInBuffer.getPointer(), lpInBuffer.size(), fRemoteConfigCallback,pLoginInfo.pUser);

           error = hCNetSDK.NET_DVR_GetLastError();

           lpInBuffer.read();

           // 发送长连接数据

           HCNetSDK.NET_DVR_FACE_PARAM_CFGpSendBuf= newHCNetSDK.NET_DVR_FACE_PARAM_CFG();

           for (inti = 0; i < cardNo.length(); i++) {

              pSendBuf.byCardNo[i] = (byte) cardNo.charAt(i);

           }

           // pSendBuf.byCardNo = new byte[] { 1, 2, 4, 6, 7 };

           HCNetSDK.FACE_INFOfaceInfo= newHCNetSDK.FACE_INFO();

           byte[] byteFace = readPic7();

           faceInfo.byFaceInfo = byteFace;

           faceInfo.write();

           pSendBuf.pFaceBuffer = faceInfo.getPointer();

           pSendBuf.dwFaceLen = byteFace.length;         pSendBuf.byEnableCardReader= newbyte[HCNetSDK.MAX_CARD_READER_NUM_512];

           pSendBuf.byEnableCardReader[0]= 1;

           pSendBuf.byFaceID = (byte) 1;

           pSendBuf.byFaceDataType = (byte) 1;

           pSendBuf.dwSize = pSendBuf.size();

           pSendBuf.write();

           booleanresult = hCNetSDK.NET_DVR_SendRemoteConfig(lHandle, HCNetSDK.ENUM_ACS_INTELLIGENT_IDENTITY_DATA,

                  pSendBuf.getPointer(), pSendBuf.size());

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
设备网络SDK是基于设备私有网络通信协议开发的,为后端设备(嵌入式网络硬盘录像、视频服务器)、前端设备(网络摄像机、网络球、IP模块)等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。 适用于以下产品型号: DS-95xx、DS-96xxNVR; DS-90xx混合型硬盘录像; DS-91xx、DS-81xx、DS-80xx、DS-70xx、DS-71xx、DS-7116、DS-72xx硬盘录像; DS-60xx、DS-61xx视频服务器、编/解码器; iDS-6002HF/B双摄像机跟踪、iDS-6101HF智能设备(行为分析)、iDS52xx智能分析仪、iDS90XX、iDS91XX; DS630x_D、DS-6401HD多路解码器; IP摄像机(以下简称“IPC”):DS-2CD71xx、DS-2CD81xx、DS-2CD7xx、DS-2CD8xx、DS-2CD9xx; 其他IP设备:包含IP模块、IP快球等。 由于某些功能在此SDK版本中做了扩展,同时设备程序也做了相应的更新扩展,为了方便下文说明,此处将以上设备归为两类:如DS-7116、DS-81xx、DS-90xx、DS-91xx、DS-95xx、DS-96xx等系列设备称为V3.0以上版本支持的设备;如DS-80xx、IPC等设备称为V3.0以下版本支持的设备。 设备网络SDK主要功能 图像预览、文件回放和下载、云台控制、布防/撤防、语音对讲、日志管理、解码卡、远程升级、远程重启/关闭、格式化硬盘、参数配置(系统配置、通道配置、串口配置、报警配置、用户配置)、多路解码器、智能设备功能和获取设备能力集等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值