具体的开发环境配置方法可以参考 【160】VS2022调试通过海康摄像头烟火识别SDK

下面是人脸抓拍的C++代码,把原来示例中的CreateFile函数改成了CreateFileA函数,避免出现无法创建文件的BUG。具体原因可以参考 【164】VS2022下VC++调用CreateFile文件名不能接受char*,包括强制转换成LPCWSTR的char*也会出错

#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)void CALLBACK cbMessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void* pUser)
{NET_DVR_ALARMINFO_V30* netDvrAlarminfoV30 = NULL;size_t length = strlen(pAlarmInfo);switch (lCommand){case COMM_UPLOAD_FACESNAP_RESULT: //人脸抓拍报警信息{NET_VCA_FACESNAP_RESULT struFaceSnap = { 0 };memcpy(&struFaceSnap, pAlarmInfo, sizeof(NET_VCA_FACESNAP_RESULT));NET_DVR_TIME struAbsTime = { 0 };struAbsTime.dwYear = GET_YEAR(struFaceSnap.dwAbsTime);struAbsTime.dwMonth = GET_MONTH(struFaceSnap.dwAbsTime);struAbsTime.dwDay = GET_DAY(struFaceSnap.dwAbsTime);struAbsTime.dwHour = GET_HOUR(struFaceSnap.dwAbsTime);struAbsTime.dwMinute = GET_MINUTE(struFaceSnap.dwAbsTime);struAbsTime.dwSecond = GET_SECOND(struFaceSnap.dwAbsTime);//保存抓拍场景图片if (struFaceSnap.dwBackgroundPicLen > 0 && struFaceSnap.pBuffer2 != 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, "FaceSnapBackPic[%s][%s].jpg", struFaceSnap.struDevInfo.struDevIP.sIpV4, chTime);sprintf_s(cFilename, "D:\\yourfolder\\FaceSnapBackPic[%s][%s].jpg", struFaceSnap.struDevInfo.struDevIP.sIpV4, chTime);hFile = CreateFileA(cFilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){cout << "hFile INVALID_HANDLE_VALUE" << endl;break;}WriteFile(hFile, struFaceSnap.pBuffer2, struFaceSnap.dwBackgroundPicLen, &dwReturn, NULL);CloseHandle(hFile);hFile = INVALID_HANDLE_VALUE;}cout << "FaceCaptureAlarm" << endl;//        printf("人脸抓拍报警[0x%x]: Abs[%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d] Dev[ip:%s,port:%d,ivmsChan:%d] \n", \
//          lCommand, struAbsTime.dwYear, struAbsTime.dwMonth, struAbsTime.dwDay, struAbsTime.dwHour, \
//          struAbsTime.dwMinute, struAbsTime.dwSecond, struFaceSnap.struDevInfo.struDevIP.sIpV4, \
//          struFaceSnap.struDevInfo.wPort, struFaceSnap.struDevInfo.byIvmsChannel);}break;case COMM_VCA_ALARM: // 0x4993 智能检测通用报警(Json或者XML数据结构)cout << endl;cout << "BEGIN COMM_VCA_ALARM" << endl;cout << pAlarmInfo << endl;cout << "END   COMM_VCA_ALARM" << endl;cout << endl;break;case COMM_ALARM_V30:
//      dwAlarmType
//      报警类型:0 - 信号量报警,1 - 硬盘满,2 - 信号丢失,3 - 移动侦测,4 - 硬盘未格式化,5 - 读写硬盘出错,
//      6 - 遮挡报警,7 - 制式不匹配,8 - 非法访问,9 - 视频信号异常,10 - 录像 / 抓图异常,11 - 智能场景变化,12 - 阵列异常,
//      13 - 前端 / 录像分辨率不匹配,15 - 智能侦测,16 - POE供电异常,17 - 闪光灯异常,18 - 磁盘满负荷异常报警,19 - 音频丢失,
//      23 - 脉冲报警,24 - 人脸库硬盘异常,25 - 人脸库变更,26 - 人脸库图片变更netDvrAlarminfoV30 = (NET_DVR_ALARMINFO_V30*)pAlarmInfo;cout << "COMM_ALARM_V30  " << "pAlarmInfo.dwAlarmType=" << netDvrAlarminfoV30->dwAlarmType << endl;break;default:printf("其他报警,报警信息类型: 0x%x\n", lCommand);break;}return;
}//int main() {//  RyUtils::charTo01('啊');
//}int main(int argc, char* argv[]) {cout << "The program starts." << endl;if (argc < 2) {cout << "NoIP" << endl;return 0;}char* ip = argv[1];cout << ip << endl;//---------------------------------------// 初始化NET_DVR_Init();// 初始化后开始记录日志char arr[] = "D:\\your_log_dir\\face_capture\\";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;}//设置报警回调函数// 注:多台设备对接时也只需要调用一次设置一个回调函数,不支持不同设备的事件在不同的回调函数里面返回NET_DVR_SetDVRMessageCallBack_V50(0, cbMessageCallback, NULL);//启用布防LONG lHandle;NET_DVR_SETUPALARM_PARAM  struAlarmParam = { 0 };struAlarmParam.dwSize = sizeof(struAlarmParam);struAlarmParam.byFaceAlarmDetection = 0; //人脸抓拍报警,上传COMM_UPLOAD_FACESNAP_RESULT类型报警信息//其他报警布防参数不需要设置,不支持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 0;}Sleep(120000); //等待过程中,如果设备上传报警信息,在报警回调函数里面接收和处理报警信息//撤销布防上传通道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 0;}//注销用户NET_DVR_Logout(lUserID);//释放SDK资源NET_DVR_Cleanup();cout << "The program ends" << endl;return 0;
}

【166】VS2022调试通过海康人脸抓拍SDK的C++代码相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 海康摄像机抓拍SDK集成java(包括windows和linux)

    近期在做违停球机抓拍功能,所以对海康的sdk进行集成,并且部署到Linux和Windows服务器上. 海康sdk及demo下载地址 1.下载对应版本的sdk 每一个demo里面都有sdk说明文档,可以 ...

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

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

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

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

  9. ctypes调用海康威视人脸抓拍机并将抓拍的人脸上传到指定地址

    ctypes对海康抓拍机的使用 目录 ctypes对海康抓拍机的使用 概述 基本概念补充 正式编程 结构体 需要使用的海康函数 开始使用的核心代码 其他 对海康sdk进行一些封装 概述 本文涉及到如下 ...

最新文章

  1. (转) eclipse项目中.classpath文件详解
  2. C++标准模板库(STL)的概念
  3. Azure上基于HTTP trigger的Lambda Function
  4. .Net MVC Cache 缓存技术总结
  5. 要当好JavaScript程序员:5个debug技巧
  6. ZooKeeper学习总结(1)——ZooKeeper入门介绍
  7. JZOJ4742 单峰
  8. 学习 MFC 的好网站
  9. 我有一箱01年的茅台酒现在值多少钱
  10. 突破”子网隔离”***C段
  11. 对聊天室项目的NABCD的分析
  12. LoadRunner测试WebService的3种方式
  13. js querySelector与getElementById
  14. 类文件结构和字节码指令
  15. 如何在OTN网站下载Grid方法(Oracle RAC)
  16. isupper_Python字符串| isupper()和islower()方法以及示例
  17. PCIE原理-002:PCIE地址是如何映射的
  18. [1] DevOps 自动化运维工具Chef----入门
  19. 每周论文精读05-A2J:AnchortoJointRegressionNetwork for 3D ArticulatedPoseEstimation from a SingleDepthImage
  20. 算法——0~1之间浮点实数的二进制表示

热门文章

  1. 坐南京13路公交车,体验《头文字D》感觉!
  2. web前端开发主要培训哪些内容
  3. 职称有哪些意义?如何提升职称?
  4. 九世轮回篇电子计算机乐谱,mc九局九世轮回篇的歌词
  5. Mysql横向分组统计
  6. 成都列五中学2021年高考成绩查询,2021年成都列五中学升学率怎么样?
  7. Android 9.0 去除锁屏界面及SystemUI无sim卡拨打紧急电话控件显示功能实现
  8. excel图片技巧:如何为报表配上节日祝福动画
  9. 图片转world文档 Excel excel 新
  10. 在大厂,我和同事搞对象(别人的故事总是这么香)