通过onvif抓取海康摄像头图片,以及解决海康摄像头抓取图片需要验证问题,实现摄像头一段时间换一个地方的同时抓取一张图片。

1.实现海康摄像头的图片的抓取。
思路:1.首先获取图片的url,2通过java实现图片的下载
1.使用onvif获取图片的url

				//首先获取OnvifDevice的对象
				OnvifDevice od = new OnvifDevice("IP","摄像头用户名","密码","Token");
				
				//通过OnvifDevice获取Media的对象
				Media media = od.getMedia();
				
				//获取设备中的Profile集合
				List<Profile> listProfiles = media.getProfiles();
					
				//通过media中的getSnapshotUri(Token).getUri()获取图片url
				//获得图片的URL
				String url1 = media.getSnapshotUri(listProfiles.get(0).getToken() /* 此处不同的Token对应着通道*/ ).getUri();
			

2.使用java实现海康摄像头图片的下载

public static void downLoad(String urls) {
		try {
				//构造URL
				URL url = new URL(urls);
				//打开连接
				URLConnection con = url.openConnection();
				
				String username = "用户名";
				String password ="密码";
				String userPassword = username+":"+password;
				
				String encoding = Base64.encodeBase64String(userPassword.getBytes());
				con.setRequestProperty("Authorization", "Basic "+encoding);
				
				//获取输入流
				InputStream is = con.getInputStream();
				
				//格式化时间
				SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
				String format = simpleDateFormat.format(new Date());
				
				
				//1k的缓冲数据
				byte [] bs = new byte[1024];
				
				//阅读到的数据长度
				int len;
				
				//输出的文件流
				String filename = "D:\\a/"+format+".jpg";
				File file = new File(filename);
				FileOutputStream os = new FileOutputStream(file,true);
				
				//开始读取
				while((len = is.read(bs)) != -1) {
					os.write(bs,0,len);
				}
				//完毕,关闭连接
				os.close();
				is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	}

3.用代码实现根据预置点使摄像头在一段时间后移动并取照、

				   //根据OnvifDevice 获取PTZ的实例
				   PTZ ptz = od.getPtz();
				   //获取所有预置点的实例
				   List<PTZPreset> listPtzPreset =	ptz.getPresets(listProfiles.get(0).getToken());
				   //可以通过摄像头的后台管理设置预置点,如果设置完后,可以获取预置点的x,y,如果没有设置,则获取的x为-1.0。y为-1.0。
				   if(listPtzPreset.get(0).getPTZPosition().getPanTilt().getX() == -1.0 && listPtzPreset.get(0).getPTZPosition().getPanTilt().getY() ==-1.0) return ;
					if(listPtzPreset.get(1).getPTZPosition().getPanTilt().getX() == -1.0 && listPtzPreset.get(1).getPTZPosition().getPanTilt().getY() ==-1.0) return ;
					
					//AbsoluteMove:移动摇摄,倾斜和变焦到一个绝对的目标
					//listProfiles.get(0).getToken() :Token验证
					//位置:可以通过获取的预置点获得对应的位置 :listPtzPreset.get(0).getPTZPosition()
					//速度:new PTZSpeed()
					ptz.absoluteMove(listProfiles.get(0).getToken(), listPtzPreset.get(0).getPTZPosition(), new PTZSpeed());
					downLoadPhoto.downLoad(url1);	//将抓取图片封装成一个静态方法,在downLoadPhoto类中
					Thread.sleep(15000); //睡15秒
					ptz.absoluteMove(listProfiles.get(0).getToken(), listPtzPreset.get(0).getPTZPosition(), new PTZSpeed());
					downLoadPhoto.downLoad(url1);
					Thread.sleep(15000); //睡15秒

以上就能实现摄像头15秒换一个地方的同时抓取一张图片。

首先,你需要确保已经导入了onvifcamera-jvm的类库,并且已经建立了与摄像头的连接。然后,可以通过以下步骤来实现控制海康摄像头转动: 1. 创建PTZ控制对象 ```java OnvifDevice device = new OnvifDevice("http://192.168.1.100/onvif/device_service"); OnvifProfile profile = device.getMedia().getProfiles()[0]; OnvifPtz ptz = device.getPtz(profile.getToken()); ``` 其中,"http://192.168.1.100/onvif/device_service"是海康摄像头的设备服务地址,可以根据实际情况进行修改。 2. 获取PTZ节点信息 ```java OnvifPtzNode[] nodes = ptz.getNodes(); OnvifPtzNode panNode = null; OnvifPtzNode tiltNode = null; for (OnvifPtzNode node : nodes) { if (node.getName().toLowerCase().contains("pan")) { panNode = node; } if (node.getName().toLowerCase().contains("tilt")) { tiltNode = node; } } ``` 通过调用getNodes()方法可以获取到PTZ节点信息,包括名称、范围等。在海康摄像头中,通常会有一个"pan"节点和一个"tilt"节点,分别控制摄像头水平和垂直方向的转动。 3. 控制PTZ转动 ```java // 控制摄像头向左转动 ptz.continuousMove(panNode.getToken(), -0.1f, 0.0f, null); // 控制摄像头向右转动 ptz.continuousMove(panNode.getToken(), 0.1f, 0.0f, null); // 控制摄像头向上转动 ptz.continuousMove(tiltNode.getToken(), 0.0f, -0.1f, null); // 控制摄像头向下转动 ptz.continuousMove(tiltNode.getToken(), 0.0f, 0.1f, null); ``` 通过调用continuousMove()方法可以控制摄像头的转动。其中,第一个参数为节点的Token,第二个参数为水平方向的速度,第三个参数为垂直方向的速度,第四个参数为可选参数,用于设置持续时间等。在这个例子中,我们通过控制速度的正负来控制转动方向。 注意:以上代码仅为示例,实际使用中需要根据具体情况进行修改。另外,需要注意的是,海康摄像头PTZ控制可能存在一些特殊的问题需要根据实际情况进行调整。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值