使用海康威视ISAPI协议获取测温图片

news/2025/1/26 15:39:08/文章来源:https://www.cnblogs.com/mxh-java/p/18690693

使用海康威视ISAPI协议获取测温图片

ISAPI 全屏测温接口:

 1 http://<IP>:<PORT>/ISAPI/Thermal/channels/<channelId>/thermometry/jpegPicWithAppendData?format=json 

接口会返回三部分数据:json数据、jpeg二进制流、全屏温度数据;

 

调用全屏测温接口:

 1     /**
 2      * 下载文件
 3      * @param url 下载地址
 4      * @param headerMap 请求头
 5      * @param filePath 文件路径
 6      * @throws IOException
 7      */
 8     public static void download(String url, Map<String, String> headerMap, String filePath) throws IOException {
 9         CredentialsProvider credsProvider = new BasicCredentialsProvider();
10         credsProvider.setCredentials(
11                 new AuthScope("192.168.3.28", 80), // 替换为你的服务器和端口
12                 new UsernamePasswordCredentials("admin", "kbzn2020") // 替换为你的用户名和密码
13         );
14         CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
15         HttpGet request = new HttpGet(url);
16         // 填充请求头
17         if (!CollectionUtils.isEmpty(headerMap)) {
18             headerMap.forEach((key, value) -> {
19                 request.setHeader(key, value);
20             });
21         }
22         CloseableHttpResponse response = httpClient.execute(request);
23         try (InputStream inputStream =  response.getEntity().getContent();
24              OutputStream outputStream = new FileOutputStream(filePath)) {
25 
26             int bytesRead = -1;
27             byte[] buffer = new byte[4096];
28             while ((bytesRead = inputStream.read(buffer)) != -1) {
29                 outputStream.write(buffer, 0, bytesRead);
30             }
31             System.out.println("File downloaded");
32         }
33     }

 

解析二进制流为jpeg图片

 1     /**
 2      * 保存二进制流为图片
 3      * @param bytes
 4      */
 5     public void saveImage(byte[] bytes) {
 6         // 二进制流数组
 7         List<Byte> byteList = new ArrayList<>();
 8         // 开始标志位(JPEG格式要求)
 9         String beginFlag = "FF D8";
10         // 结束标志位(JPEG格式要求)
11         String endFlag = "FF D9";
12         // 开始截取字符串标记
13         boolean flag = false;
14         for (int i = 1; i < bytes.length; i++) {
15             byte preByte = bytes[i - 1];
16             byte itemByte = bytes[i];
17             String preByteStr = String.format("%02X", preByte);
18             String itemByteStr = String.format("%02X", itemByte);
19             String content = preByteStr + " " + itemByteStr;
20 
21             if (content.equals(beginFlag)) {
22                 flag = true;
23                 byteList.add(preByte);
24             }
25             if (content.equals(endFlag)) {
26                 flag = false;
27             }
28             if (flag) {
29                 byteList.add(itemByte);
30             }
31         }
32 
33         File image = new File("F:\\jpeg\\" + ImageUtils.getImageName());
34         FileOutputStream outputStream = null;
35         try {
36             outputStream = new FileOutputStream(image);
37             outputStream.write(convertToByteArray(byteList));
38         } catch (IOException e) {
39             System.out.println("写入文件失败!");
40         } finally {
41             try {
42                 outputStream.close();
43             } catch (IOException e) {
44                 System.out.println("关闭输出流失败!");
45             }
46         }
47     }

 

字节集合转字节数组:

 1     /**
 2      * 字节集合转字节数组
 3      * @param byteList
 4      * @return
 5      */
 6     public static byte[] convertToByteArray(List<Byte> byteList) {
 7         // 创建一个与List大小相同的字节数组
 8         byte[] byteArray = new byte[byteList.size()];
 9 
10         // 遍历List并将每个Byte对象转换为byte并存储到数组中
11         for (int i = 0; i < byteList.size(); i++) {
12             byteArray[i] = byteList.get(i); // Byte对象自动拆箱为byte
13         }
14 
15         return byteArray;
16     }

 

调用方法:

 1     /**
 2      * 获取抓热图结果
 3      *
 4      * @throws IOException
 5      */
 6     @GetMapping("/jpegPicWithAppendData")
 7     public void jpegPicWithAppendData() throws IOException {
 8         // 直接下载文件到本地(HttpClient返回的报文不是ANSI编码,需要直接下载到本地,才是ANSI编码)
 9         String filePath = "F:\\isapi\\response\\response";
10         HttpClientUtils.download("http://192.168.3.28/ISAPI/Thermal/channels/2/thermometry/jpegPicWithAppendData?format=json",
11                 null,
12                 filePath);
13         byte[] bytes = FileUtil.readBytes(filePath);
14         // 解析热成像图片
15         saveImage(bytes);
16     }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/875488.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泥石流滑坡监测识别摄像机

泥石流滑坡监测识别摄像机具有重要意义。山区地势复杂、易发生泥石流滑坡等灾害,给当地居民和交通运输带来巨大风险。通过部署这种设备,可以实时监测潜在危险区域,并利用智能分析技术识别出可能发生泥石流滑坡的迹象,及时发出预警信号通知相关部门和居民进行疏散和避险,最…

跌倒识别摄像机

跌倒识别摄像机是一种结合了智能分析技术和监控技术的先进设备,在保障弱势群体安全、减少意外伤害方面具有重要意义。随着社会老龄化程度加剧以及对健康保障需求增加,相信这种先进设备将会在更多领域得到广泛应用,并为我们创造更加关爱、安全的社会环境。跌倒识别摄像机是一…

人流量检测识别摄像头

人流量检测识别摄像头是一种结合了监控摄像技术和智能分析技术的先进设备,旨在通过实时监测和分析监控画面中人员的数量、密度、流动方向等信息,识别不同人群特征并进行统计分析。这种摄像头在商业零售、公共安全、城市规划等领域有着广泛的应用前景。总体而言,人流量检测识…

工装检测摄像机

工装检测摄像机是一种结合了监控摄像技术和智能分析技术的先进设备,旨在通过实时监测和分析员工穿着的工作服装是否符合规定标准,识别是否存在违规穿着情况,并及时发出警报提醒相关人员。这种摄像机在生产制造、工业安全、医疗卫生等领域有着广泛的应用前景。总体而言,工装…

求生之路优化

一、启动选项中添加如下指令 -lv -novid -freq 60 +fps_max 60 -high -lv:降低血腥程度,僵尸死了就消失,降低内存负担 -novid:去掉开场动画 -freq 60:锁定屏幕刷新率,根据显示器刷新率设置 +fps_max 60:锁定帧数 -high:提高游戏在系统中的优先级 二、修改游戏设置

[致理书院-信息与计算科学] 大二上课程评估

我真吐了, 可是之日子还要继续下去先浅贴一张所谓的成绩单, 也不怕别人笑话... 的确是考得不好.这篇随笔的主要构成是真对每科的评估和一些与同学的交流吧, 可能没有什么有深度的东西, 只是单纯的就事论事罢了. 可能还会有一些神秘破防. 马克思基本原理 我几乎没听懂的一门课程…

跌倒监测摄像机

跌倒监测摄像机是一种结合了监控摄像技术和智能分析技术的先进设备,旨在通过实时监测和分析监控画面中人员的行为动态,识别是否有人发生跌倒或意外摔倒,并及时发出警报提醒相关人员。这种摄像机在医疗保健、养老院、家庭护理等领域有着广泛的应用前景。跌倒监测摄像机是一种…

读量子霸权14全球变暖

冰芯记录地球历史,重水比例反映温度。地球变暖加剧,人类活动为主要因素。量子计算机或助力准确预测天气,对抗全球变暖。1. 冰芯 1.1. 对冰芯的研究,因为它可以记录数千年来的天气1.1.1. 每一条横条纹都是由古代火山喷发释放的烟尘和灰烬形成的1.1.2. 通过测量不同条纹之间的…

【SaToken】 简化开发的身份认证与权限管理框架

之前进行鉴权、授权都要写一大堆代码。如果使用像Spring Security这样的框架,又要花好多时间学习,拿过来一用,好多配置项也不知道是干嘛用的,又不想了解。要是不用Spring Security,token的生成、校验、刷新,权限的验证分配,又全要自己写,想想都头大。 Spring Security太…

【AI安全】货运AI安全防控:违规载人治理

# 智能运营部 # 货拉拉技术 AI识别技术 前言 安全无小事,安全关乎每个人的切身利益,任何一个小的疏忽都可能导致重大的事故。在货运行业,确保人员和货物的安全是企业必须履行的基本责任。近年来,随着需求和业务量的高速增长,货运安全面临的挑战愈发严峻。货箱载人、违禁品…

Jailer实现十几种数据库的高效管理

数据库:推荐一款非常实用的数据库定时备份工具,大神必备(附下载)! 一、介绍 对于程序员来说,数据库管理是一个非常重要的环节。为了提高开发效率和数据一致性,开发人员经常需要在生产数据库和开发/测试环境之间传输数据。 Jailer 是一款强大的工具,能够帮助开发人员实现…

大模型部署 工具 ollama | AIGC

Ollama是一个集成了多种大型语言模型的工具,它支持模型的部署、运行以及API的整合和调用。 Ollama为不同操作系统的用户提供了便捷的安装方式,并具备丰富的命令行界面(CLI)和API接口,使得用户可以轻松地管理和运行大型模型。一、安装 Ollama的安装方式因操作系统而异,以下…