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++】=> 【常规】,选中右侧附加包含目录中,点击右侧出现的向下箭头,点击编辑,在打开的对话框中如下填写:

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

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

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

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

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

(0)

相关推荐

  • ASP.NET在VS2022中使用Dispose释放资源实例

    Dispose和Finalize是运行的 .NET 和 .NET Core 应用程序释放占用的资源的两种方法.通常,如果应用程序中有非托管资源,应该显式地释放这些资源占用的资源. 由于 Finalize的非确定性,以及在性能方面的成本很高,因此 Dispose方法的使用频率远高于 Finalize.其实,我们可以在一个实现了 IDisposable接口的类型上使用 Dispose方法. 本文中提供的代码示例均默认运行在 Visual Studio 2022. 使用 VS2022 创建 ASP.N

  • vs2022 qt环境搭建调试的方法步骤

    建议:先安装qt再安装vs! 1.安装qt6,如下图,勾选msvc2019即可,其它自行决定,剩下安装自动的: 2.vs2022安装没什么说的,因为已经是模块化安装了,如下图,这是最少勾选的了: 3.安装qt vs tools插件,vs扩展,扩展管理,搜索qt即可,然后安装,重启vs后生效. 4.一般会自动识别出,如果没有手动,在扩展中的qt versions中指定qt的路径,必须指定到qt安装目录下的,mscv2019_64文件夹. 5.新建项目,直接有qt项目菜单 ,按顺序下一步,下一步即可

  • 使用VS2022在ASP.NET Core中构建轻量级服务

    目录 1. 使用 VS2022 创建 ASP.NET Core 项目 2. 在 ASP.NET Core 中启用一个轻量级的服务 3. 在 ASP.NET Core 中使用 IEndpointConventionBuilder 扩展方法 4. 在 ASP.NET Core 中使用轻量级服务检索记录 5. 在 ASP.NET Core 中使用轻量级服务创建记录 6. 在 ASP.NET Core 中使用轻量级服务删除记录 7. ASP.NET Core 中轻量级服务的配置方法 8. 在 ASP.N

  • VS2022远程调试工具的使用方法

    在工作中有时候需要在服务器的环境下远程调试,例如调试微信相关服务的时候. 1. 下载远程调试工具 网址:https://visualstudio.microsoft.com/zh-hans/downloads/ 下载后直接安装至完成. 启动Remote Debugger: 如果只是短时间测试,可以选择无身份验证,为了安全,工具自动设置了空闲时间,即多久没有操作会自动关闭此功能. 2.新建测试项目 建了一个简单的HelloWorld项目,简单几句代码,加上断点. 发布debug到远程服务器. 双击

  • 使用vs2022在.net6中调试带typescript的静态页面

    1.新建一个空的web项目 2.设计.建好目录结构 其中ts存放typescript源文件,web为网站根目录,scripts/js存放ts生成的js脚本. index.html为静态网页. 3.新建ts配置文件tsconfig.json,修改内容为: { "compilerOptions": { "noImplicitAny": false, "noEmitOnError": true, "removeComments":

  • VS2022 安装.NET4.5目标包的方法

    众所周知VS2022将不再支持.NET4.5,即使在Visual Studio Installer中也找不到.NET4.5的选项 在不改变项目结构的情况下,要么选择继续使用VS2019,当然博主已经卸掉了,那么还有什么方法呢? 我们可以在NuGet包中下载.NET 4.5的工具包 将PM:后的代码复制进程序包控制台并回车(VS顶部菜单栏 -> 视图 -> 其他 -> 程序包控制台) PM:Install-Package Microsoft.NETFramework.ReferenceAs

  • 使用VS2022开发在线远程编译部署的C++程序(图文详解)

    一.先来一点C++的资源分享,意思一下. 1.c++类库源码以及其他有关资源.站点是英文的,英文不好的话可以谷歌浏览器在线翻译.http://www.cplusplus.com/ 2.C++参考手册.页面有点复古,不过有中文版本的.https://zh.cppreference.com/w/cpp 3.GUNC++库,你懂的.https://gcc.gnu.org/onlinedocs/libstdc++/index.html 4.一群大佬分享的一些中文开源资源.https://github.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

  • Python3利用Dlib19.7实现摄像头人脸识别的方法

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建预设人脸特征: 根据抠取的 / 已有的同一个人多张人脸图片提取128D特征值,然后计算该人的128D特征均值: 然后和摄像头中实时获取到的人脸提取出的特征值,计算欧氏距离,判定是否为同一张人脸: 人脸识别 / face recognition的说明: wikipedia 关于人脸识别系统 / fac

  • opencv摄像头捕获识别颜色

    本文实例为大家分享了opencv摄像头捕获识别颜色的具体代码,供大家参考,具体内容如下 #include "highgui.h" #include "iostream" using namespace std; int main() { CvCapture* pCap = cvCreateCameraCapture(1 );//这里-1也可以,不过我的电脑装的有CyberLink YouCam软件, int flag=0; //OpenCV会默认调用该摄像头,而不调

  • FFmpeg获取网络摄像头数据解码

    对USB摄像头实时编码,在前面已经探讨过了.这次改变下思路,尝试去截取网络摄像头的H264码流,将其解码播放. 这里的测试代码,是在海康摄像头的基础上进行的. 解码的大致流程和以前的保持一致,只不过增加了部分函数. FFmpeg打开媒体文件并查看媒体文件的信息,有三个步骤: avformat_open_input: avformat_find_stream_info: av_dump_format: 依次调用三个函数后,我们可以很清楚的知道码流的各种信息. 完整的代码: #include <st

  • C# 10分钟完成百度人脸识别(入门篇)

    嗨咯,小编在此祝大家新年快乐财多多! 今天我们来盘一盘人脸注册.人脸识别等相关操作,这是一个简单入门教程. 话不多说,我们进入主题: 完成人脸识别所需的步骤: 注册百度账号api,创建自己的应用: 创建vs控制台应用程序,引入动态链接库: 编写代码调试,效果图查看: 总结. 1.注册百度账号api,创建自己的应用 注册地址: https://login.bce.baidu.com/ 注册登录之后,在"产品服务" 菜单下找到人脸识别 ,如下图: 点击去创建自己的应用名称,其实最主要的就是

  • android实现人脸识别技术的示例代码

    1.前沿 人工智能时代快速来临,其中人脸识别是当前比较热门的技术,在国内也越来越多的运用,例如刷脸打卡,刷脸APP,身份识别,人脸门禁等.当前的人脸识别技术分为WEBAPI和SDK调用两种方式,WEBAPI需要实时联网,SDK调用可以离线使用. 本次使用的虹软提供的人脸识别的SDK,此SDK也可根据不同应用场景设计,针对性强.包括人脸检测.人脸跟踪.人脸识别,即使在离线环境下也可正常运行. 虹软公司是一家具有硅谷背景的图像处理公司,除了人脸技术以外,还有多项图像及视频处理技术.他们的双摄像头处理

  • js实现调用网络摄像头及常见错误处理

    最近由于业务的原因,需要在Web端页面接入调试各类的网络摄像头,遇到了很多匪夷所思的问题(说的就是读得出摄像头的品牌,读不出摄像头的分辨率).于是整理了这篇文章作为备忘录,也希望能帮到有类似的小伙伴们. 基础代码 navigator.mediaDevices.getUserMedia({ audio: false, video: true }).then(async (stream) => { let video = document.getElementById('#video') // 兼容

  • java+opencv实现人脸识别功能

    背景:最近需要用到人脸识别,但又不花钱使用现有的第三方人脸识别接口,为此使用opencv结合java进行人脸识别(ps:opencv是开源的,使用它来做人脸识别存在一定的误差,效果一般). 1.安装opencv 官网地址:https://opencv.org/ , 由于官网下载速度是真的慢 百度网盘: 链接: https://pan.baidu.com/s/1RpsP-I7v8pP2dkqALDw7FQ 提取码: pq7v 如果是官网下载,就无脑安装就行了,安装完毕后. 将图一的两个文件复制到图

  • 手把手教你利用opencv实现人脸识别功能(附源码+文档)

    目录 一.环境 二.使用Haar级联进行人脸检测 三.Haar级联结合摄像头 四.使用SSD的人脸检测 五. SSD结合摄像头人脸检测 六.结语 一.环境 pip install opencv-python python3.9 pycharm2020 人狠话不多,直接上代码,注释在代码里面,不说废话. 二.使用Haar级联进行人脸检测 测试案例: 代码:(记得自己到下载地址下载对应的xml) # coding=gbk """ 作者:川川 @时间 : 2021/9/5 16:3

  • Python基于pyopencv人脸识别并绘制GUI界面

    目录 项目介绍 采集人脸: 识别功能: 项目思路 项目模块 1.人脸采集 2.数据训练 3.人脸识别 4.GUI界面 项目代码 人脸采集 数据训练 人脸识别 合并GUI 项目总结 项目介绍 我们先来看看成果: 首先写了一个能够操作的GUI界面. 其中两个按钮对应相应的功能: 采集人脸: 识别功能: 我可是牺牲了色相五五五五...(电脑像素不是很好大家将就一下嘿嘿嘿) 项目思路 本项目是借助于python的一个cv2图像识别库,通过调取电脑的摄像头进行识别人脸并保存人脸图片的功能,然后在通过cv2

随机推荐