当前位置: 首页 > ops >正文

C#海康SDK—热成像测温篇

海康SDK—测温热像仪

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using PreviewDemo;
using System.Runtime.InteropServices;
using System.Threading;
using UnityEngine.UI;public class HK_Camera_Tool : MonoSingleton<HK_Camera_Tool>
{   private uint iLastErr = 0;public int m_lUserID = -1; //登录的返回值private CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo;private CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo;CHCNetSDK.LOGINRESULTCALLBACK LoginCallBack = null;private int ret; //NET_DVR_StartRemoteConfig  测温返回的句柄public static string fMaxTemperature;//最高温度值#region 海康SDK方法 /// <summary>/// 初始化/// </summary>public void _Init(){bool m_bInitSDK = CHCNetSDK.NET_DVR_Init();if (m_bInitSDK == false){Debug.Log("初始化失败!");return;}else{Debug.Log("初始化成功!");CHCNetSDK.NET_DVR_SetLogToFile(1, "C:\\SdkLogUnity\\", true);}}/// <summary>/// 登录/// </summary>/// <param name="iP"></param>/// <param name="port"></param>/// <param name="userName"></param>/// <param name="password"></param>public void _Login(string iP, string port, string userName, string password){struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO();if (m_lUserID < 0){//从textBox文本框读取字符串,转成byte数组之后,赋值给结构体对象中对应字段//设备IP地址或者域名byte[] byIP = System.Text.Encoding.Default.GetBytes(iP); struLogInfo.sDeviceAddress = new byte[129];byIP.CopyTo(struLogInfo.sDeviceAddress, 0);//设备用户名byte[] byUserName = System.Text.Encoding.Default.GetBytes(userName); struLogInfo.sUserName = new byte[64];byUserName.CopyTo(struLogInfo.sUserName, 0);//设备密码byte[] byPassword = System.Text.Encoding.Default.GetBytes(password);     struLogInfo.sPassword = new byte[64];byPassword.CopyTo(struLogInfo.sPassword, 0);struLogInfo.wPort = ushort.Parse(port);//设备服务端口号   ///改成自己的  这边注意视频流554 等不是端口 ,端口需要进海康相机自带平台去看一下  8008    8000struLogInfo.bUseAsynLogin = true; //是否异步登录:0- 否,1- 是 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();//登录设备 Login the devicem_lUserID = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo);if (m_lUserID < 0){iLastErr = CHCNetSDK.NET_DVR_GetLastError();Debug.Log("登陆失败_NET_DVR_Login_V40 failed, error code= " + iLastErr);//登录失败,输出错误号\               return;}else{Debug.Log("登陆成功!" + "返回iD:" + m_lUserID);}}else{//注销登录 Logout the device                if (!CHCNetSDK.NET_DVR_Logout(m_lUserID)){iLastErr = CHCNetSDK.NET_DVR_GetLastError();Debug.LogWarning("注销登录:" + iLastErr);return;}m_lUserID = -1;}}/// <summary>/// 测量最高温度 协程版本/// </summary>/// <returns></returns>public IEnumerator ThermometrySetting(){        Debug.Log("进入协程");yield return new WaitForSeconds(1f);Debug.Log("已延迟1s");//配置测温var size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND));CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND struThermCond = new CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND();struThermCond.dwSize = (uint)size;struThermCond.byRuleID = 0;       //规则ID,0代表获取全部规则,具体规则ID从1开始struThermCond.dwChan = 2;// dwChannel; //从1开始,0xffffffff代表获取全部通道 有两个相机 热成像仪在通道2上所以选择通道2IntPtr pCond = Marshal.AllocCoTaskMem(size);Marshal.StructureToPtr(struThermCond, pCond, false);ret = CHCNetSDK.NET_DVR_StartRemoteConfig(m_lUserID, 3629, pCond, size, Callback, IntPtr.Zero);if (ret < 0){Debug.Log("配置测温失败, 错误代码:" + CHCNetSDK.NET_DVR_GetLastError()); //登录失败,输出错误号          }yield return new WaitForSeconds(1f);if (CHCNetSDK.NET_DVR_StopRemoteConfig(ret)){StopCoroutine(ThermometrySetting());Debug.Log("已停止测温数据");}else{Debug.Log("停止测温数据出错:" + CHCNetSDK.NET_DVR_GetLastError());}}    /// <summary>/// 开始测量最高温度/// </summary>public void Start_ThermometrySetting(){var size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND));CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND struThermCond = new CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND();struThermCond.dwSize = (uint)size;struThermCond.byRuleID = 0;       //规则ID,0代表获取全部规则,具体规则ID从1开始struThermCond.dwChan = 2;// dwChannel; //从1开始,0xffffffff代表获取全部通道 有两个相机 热成像仪在通道2上所以选择通道2IntPtr pCond = Marshal.AllocCoTaskMem(size);Marshal.StructureToPtr(struThermCond, pCond, false);ret = CHCNetSDK.NET_DVR_StartRemoteConfig(m_lUserID, 3629, pCond, size, Callback, IntPtr.Zero);if (ret < 0){Debug.Log("配置测温失败, 错误代码:" + CHCNetSDK.NET_DVR_GetLastError()); //登录失败,输出错误号          }}/// <summary>/// 停止测量最高温度/// </summary>public void Stop_ThermometrySetting(){if (CHCNetSDK.NET_DVR_StopRemoteConfig(ret)){StopCoroutine(ThermometrySetting());Debug.Log("已停止测温数据");}else{Debug.Log("停止测温数据出错:" + CHCNetSDK.NET_DVR_GetLastError());}}/// <summary>/// 测温方法- 回调函数/// </summary>/// <param name="dwType"></param>/// <param name="lpBuffer"></param>/// <param name="dwBufLen"></param>/// <param name="pUserData"></param>private void Callback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData){Debug.Log("开始测温...");var retMes = Marshal.PtrToStructure<CHCNetSDK.NET_DVR_THERMOMETRY_UPLOAD>(lpBuffer);// Debug.Log("获取到温度数值:"+retMes.struLinePolygonThermCfg.fMaxTemperature.ToString("F1"));fMaxTemperature = retMes.struLinePolygonThermCfg.fMaxTemperature.ToString("F1");//Debug.Log("温度静态信息输出:" + fMaxTemperature);Debug.Log("停止测温数据中...");}/// <summary>/// 画面截图/// </summary>/// <param name="登录的返回值"></param>/// <param name="通道号"></param>/// <param name="储存路径和名称"></param>public void JPEGEvent(int lUserID, int lChannel, string pathAndName){//图片保存路径和文件名 the path and file name to save//string sJpegPicFileName = Application.streamingAssetsPath + "/JPEG_test.jpg";// int lChannel = 1; //通道号 Channel numberCHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();lpJpegPara.wPicQuality = 0; //图像质量 Image qualitylpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档//JPEG抓图 Capture a JPEG pictureif (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(lUserID, lChannel, ref lpJpegPara, pathAndName)){iLastErr = CHCNetSDK.NET_DVR_GetLastError();Debug.Log("抓图报错:" + iLastErr);return;}else{Debug.Log("截图已保存:" + pathAndName);}return;}/// <summary>/// 退出/// </summary>public void _Disable(){        Debug.Log("用户注销...");CHCNetSDK.NET_DVR_Logout(m_lUserID);m_lUserID = -1;        CHCNetSDK.NET_DVR_Cleanup();Debug.Log("SDK资源卸载...");}#endregion}
http://www.xdnf.cn/news/18197.html

相关文章:

  • gitlab、jenkins等应用集成ldap
  • package.json详细字段解释
  • 大数据技术栈 —— Redis与Kafka
  • JavaScript 性能优化实战:从分析到落地的全指南
  • 网络间的通用语言TCP/IP-网络中的通用规则4
  • Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
  • PyTorch自动求导
  • OpenHarmony之打造全场景智联基座的“分布式星链 ”WLAN子系统
  • Java试题-选择题(11)
  • Consul- acl机制!
  • 【Pycharm虚拟环境中安装Homebrew,会到系统中去吗】
  • 【牛客刷题】岛屿数量问题:BFS与DFS解法深度解析
  • Java NIO (New I/O) 深度解析
  • windows电脑对于dell(戴尔)台式的安装,与创建索引盘,系统迁移到新硬盘
  • Nacos-8--分析一下nacos中的AP和CP模式
  • 从现场到云端的“通用语”:Kepware 在工业互联中的角色、使用方法与本土厂商(以胡工科技为例)的差异与优势
  • vLLM加载lora
  • 【MATLAB例程】水下机器人AUV的长基线定位,适用于三维环境,EKF融合长基线和IMU数据,锚点数量可自适应,附下载链接
  • (一)八股(数据库/MQ/缓存)
  • 在Ubuntu上安装并使用Vue2的基本教程
  • week2-[一维数组]最大元素
  • 监督分类——最小距离分类、最大似然分类、支持向量机
  • 第一章 认识单片机
  • 一个基于前端技术的小狗寿命阶段计算网站,帮助用户了解狗狗在不同年龄阶段的特点和需求。
  • 芯显 15.6寸G156HAE02.0 FHD 宽温液晶模组技术档案
  • Spring Boot应用实现图片资源服务
  • 【实时Linux实战系列】基于实时Linux的物联网系统设计
  • [嵌入式embed][Qt]一个新手Qt开发环境5.12.12
  • VS Code 终端完全指南
  • 机器学习中的「损失函数」:模型优化的核心标尺