java海康摄像机抓拍系统论文,Java 实现 海康摄像头抓拍图像 Windows、Linux

先抱怨一下,打死都想不到,海康的摄像头SDK居然是一个Java类,还有必须的两个jar包(jna.jar,examples.jar)。鬼能想得到会这么命名。

下面开始吧。

Windows

把从官网下载的SDK(和当前系统对应)解压,把库文件整个拷贝到某个目录(我是D:hiklibs),然后把D:hiklibs和D:hiklibsHCNetSDKCom加入到系统环境变量path中。可以尝试从代码中把这两个文件夹加入path,我没有试成功。

项目引入jna.jar和examples.jar这两个jar包。注意:一定要用官网SDK里面的,千万不要用其他版本的jna。

从ClientDemo中把HCNetSDK.java拷贝到自己的项目中(这就是神奇的SDK)。

开始主体,Java代码:

public class CameraManager {

private static Logger logger = LoggerFactory.getLogger(CameraManager.class);

private static HCNetSDK sdk = HCNetSDK.INSTANCE;

private static NativeLong userId = new NativeLong(-1);//用户登录ID,值为0,1,2...

private static NativeLong startChan = new NativeLong(-1); // start channel number

private void login(String ip, short port, String username, String pwd){

//sdk初始化

if (!sdk.NET_DVR_Init()){

logger.error("海康SDK初始化失败!" + sdk.NET_DVR_GetLastError());

}

//注册设备

NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();

//登录

userId = sdk.NET_DVR_Login_V30(ip, port, username, pwd, deviceInfo);

if (userId.intValue() < 0){

logger.error("摄像头用户登录失败!Err:" + sdk.NET_DVR_GetLastError());

}

startChan.setValue(deviceInfo.byStartChan);

}

public boolean takePic(String ip, short port, String username, String pwd) {

if (userId.intValue() < 0 || startChan.intValue() < 0) {

logger.info("执行海康摄像机登录,ip[{}],port[{}],username[{}].",ip,port,username);

login(ip,port,username,pwd);

}

logger.info("准备拍照,userId:[{}],startChan:[{}]",userId.intValue(),startChan.intValue());

//拍照

NET_DVR_JPEGPARA strJpeg = new NET_DVR_JPEGPARA();

strJpeg.wPicQuality = 1; //图像参数

strJpeg.wPicSize = 2;

String filePath = "E:\123q.jpg";

boolean b = sdk.NET_DVR_CaptureJPEGPicture(userId, startChan, strJpeg, filePath);//尝试用NET_DVR_CaptureJPEGPicture_NEW方法,但不是报43就是JDK崩溃....

if(!b){//单帧数据捕获图片

System.out.println("抓拍失败!" + " err: " + sdk.NET_DVR_GetLastError());

}

else{

System.out.println("抓拍成功");

}

return b;

}

public void logout(){

sdk.NET_DVR_Logout(userId);

sdk.NET_DVR_Cleanup();

}

}

5. 完成。以上代码中我删除了异常处理。记得加上。

# Linux

1. 需要把libs和HCNetSDKCom加入到LD_LIBRARY_PATH中,而不是Path中。

vi /etc/profile在最后添加

```

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jans/test/libs:/home/jans/test/libs/HCNetSDKCom

```

以上路径替换为自己的包路径。使用`source /etc/profile`立即生效。如果这里路径填写错误,摄像头登录时会报41错误。

2. 编辑/etc/ld.so.conf

一般这个文件只有一行。在文件末尾加入

```

/home/jans/test/libs

/home/jans/test/libs/HCNetSDKCom

```

以上路径替换为自己的包路径。使用`sudo ldconfig`立即生效。

3. 拷贝Linux项目demo中的HCNetSDK.java,(Linux和Windows中这个SDK名字一样,但是内容不一样,咱们写的代码无需更改)直接运行代码即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值