海康威视热成像实时测温java - 23版

在20年写了一篇实时测温demo博客,看来帮了不少人。今天刚好又有需求,需要采温。也碰到了不少问题,特此记录

1、环境

摄像头:海康 型号:DS-2TD2528T-7/Q  序列:EA0406775

服务器:winServer 

JDK8

2、调试

之前写的demo下载下来。

先把lib 放在D盘下,这边的lib仅限于win64的,如果是其他平台。

海康官网平台下载

后续把账号密码一改,直接发布试一下。

结果

排查故障

询问海康

配置开启功能

登录之后,配置

有些用户会发现,没有本地这一项,那么请看下图。下载插件,刷新即可。

等我配置好之后,重启之后还是code11。静下心来,自己研究程序。

应该是哪里传值不对。

海康的人让我下载Demo看下,其实就是他们的一个测试exe。间接了解海康测温原理,抓图分析。这个工具可以很明显是摄像头没有配置好,还是程序有问题。

这边可以看到,是程序自己没有配置好。

开始琢磨。byRuleID 规则ID是1,我不是很明白 ,dwChan通道ID 是2没有问题。

最后查看相关文档,规则ID 普通模式下只能是0。专家模式下如果只获取对应ID的温度就输入对应规则ID。看图

普通模式和专家模式是互斥的。

最后程序调整下。成功了

3、上代码

runnable

/*** @author cmy* @date 2023/9/14 14:03*/
@Slf4j
public class ReadDataThread implements Runnable {HCNetSDK hCNetSDK;ThermInfoCallback thermInfoCallback;DeviceBean bean;public ReadDataThread(HCNetSDK hCNetSDK, ThermInfoCallback thermInfoCallback, DeviceBean bean){this.hCNetSDK = hCNetSDK;this.thermInfoCallback = thermInfoCallback;this.bean = bean;}@Overridepublic void run() {HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();NativeLong lUserID = new NativeLong(-1);lUserID = hCNetSDK.NET_DVR_Login_V30(bean.getIp(),bean.getPort(), bean.getUserName(), bean.getPassWord(), m_strDeviceInfo);if (lUserID.longValue() == -1){log.error(bean.getIp()+"登录失败,错误码为"+hCNetSDK.NET_DVR_GetLastError());return;}else{log.info(bean.getIp()+"登录成功!"+lUserID);}HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND thermometry = new HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND();thermometry.dwSize = thermometry.size();thermometry.byRuleID = 0;thermometry.dwChan = 2;thermometry.write();Pointer pUserData = new Memory(37);//TODO 传数据pUserData.setString(0, bean.getIp());pUserData.setInt(13,222);while (true){NativeLong lHandle = hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, 3629, thermometry.getPointer(), thermometry.size(), thermInfoCallback, pUserData);if (lHandle.intValue() < 0){log.error(bean.getIp()+"NET_DVR_GET_REALTIME_THERMOMETRY failed, error code: "+ hCNetSDK.NET_DVR_GetLastError());break;}else{log.info(bean.getIp()+"NET_DVR_GET_REALTIME_THERMOMETRY is successful!");}try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}//        if(!hCNetSDK.NET_DVR_StopRemoteConfig(lHandle)){
//            log.error(bean.getIp()+"NET_DVR_StopRemoteConfig failed, error code:"+ hCNetSDK.NET_DVR_GetLastError());
//        }
//
//        boolean logoutStatus = hCNetSDK.NET_DVR_Logout(lUserID);
//        if(logoutStatus){
//            log.info(bean.getIp()+"Logout success");
//        }else{
//            log.error(bean.getIp()+"Logout fail");
//        }}
}

main

static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;@Overridepublic void run() {boolean initStatus = hCNetSDK.NET_DVR_Init();if(initStatus){log.info("初始化成功");}else{log.error("初始化失败"+hCNetSDK.NET_DVR_GetCardLastError_Card());}hCNetSDK.NET_DVR_SetConnectTime(2000, 1);hCNetSDK.NET_DVR_SetReconnect(10000, true);hCNetSDK.NET_DVR_SetLogToFile(3,"D:\\log",false);List<DeviceBean> deviceList = new ArrayList<>(3);deviceList.add(new DeviceBean("192.168.1.70",(short) 8000,"admin","a12345678"));deviceList.add(new DeviceBean("192.168.1.81",(short) 8000,"admin","a12345678"));deviceList.add(new DeviceBean("192.168.1.91",(short) 8000,"admin","a12345678"));for(DeviceBean bean : deviceList){new Thread(new ReadDataThread(hCNetSDK, new ThermInfoCallback(), bean)).start();}}

callback

@Slf4j
public class ThermInfoCallback implements HCNetSDK.FRemoteConfigCallback {@Overridepublic void invoke(int dwType, Pointer pBuffer, int dwBufLen, Pointer pUserData) {log.info("dwType:"+dwType+"dwBufLen:"+dwBufLen+"pUserData:"+pUserData.getString(0));switch (dwType){case 0:HCNetSDK.REMOTECONFIGSTATUS struCfgStatus  = new HCNetSDK.REMOTECONFIGSTATUS();struCfgStatus.write();Pointer pCfgStatus = struCfgStatus.getPointer();pCfgStatus.write(0, pBuffer.getByteArray(0, struCfgStatus.size()), 0,struCfgStatus.size());struCfgStatus.read();int iStatus = 0;for(int i=0;i<4;i++){int ioffset = i*8;int iByte = struCfgStatus.byStatus[i]&0xff;iStatus = iStatus + (iByte << ioffset);}switch (iStatus){case 1000:log.error("实时测温回调成功,dwStatus:" + iStatus);break;case 1001:log.error("正在获取实时测温回调数据中,dwStatus:" + iStatus);break;case 1002:int iErrorCode = 0;for(int i=0;i<4;i++){int ioffset = i*8;int iByte = struCfgStatus.byErrorCode[i]&0xff;iErrorCode = iErrorCode + (iByte << ioffset);}log.error(pUserData.getString(0)+"获取实时测温回调数据失败, dwStatus:" + iStatus + "错误号:" + iErrorCode);break;default:break;}break;case 2:HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD m_struThermometryInfo = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD();m_struThermometryInfo.write();Pointer pInfoV30 = m_struThermometryInfo.getPointer();pInfoV30.write(0, pBuffer.getByteArray(0, m_struThermometryInfo.size()), 0,m_struThermometryInfo.size());m_struThermometryInfo.read();if(m_struThermometryInfo.byRuleCalibType == 0){System.out.println("点测温信息:"+ m_struThermometryInfo.struPointThermCfg.fTemperature);}if(m_struThermometryInfo.byRuleCalibType == 1 || m_struThermometryInfo.byRuleCalibType == 2){log.info("框/线测温信息:fMaxTemperature__"+m_struThermometryInfo.struLinePolygonThermCfg.fMaxTemperature);log.info("   fMinTemperature__"+m_struThermometryInfo.struLinePolygonThermCfg.fMinTemperature);log.info("  fAverageTemperature__"+m_struThermometryInfo.struLinePolygonThermCfg.fAverageTemperature);log.info("   fTemperatureDiff__"+m_struThermometryInfo.struLinePolygonThermCfg.fTemperatureDiff);log.info("    fCenterPointTemperature__"+m_struThermometryInfo.fCenterPointTemperature);}break;default:break;}}
}

在此说明一下pUserData传值到callback,看此博客Pointer传值

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

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

相关文章

计算机丢失mfc140u.dll怎么办,mfc140u.dll丢失的解决方法分享

随着科技的飞速发展&#xff0c;计算机已经成为了人们日常生活和工作中不可或缺的工具。然而&#xff0c;在使用计算机的过程中&#xff0c;用户可能会遇到各种问题&#xff0c;其中计算机丢失 mfc140u.dll 无法运行的问题就是一个比较常见的困扰。小编将从以下几个方面对这个问…

为何红黑树在B/B+树之上仍然占据重要地位?

为何红黑树在B/B树之上仍然占据重要地位&#xff1f; 引言二、红黑树和B/B树的基本原理2.1、红黑树的特点和性质2.2、B/B树的特点和性质2.3、红黑树和B/B树的比较 三、B/B树相对于红黑树的优势四、红黑树仍然占据重要地位的原因总结 博主简介 &#x1f4a1;一个热爱分享高性能服…

SQL 2008 R2 和vCenter 5.1安装步骤与AQ

准备情况&#xff1a; Windows 2008 r2 sp1 64bit操作系统 Sql 2008 完整版安装包&#xff08;名称&#xff1a;SQLFULL_CHS.iso 安装完成会安装managment&#xff09; vCenter完整版安装包&#xff08;名称&#xff1a;VMware-VIMSetupall-5.1.0-799735.iso&#xff09; …

string的使用和模拟实现

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…

电商ERP供应链模块解析——采购+入库流程

电商ERP供应链模块包括采购—仓储—物流 3 个模块&#xff0c;本文对采购—仓储中的采购入库流程的系统设计做一个概述。 其中入库部分&#xff0c;相较于 WMS&#xff0c;ERP 系统更注重数据在上下游流通&#xff0c;所以更注重记录结果&#xff1b;WMS 更注重提升仓库内作业…

大模型赛道如何实现华丽的弯道超车

导读&#xff1a;Alluxio作为一款强大的分布式统一大数据虚拟文件系统&#xff0c;已经在众多领域展现出了其卓越的应用价值&#xff0c;并且为AI/ML训练赋能提供了一个全新的解决方案。 在人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域&#x…

我的C#基础

using System; namespace HelloWorldApplication }TOC 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。 为帮助您在CSDN创作的文章获得更多曝光和关注&#xff0c;我们为您提供了专属福利&#xff1a; 已注册且未在CSDN平台发布过…

使用SSH地址拉取远程仓库代码报下面的错误

说明&#xff1a;配置了SSH秘钥后&#xff0c;使用SSH地址克隆代码&#xff0c;依旧无法拉取代码&#xff0c;提示下面这个信息。 Their offer&#xff1a;ssh-rsa&#xff0c;ssh-dss fatal&#xff1a;Could not read from remote repository. Please make sure you have the…

【C++】详解std::mutex

2023年9月11日&#xff0c;周一中午开始 2023年9月11日&#xff0c;周一晚上23&#xff1a;25写完 目录 概述头文件std::mutex类的成员类型方法没有std::mutex会产生什么问题问题一&#xff1a;数据竞争问题二&#xff1a;不一致lock和unlock死锁 概述 std::mutex是C标准库中…

PostgreSQL 事务并发锁

文章目录 PostgreSQL 事务大家都知道的 ACID事务的基本使用保存点 PostgreSQL 并发并发问题MVCC PostgreSQL 锁机制表锁行锁 总结 PostgreSQL 事务 大家都知道的 ACID 在日常操作中&#xff0c;对于一组相关操作&#xff0c;通常要求要么都成功&#xff0c;要么都失败。在关系…

ESIM实战文本匹配

引言 今天我们来实现ESIM文本匹配&#xff0c;这是一个典型的交互型文本匹配方式&#xff0c;也是近期第一个测试集准确率超过80%的模型。 我们来看下是如何实现的。 模型架构 我们主要实现左边的ESIM网络。 从下往上看&#xff0c;分别是 输入编码层(Input Ecoding) 对前…

智慧工地:实现作业区域安全管控

智慧工地是围绕工程现场人、机、料、法、环及施工过程中质量、安全、进度、成本等各项数据满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效。 建设工程安全文明施工与质量提升,全方位的监测施工人员、各类器械设备、消防安全隐患&#xff0c;并提前对风险进行预警…