服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - VS2022调试通过海康摄像头烟火识别SDK的实现

VS2022调试通过海康摄像头烟火识别SDK的实现

2022-09-09 14:59zhangchao19890805 C/C++

本文主要介绍了VS2022调试通过海康摄像头烟火识别SDK的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

下面是我根据海康官方文档代码,放到VS 2022 版本中调试通过后的代码:

#include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "HCNetSDK.h"

using namespace std;

//时间解析宏定义
#define GET_YEAR(_time_)      (((_time_)>>26) + 2000) 
#define GET_MONTH(_time_)     (((_time_)>>22) & 15)
#define GET_DAY(_time_)       (((_time_)>>17) & 31)
#define GET_HOUR(_time_)      (((_time_)>>12) & 31) 
#define GET_MINUTE(_time_)    (((_time_)>>6)  & 63)
#define GET_SECOND(_time_)    (((_time_)>>0)  & 63)



BOOL CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void* pUser)
{
  
  switch (lCommand)
  {
  case COMM_FIREDETECTION_ALARM: //火点检测报警
  {
      printf("fire192.168.1.31 \n");
          
      NET_DVR_FIREDETECTION_ALARM struFireDetection = { 0 };
      memcpy(&struFireDetection, pAlarmInfo, sizeof(NET_DVR_FIREDETECTION_ALARM));
      printf("火点检测报警: RelativeTime:%d, AbsTime:%d, PTZ{PanPos:%d, TiltPos:%d, ZoomPos:%d}, \
      PicDataLen:%d, DevInfo{DevIP:%s, Port:%d, Channel:%d, IvmsChannel:%d}, \
      FireMaxTemperature:%d, TargetDistance:%d, fireRectInfo{fX:%f,fY:%f,fWidth%f,fHeight%f}, \
      fireMaxTemperaturePoint{fX:%f,fY:%f}\n", struFireDetection.dwRelativeTime, \
          struFireDetection.dwAbsTime, struFireDetection.wPanPos, struFireDetection.wTiltPos, \
          struFireDetection.wZoomPos, struFireDetection.dwPicDataLen, \
          struFireDetection.struDevInfo.struDevIP.sIpV4, struFireDetection.struDevInfo.wPort, \
          struFireDetection.struDevInfo.byChannel, struFireDetection.struDevInfo.byIvmsChannel, \
          struFireDetection.wFireMaxTemperature, struFireDetection.wTargetDistance, \
          struFireDetection.struRect.fX, struFireDetection.struRect.fY, struFireDetection.struRect.fWidth, \
          struFireDetection.struRect.fHeight, struFireDetection.struPoint.fX, struFireDetection.struPoint.fY);

      
      NET_DVR_TIME struAbsTime = { 0 };
      struAbsTime.dwYear = GET_YEAR(struFireDetection.dwAbsTime);
      struAbsTime.dwMonth = GET_MONTH(struFireDetection.dwAbsTime);
      struAbsTime.dwDay = GET_DAY(struFireDetection.dwAbsTime);
      struAbsTime.dwHour = GET_HOUR(struFireDetection.dwAbsTime);
      struAbsTime.dwMinute = GET_MINUTE(struFireDetection.dwAbsTime);
      struAbsTime.dwSecond = GET_SECOND(struFireDetection.dwAbsTime);

      //保存报警抓拍图片
      if (struFireDetection.dwPicDataLen > 0 && struFireDetection.pBuffer != NULL)
      {
          char cFilename[256] = { 0 };
          HANDLE hFile;
          DWORD dwReturn;

          char chTime[128];
          sprintf_s(chTime, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d", struAbsTime.dwYear, struAbsTime.dwMonth, struAbsTime.dwDay, struAbsTime.dwHour, struAbsTime.dwMinute, struAbsTime.dwSecond);

          sprintf_s(cFilename, "FireDetectionPic[%s][%s].jpg", struFireDetection.struDevInfo.struDevIP.sIpV4, chTime);
          LPCWSTR tmp;
          // begin added by zhangchao
          tmp = L"FireDetectionPic31.jpg";
          // end  added by zhangchao
          //printf("%s", tmp);

          hFile = CreateFile(tmp, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
          if (hFile == INVALID_HANDLE_VALUE)
          {
              break;
          }
          WriteFile(hFile, struFireDetection.pBuffer, struFireDetection.dwPicDataLen, &dwReturn, NULL);
          CloseHandle(hFile);
          hFile = INVALID_HANDLE_VALUE;
      }
  }
  break;
  default:
      printf("other192.168.1.31 \n");
      printf("其他报警,报警信息类型: %d\n", lCommand);
      break;
  }

  return TRUE;
}



void RunCam(const char* ip) {
  //---------------------------------------
  // 初始化
  NET_DVR_Init();
  //设置连接时间与重连时间
  NET_DVR_SetConnectTime(2000, 1);
  NET_DVR_SetReconnect(10000, true);

  //---------------------------------------
  // 注册设备
  LONG lUserID;

  //登录参数,包括设备地址、登录用户、密码等
  NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };
  struLoginInfo.bUseAsynLogin = 0; //同步登录方式
  strcpy_s(struLoginInfo.sDeviceAddress, ip);
  struLoginInfo.wPort = 8000; //设备服务端口
  strcpy_s(struLoginInfo.sUserName, "your_username"); //设备登录用户名
  strcpy_s(struLoginInfo.sPassword, "your_password"); //设备登录密码

  //设备信息, 输出参数
  NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 };

  lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
  if (lUserID < 0)
  {
      printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
      NET_DVR_Cleanup();
      return;
  }

  //设置报警回调函数
  NET_DVR_SetDVRMessageCallBack_V31(MessageCallback, NULL);
  

  //启用布防
  LONG lHandle;
  NET_DVR_SETUPALARM_PARAM  struAlarmParam = { 0 };
  struAlarmParam.dwSize = sizeof(struAlarmParam);
  //火点检测不需要设置其他报警布防参数,不支持

  lHandle = NET_DVR_SetupAlarmChan_V41(lUserID, &struAlarmParam);
  if (lHandle < 0)
  {
      printf("NET_DVR_SetupAlarmChan_V41 error, %d\n", NET_DVR_GetLastError());
      NET_DVR_Logout(lUserID);
      NET_DVR_Cleanup();
      return;
  }

  Sleep(50000); //等待过程中,如果设备上传报警信息,在报警回调函数里面接收和处理报警信息


  //撤销布防上传通道
  if (!NET_DVR_CloseAlarmChan_V30(lHandle))
  {
      printf("NET_DVR_CloseAlarmChan_V30 error, %d\n", NET_DVR_GetLastError());
      NET_DVR_Logout(lUserID);
      NET_DVR_Cleanup();
      return;
  }

  //注销用户
  NET_DVR_Logout(lUserID);
  //释放SDK资源
  NET_DVR_Cleanup();
}


void main() {
  RunCam("192.168.1.31");
  return;
}

 

如何配置VS 2022 ?

第一步:打开窗口顶部 【项目】菜单,选中 【<某某项目>属性】。

第二步:在打开的对话框中,左侧菜单选择 【C/C++】=> 【常规】,选中右侧附加包含目录中,点击右侧出现的向下箭头,点击编辑,在打开的对话框中如下填写:

VS2022调试通过海康摄像头烟火识别SDK的实现

其中 D:\ws\vc\emptycam\hkheader 文件夹放着海康的头文件,分别是: DataType.h、DecodeCardSdk.h、HCNetSDK.h、plaympeg4.h。

第三步:左侧菜单选择 【链接器】=> 【常规】。右侧选中附加库目录,点击右侧小三角,点击编辑,打开对话框。

VS2022调试通过海康摄像头烟火识别SDK的实现

文件夹 D:\ws\vc\emptycam\hkdll 是放海康dll文件的地方。文件如下图所示:

VS2022调试通过海康摄像头烟火识别SDK的实现

第四步:左侧菜单选择 【链接器】=> 【输入】。右侧选中【附加依赖项】点击右侧小三角,点击编辑,打开对话框。内容按照图片里的文字进行填写。

VS2022调试通过海康摄像头烟火识别SDK的实现

到此这篇关于VS2022调试通过海康摄像头烟火识别SDK的实现的文章就介绍到这了,更多相关VS2022海康摄像头烟火识别SDK内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/zhangchao19890805/article/details/122798533

延伸 · 阅读

精彩推荐
  • C/C++C++实现大数相乘算法

    C++实现大数相乘算法

    这篇文章主要为大家详细介绍了C++实现大数相乘算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    WinOneKey3782021-08-02
  • C/C++C++11 constexpr使用详解

    C++11 constexpr使用详解

    constexpr是一种比const 更严格的束缚, 它修饰的表达式本身在编译期间可知, 并且编译器会尽可能的 evaluate at compile time,本文重点给大家介绍C++11 constexpr使用...

    滴水瓦9242022-03-11
  • C/C++浅析C++编程当中的线程

    浅析C++编程当中的线程

    这篇文章主要介绍了浅析C++编程当中的线程,线程在每一种编程语言中都是重中之重,需要的朋友可以参考下...

    低调小一9052021-03-04
  • C/C++深入浅析 C++ 调用 Python 模块

    深入浅析 C++ 调用 Python 模块

    Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中调用 Python 模块。接下来通过本文给大家介绍 C++ 调用 Python 模块的相关知识,需要的朋友参考下吧...

    C++教程网10672021-03-27
  • C/C++基于OpenCV读取摄像头实现单个人脸验证MFC程序

    基于OpenCV读取摄像头实现单个人脸验证MFC程序

    这篇文章主要为大家详细介绍了基于OpenCV读取摄像头实现单个人脸验证MFC程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_1320211172021-08-01
  • C/C++C++中const的特性的使用

    C++中const的特性的使用

    这篇文章主要介绍了C++中const的特性的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    怎因一双媚眼惹尘埃4702021-09-03
  • C/C++C/C++中带空格字符串的输入讲解

    C/C++中带空格字符串的输入讲解

    这篇文章主要给大家介绍了关于如何解决C++中带空格字符串的输入问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧...

    zj_ahu5962021-12-29
  • C/C++C++虚函数表和虚析构介绍

    C++虚函数表和虚析构介绍

    这篇文章主要介绍了C++虚函数表和虚析构,虚函数表是C++实现多态的基础,多态是面向对象的三大特性之一,下面文章我们一起来看看详细内容,需要的朋友...

    学渣的C/C++10632022-02-22