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

本文介绍如何使用ONVIF协议获取海康摄像头的图片URL,并通过Java实现图片下载。同时,展示了如何控制摄像头移动至预置点并定时抓取图片,包括获取预置点坐标和实现摄像头移动的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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秒换一个地方的同时抓取一张图片。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值