Java实现 海康摄像头抓拍图像
Posted 火光闪耀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现 海康摄像头抓拍图像相关的知识,希望对你有一定的参考价值。
先抱怨一下,打死都想不到,海康的摄像头SDK居然是一个Java类,还有必须的两个jar包(jna.jar,examples.jar)。鬼能想得到会这么命名。
下面开始吧。
把从官网下载的SDK(和当前系统对应)解压,把库文件整个拷贝到某个目录(我是D:hiklib),然后把D:hiklib和D:hiklibHCNetSDKCom加入到系统环境变量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("抓拍成功,buffer:"+jpegStringBuffer);
}
return b;
}
public void logout(){
sdk.NET_DVR_Logout(userId);
sdk.NET_DVR_Cleanup();
}
}
- 完成。以上代码中我删除了异常处理。记得加上。
以上是关于Java实现 海康摄像头抓拍图像的主要内容,如果未能解决你的问题,请参考以下文章
海康威视摄像头对接SDK实时预览功能和抓拍功能,懒癌福利,可直接CV
177Java利用JNI调用C++编写的DLL,连接海康人脸抓拍机,实现人脸库全量更新。