海康文档链接: 海康文档链接

硬件是海康立式拍照+测量体温的门禁设备。使用的时候用户站在设备摄像头前,设备拍照并且同时测量用户体温。

下面是我根据海康文档中明眸门禁 => 报警事件 => 报警布防 中的示例C++代码,放入VS2022开发工具中,调试C++代码通过后的代码,并且逻辑做了一定修改,是拍照的时候同时记录下体温。

#include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "HCNetSDK.h"
using namespace std;char* gip;
int iNum = 0; //已保存的图片个数
void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void* pUser)
{// 是否有体温信息int hasTemperature = FALSE;// 体温float fCurrTemperature = 0;switch (lCommand){case COMM_ALARM_ACS: //门禁主机报警信息{NET_DVR_ACS_ALARM_INFO struAcsAlarmInfo = { 0 };memcpy(&struAcsAlarmInfo, pAlarmInfo, sizeof(NET_DVR_ACS_ALARM_INFO));printf("门禁主机报警信息[0x5002]: struTim{%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d}, dwMajor[0x%x], dwMinor[0x%x], byCardNo[%s], dwEmployeeNo[%d], dwCardReaderNo[%d], "\"ip[%s]\n",struAcsAlarmInfo.struTime.dwYear, struAcsAlarmInfo.struTime.dwMonth, struAcsAlarmInfo.struTime.dwDay, struAcsAlarmInfo.struTime.dwHour,struAcsAlarmInfo.struTime.dwMinute, struAcsAlarmInfo.struTime.dwSecond, struAcsAlarmInfo.dwMajor, struAcsAlarmInfo.dwMinor,struAcsAlarmInfo.struAcsEventInfo.byCardNo, struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo, struAcsAlarmInfo.struAcsEventInfo.dwCardReaderNo,struAcsAlarmInfo.struRemoteHostAddr.sIpV4);//扩展信息,包含以人为中心下发人员触发事件中的工号参数if (struAcsAlarmInfo.byAcsEventInfoExtend == 1){NET_DVR_ACS_EVENT_INFO_EXTEND  struAcsEventInfoExtend = { 0 };memset(&struAcsEventInfoExtend, 0, sizeof(struAcsEventInfoExtend));memcpy(&struAcsEventInfoExtend, struAcsAlarmInfo.pAcsEventInfoExtend, sizeof(struAcsEventInfoExtend));printf("门禁扩展事件信息: dwFrontSerialNo[%d], byUserType[%d], byEmployeeNo[%s]\n", struAcsEventInfoExtend.dwFrontSerialNo,struAcsEventInfoExtend.byUserType, (char*)struAcsEventInfoExtend.byEmployeeNo);}//扩展信息,包含人体测温温度数据if (struAcsAlarmInfo.byAcsEventInfoExtendV20 == 1){NET_DVR_ACS_EVENT_INFO_EXTEND_V20 struAcsEventInfoExtendV20 = { 0 };memcpy(&struAcsEventInfoExtendV20, struAcsAlarmInfo.pAcsEventInfoExtendV20, sizeof(struAcsEventInfoExtendV20));if (struAcsEventInfoExtendV20.byRemoteCheck != 0){//需要远程核验printf("remote check:%d\n", struAcsEventInfoExtendV20.byRemoteCheck);}if (struAcsEventInfoExtendV20.fCurrTemperature != 0){hasTemperature = TRUE;fCurrTemperature = struAcsEventInfoExtendV20.fCurrTemperature;printf("temperature[%f]fX[%f]fY[%f]byThermometryUnit[%d]byIsAbnomalTemperature[%d]\n",struAcsEventInfoExtendV20.fCurrTemperature, struAcsEventInfoExtendV20.struRegionCoordinates.fX,struAcsEventInfoExtendV20.struRegionCoordinates.fY, struAcsEventInfoExtendV20.byThermometryUnit,struAcsEventInfoExtendV20.byIsAbnomalTemperature);}}//保存报警抓拍图片if (struAcsAlarmInfo.dwPicDataLen > 0 && struAcsAlarmInfo.pPicData != NULL && hasTemperature){char cFilename[256] = { 0 };char chTime[128];sprintf_s(chTime, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d", struAcsAlarmInfo.struTime.dwYear, struAcsAlarmInfo.struTime.dwMonth,struAcsAlarmInfo.struTime.dwDay, struAcsAlarmInfo.struTime.dwHour, struAcsAlarmInfo.struTime.dwMinute,struAcsAlarmInfo.struTime.dwSecond);// 拼接输出文件名称sprintf_s(cFilename, "D:\\yourpath\\COMM_ALARM_ACS_CapPic[%d][%s][%f][%s].jpg", pAlarmer->lUserID, chTime, fCurrTemperature, gip);FILE *fSnapPicPlate;fopen_s(&fSnapPicPlate, cFilename, "wb");fwrite(struAcsAlarmInfo.pPicData, struAcsAlarmInfo.dwPicDataLen, 1, fSnapPicPlate);fclose(fSnapPicPlate);iNum++;}}break;case COMM_ID_INFO_ALARM: //门禁主机报警信息 - 身份证{NET_DVR_ID_CARD_INFO_ALARM struIDCardInfo = { 0 };memcpy(&struIDCardInfo, pAlarmInfo, sizeof(NET_DVR_ID_CARD_INFO_ALARM));printf("门禁身份证刷卡信息[0x5200]: struTim{%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d}, dwMajor[0x%x], dwMinor[0x%x], byName[%s], byIDNum[%s], dwCardReaderNo[%d]" \", ip[%s]\n",struIDCardInfo.struSwipeTime.wYear, struIDCardInfo.struSwipeTime.byMonth, struIDCardInfo.struSwipeTime.byDay, struIDCardInfo.struSwipeTime.byHour,struIDCardInfo.struSwipeTime.byMinute, struIDCardInfo.struSwipeTime.bySecond, struIDCardInfo.dwMajor, struIDCardInfo.dwMinor,(char*)struIDCardInfo.struIDCardCfg.byName, (char*)struIDCardInfo.struIDCardCfg.byIDNum, struIDCardInfo.dwCardReaderNo, struIDCardInfo.struRemoteHostAddr.sIpV4);//扩展信息,包含人体测温温度数据if (struIDCardInfo.byIDCardInfoExtend == 1){NET_DVR_ID_CARD_INFO_EXTEND struIDCardExtendV20 = { 0 };memcpy(&struIDCardExtendV20, struIDCardInfo.pIDCardInfoExtend, sizeof(struIDCardExtendV20));if (struIDCardExtendV20.byRemoteCheck != 0){//需要远程核验printf("remote check:%d\n", struIDCardExtendV20.byRemoteCheck);}if (struIDCardExtendV20.fCurrTemperature != 0){hasTemperature = TRUE;fCurrTemperature = struIDCardExtendV20.fCurrTemperature;printf("temperature[%f]fX[%f]fY[%f]byThermometryUnit[%d]byIsAbnomalTemperature[%d]\n",struIDCardExtendV20.fCurrTemperature, struIDCardExtendV20.struRegionCoordinates.fX,struIDCardExtendV20.struRegionCoordinates.fY, struIDCardExtendV20.byThermometryUnit,struIDCardExtendV20.byIsAbnomalTemperature);}}//保存身份证图片数据大小if (struIDCardInfo.dwPicDataLen > 0 && struIDCardInfo.pPicData != NULL && hasTemperature){char cCardFilename[256] = { 0 };char chTime[128];sprintf_s(chTime, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d", struIDCardInfo.struSwipeTime.wYear, struIDCardInfo.struSwipeTime.byMonth,struIDCardInfo.struSwipeTime.byDay, struIDCardInfo.struSwipeTime.byHour,struIDCardInfo.struSwipeTime.byMinute, struIDCardInfo.struSwipeTime.bySecond);// 拼接输出文件名称sprintf_s(cCardFilename, "D:\\yourpath\\COMM_ID_INFO_ALARM_IDCardPic[%d][%s][%f][%s].jpg", pAlarmer->lUserID, chTime, fCurrTemperature, gip);FILE* fSnapPicPlate;fopen_s(&fSnapPicPlate, cCardFilename, "wb");fwrite(struIDCardInfo.pPicData, struIDCardInfo.dwPicDataLen, 1, fSnapPicPlate);fclose(fSnapPicPlate);iNum++;}//保存抓拍图片数据大小if (struIDCardInfo.dwCapturePicDataLen > 0 && struIDCardInfo.pCapturePicData != NULL && hasTemperature){char cFilename[256] = { 0 };char chTime[128];sprintf_s(chTime, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d", struIDCardInfo.struSwipeTime.wYear, struIDCardInfo.struSwipeTime.byMonth,struIDCardInfo.struSwipeTime.byDay, struIDCardInfo.struSwipeTime.byHour,struIDCardInfo.struSwipeTime.byMinute, struIDCardInfo.struSwipeTime.bySecond);// 拼接输出文件名称sprintf_s(cFilename, "D:\\yourpath\\COMM_ID_INFO_ALARM_CapPic[%d][%s][%f][%s].jpg", pAlarmer->lUserID, chTime, fCurrTemperature, gip);FILE* fSnapPicPlate;fopen_s(&fSnapPicPlate, cFilename, "wb");fwrite(struIDCardInfo.pCapturePicData, struIDCardInfo.dwCapturePicDataLen, 1, fSnapPicPlate);fclose(fSnapPicPlate);iNum++;}}break;default:printf("其他报警,报警信息类型: %d\n", lCommand);break;}return;
}int main(int argc, char* argv[]) {cout << "The program starts." << endl;if (argc < 2) {cout << "NoIP" << endl;return 0;}char* ip = argv[1];gip = ip;cout << ip << endl;//---------------------------------------// 初始化NET_DVR_Init();char arr[] = "D:\\ws\\ry\\junan\\vclog\\temperature\\";char* logFileDir = arr;NET_DVR_SetLogToFile(3, logFileDir, FALSE);//设置连接时间与重连时间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); //设备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 0;}//设备登录成功,获取设备字符集编码类型printf("Login successfully, byCharEncodeType: %d\n", struDeviceInfoV40.byCharEncodeType);//设置报警回调函数NET_DVR_SetDVRMessageCallBack_V50(0, 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 failed, error code:  %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return 0;}//事件信息在回调函数里面获取//控制台输入q退出程序,否则一直运行
//  char c = 0;
//  while ('q' != c)
//  {//      printf("input 'q' to quit\n");
//      printf("input: ");
//      scanf_s("%c", &c);
//  }Sleep(50000);//---------------------------------------//退出程序//撤销布防上传通道if (!NET_DVR_CloseAlarmChan_V30(lHandle)){printf("NET_DVR_CloseAlarmChan_V30 failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return 0;}//注销用户NET_DVR_Logout(lUserID);//释放SDK资源NET_DVR_Cleanup();return 0;
}

依赖引入方法参考:【160】VS2022调试通过海康摄像头烟火识别SDK

【163】VS2022调试通过海康明眸门禁报警事件中的报警布防C++示例代码相关推荐

  1. 【166】VS2022调试通过海康人脸抓拍SDK的C++代码

    具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 下面是人脸抓拍的C++代码,把原来示例中的CreateFile函数改成了CreateFileA函数,避免出现无法 ...

  2. 【173】VS2022调试通过海康温度报警SDK的C++代码

    具体的开发环境配置方法可以参考 [160]VS2022调试通过海康摄像头烟火识别SDK 操作系统: Windows 需要先在海康平台设置好报警温度,然后就可以编写代码监听警报.此功能可以用于火灾报警的 ...

  3. 【160】VS2022调试通过海康摄像头烟火识别SDK

    下面是我根据海康官方文档代码,放到VS 2022 版本中调试通过后的代码: #include <stdio.h> #include <iostream> #include &q ...

  4. 通过海康sdk实现指定时间段内的录像文件下载

    通过海康sdk实现指定时间段内的录像文件下载 实现方式 录像文件下载实现流程 实现方式 下载录像文件接口 提供获取录像文件下载进度 个人博客:banmajio's blog 海康sdk二次开发系列文章 ...

  5. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作

    LiveNVR功能支持海康摄像头通过海康SDK的方式接入直播观看录像回看预置位操作 1.流媒体服务说明 2.支持海康SDK接入 3.视频广场查看播放 4.预置位接口 4.RTSP/HLS/FLV/RT ...

  6. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像

    LiveNVR功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像 1.流媒体服务说明 2.支持海康SDK接入 3.查看设备录像 3.1.时间轴模式 3.2.列表模式 4.RTS ...

  7. 海康明眸测温及身份证SDK接口C#编程小结

    海康明眸测温及身份证SDK接口C#编程小结 因为疫情一些医院使用海康明眸测温设备测体温并且登记身份证,因此开发了一个登记程序,接收设备的体温和身份证信息. 设备型号:DS-KAB671-I,图片如下: ...

  8. 通过海康SDK预览获取回调的PS流数据自己解析然后前端播放

    最近在玩视频相关的,也算是一步一步的深入吧. 第一版: 用海康SDK进行历史数据下载: https://blog.csdn.net/qq_16504067/article/details/114538 ...

  9. 最详细的JavaWeb服务器端通过海康SDK实现对摄像机的控制。

    需求介绍: 近期需求,需要通过JavaWeb开发,实现在web页面上对海康摄像机进行调焦.控制方向.调光圈大小等操作.通过研究海康官网给的demo,进行JavaWeb二次开发.同时也欢迎各位小伙伴留言 ...

  10. 安装系统要求错误_【船机帮】康明斯船用柴油机燃油系统的安装要求

    点击蓝字"船机帮"关注我们   船机问题心莫慌 遇事不决船小帮 船用康明斯柴油机安装要求 1.柴油机必须有随机提供的燃油滤器. 燃油系统必须输送充足的无气无水分的干净燃油到柴油机. ...

最新文章

  1. 全球与中国终端天线市场发展战略与运营规划分析报告
  2. Python中的If,Elif和Else语句
  3. Python小白的数学建模课-15.图论的基本概念
  4. pycharm镜像源_pycharm安装第三方库
  5. MFileServer管理员用户名密码配置
  6. linux安装gcc命令6,linux安装gcc命令
  7. Hibernate 下载、安装和使用
  8. 二进制码和格雷码转换问题
  9. ArrayList类的基本使用,完成案例随机不重复点名的程序
  10. vr软件测试,如何进行VR可用性测试?
  11. MS发起的PDP上下文激活过程----PPP和PDP激活是什么区别
  12. express获取url路由地址参数的方法 获取get请求参数
  13. 首发Metamask小狐狸盗助记词钱包源码
  14. 新装linux系统环境配置
  15. 全志T507操作小技巧连载2-T507以太网配置方法
  16. python中排序从小到大_面试官:如何用Python实现三个整数从小到大排序?
  17. python入门2——基础语法2——字符串详解
  18. 【计算机网络学习3】数据链路层
  19. html栏目切换,最简单的栏目切换方法(样式系列之栏目切换篇2)
  20. 【PyTorch系列】找不到d2lzh_pytorch包,No module named ‘d2lzh_pytorch’

热门文章

  1. JMeter并发测试工具
  2. ecshop 首页调用多个促销,显示到计时
  3. ubuntu opencv 安装
  4. QT样式表设置 之 QComboBox下拉框样式
  5. 【Ydui.js】------ ydui.js 中的 util 中的方法讲解如何调用使用 例如:获取地址栏信息,js 倒计时,cookie, 获取图片地址等
  6. FFmpeg系列-2-命令行工具之FFmpeg
  7. 电商管理系统微服务架构图
  8. Java代理(proxy)
  9. 主机DIY玩家的必备工具包
  10. 广电linux机顶盒装软件,电视盒子如何安装第三方软件(四种参考方法)