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

4 篇文章 3 订阅

这篇是入门教程

准备工作:

1.      从官网下载demo,其中包含了java的demo

2.      将HCNetSDK.java 直接复制到自己的项目中

3.      将java的demo中的examples.jar和jna.jar加载到自己的项目中

开始编程:

l  java的数据类型和C++的对应关系(大部分可用,小部分需要根据实际情况调整)

C++

Java

char  *

String

word

short

byte

byte

byte[]

byte[]

dword

int

long

NativeLong

Void  *

Pointer

lpvoid

Pointer

lpDword

IntByReference

HWND

HWND

char[]

byte[]

byte  *

Pointer

 

l  根据sdk手册的信息建立相应的类,接口,回调函数,新建立的这些最好也放到HCNetSDK.java中。

l  在自己的类中需要实例化HCNetSDK,具体写法是:staticHCNetSDK hCNetSDK = HCNetSDK.INSTANCE;

l  然后再初始化:booleaninitSuc = hCNetSDK.NET_DVR_Init();  返回true表示成功。

举例:NET_DVR_USER_LOGIN_INFO

c++中的写法是:

struct{
  char                    sDeviceAddress[NET_DVR_DEV_ADDRESS_MAX_LEN];
  BYTE                    byRes1;
  WORD                    wPort;
  char                    sUserName[NET_DVR_LOGIN_USERNAME_MAX_LEN];
  char                    sPassword[NET_DVR_LOGIN_PASSWD_MAX_LEN];
  fLoginResultCallBack    cbLoginResult;
  void                    *pUser;
  BOOL                    bUseAsynLogin;
  BYTE                    byRes2[128];
}NET_DVR_USER_LOGIN_INFO,*LPNET_DVR_USER_LOGIN_INFO;

改成相应的java的写法是:需要注意的是必须继承Structure类,数组类必须初始化并定义长度,长度严格按照sdk手册上的定义。

public staticclass NET_DVR_USER_LOGIN_INFO extends Structure {
       public byte[] sDeviceAddress = newbyte[NET_DVR_DEV_ADDRESS_MAX_LEN];
       public bytebyRes1;
       public shortwPort;
       public byte[] sUserName = newbyte[NET_DVR_LOGIN_USERNAME_MAX_LEN];
       public byte[] sPassword = newbyte[NET_DVR_LOGIN_PASSWD_MAX_LEN];
       public FLoginResultCallBack cbLoginResult;
       public Pointer pUser;
       public booleanbUseAsynLogin;
       public byte[] byRes2 = newbyte[128];
}

在这个类中,有回调函数FLoginResultCallBack,该函数在c++中的定义为:

Callback Function
typedef void(CALLBACK *fLoginResultCallBack)(
  LONG                        lUserID,
  DWORD                       dwResult,
  LPNET_DVR_DEVICEINFO_V30    lpDeviceInfo,
  void                        *pUser
);

改成java后如下:这个接口定义在HCNetSDK.java中

public static interface FLoginResultCallBack extends StdCallCallback {
       public void invoke(NativeLong lUserID, intdwResult, Pointer pUser);
    }

然后在自己的类中写关于回调函数的如下代码:

 

class FLoginResultCallBackimplementsHCNetSDK.FLoginResultCallBack {
       publicvoid invoke(NativeLong lUserID, intdwResult, Pointer pUser) {
           //这里按自己的需要写
       }
    }

下面为NET_DVR_USER_LOGIN_INFO类填充信息

sDeviceAddress:这个是人脸机的ip地址,可以这么赋值:

String sDeviceIP = "192.168.0.13";
for (inti = 0; i < sDeviceIP.length(); i++) {
       pLoginInfo.sDeviceAddress[i] = (byte) sDeviceIP.charAt(i);
}

需要注意的是pLoginInfo.sDeviceAddress[]在类NET_DVR_USER_LOGIN_INFO定义的时候已经初始化并定义了长度了,这个长度必须按照sdk手册上的来,不能自己定义长度。

同理可给用户名和密码赋值。

端口号设置:pLoginInfo.wPort = (short) 8000;

回调函数赋值:前面已经定义了回调函数了,这里进行赋值

FLoginResultCallBack fLoginResultCallBack= newFLoginResultCallBack();
pLoginInfo.cbLoginResult = fLoginResultCallBack;

至此,登录的类已经完成。

我使用的是NET_DVR_Login_V40这个方法进行登录,因此还需要NET_DVR_DEVICEINFO_V40类,和NET_DVR_USER_LOGIN_INFO类的定义方法类似。

 

HCNetSDK.java中对方法NET_DVR_Login_V40进行定义

NativeLong NET_DVR_Login_V40(NET_DVR_USER_LOGIN_INFO pLoginInfo,NET_DVR_DEVICEINFO_V40 lpDeviceInfo);

 

在NET_DVR_Login_V40方法中,对于lpDeviceInfo,只要new一个就可以了,不用对里面的属性进行赋值。

然后进行登录:

NativeLong lUserID = hCNetSDK.NET_DVR_Login_V40(pLoginInfo, lpDeviceInfo);

lUserID的返回值大于-1就是成功了。

最后整理下整个流程

定义两个类:

HCNetSDK.NET_DVR_USER_LOGIN_INFO pLoginInfo = newHCNetSDK.NET_DVR_USER_LOGIN_INFO();
HCNetSDK.NET_DVR_DEVICEINFO_V40 lpDeviceInfo = newHCNetSDK.NET_DVR_DEVICEINFO_V40();

对pLoginInfo的属性进行赋值:之前漏了一个pLoginInfo.bUseAsynLogin = false;

调用登录方法NativeLonglUserID = hCNetSDK.NET_DVR_Login_V40(pLoginInfo, lpDeviceInfo);

返回大于-1的整数表示成功,如果返回-1,则可以调用

int error = hCNetSDK.NET_DVR_GetLastError(); 根据返回的错误代码,在sdk手册中找出相应的原因。

 

HCNetSDK.java这个类中已经定义了很多方法,接口,类了,因此在定义的时候先查找一下是否已经存在了。

就登录而言,很多设备的方法大同小异,不止局限于人脸机5603

sdk中的很多类中有类,一层套一层,定义的时候需要把它们都定义了。

Java对接海康人脸识别可以通过以下步骤完成: 1. 导入海康人脸识别Java SDK:首先,下载并导入海康人脸识别Java SDK,包括相应的jar文件和依赖的库文件。 2. 配置SDK和连接设备:在代码中,配置SDK的相关参数,例如设备的IP地址、端口号、用户名和密码等。通过这些参数,建立与海康设备的连接。 3. 创建人脸识别服务:使用SDK提供的API,创建人脸识别服务对象。这个对象负责与海康设备进行通信,包括发送指令、接收数据等操作。 4. 初始化服务:在服务对象中进行初始化操作,例如连接设备、设置图片上传、启用实时人脸检测等。这些初始化操作可以根据实际需求进行配置。 5. 进行人脸识别调用相应的API进行人脸识别操作。例如,通过实时视频流或者上传的图片进行人脸检测、抓拍、比对等操作。可以设置相应的回调函数来获取识别结果。 6. 处理识别结果:根据识别结果进行相应的业务逻辑处理。识别结果可以包括人脸检测信息、人脸角度、人脸特征值等。根据实际需求,可以进行敏感数据的隐私保护。 7. 关闭服务和断开连接:在程序结束或者不再需要人脸识别服务时,关闭服务对象,断开与设备的连接。 通过以上步骤,可以完成Java对接海康人脸识别的操作。具体的代码实现要根据海康提供的SDK文档进行编写和调试。当然,在实际应用中,还需要考虑异常处理、性能优化等因素。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值