海康网络摄像头开发

海康网络摄像头开发

1. sdk文件下载

  1. 下载对应的sdk(内含开发文档)
    在这里插入图片描述

  2. 解压sdk压缩包unzip CH-HCNetSDKV6.1.9.48_build20230410_linux64.zip

    1. 文件结构如下图
    2. 开发文档内容如下图
      在这里插入图片描述
      在这里插入图片描述

2. 测试c++ consoleDemo

  • demo路径CH-HCNetSDKV6.1.9.48_build20230410_linux64/Demo示例/1-C++开发示例/consoleDemo
     

2.1 CH-HCNetSDKV6.1.9.48_build20230410_linux64目录位置位置

  1. 按照demo的readme.txt文档将./库文件里的.so库文件复制到./Demo示例/1-C++开发示例/consoleDemo/linux64/lib/
    1. 终端输入指令cp -r ./库文件/* ./Demo示例/1-C++开发示例/consoleDemo/linux64/lib/
      在这里插入图片描述

2.2 修改src源文件consoleMain.cppCapPicture.cpp中的设备信息

  1. 包括相机ip 登录名 密码(注:将ipv4设置为和相机同一网段,在浏览器输入相机ip,账号密码即可预览)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 cd到Demo示例/1-C++开发示例/consoleDemo/linux64/proj文件夹,终端输入make

  1. 即会在Demo示例/1-C++开发示例/consoleDemo/linux64/lib生成可执行文件sdkTest
  2. Demo示例/1-C++开发示例/consoleDemo/linux64/lib目录下打开终端输入./sdkTest即可运行
  3. 会让选择执行的选项,选择4捕获图像即会在目录下保存一张名为ssss.jpeg的图片
    在这里插入图片描述
    在这里插入图片描述

3. 修改demo

3.1 将捕获一张图修改为循环存图

  1. 在存图代码NET_DVR_CaptureJPEGPicture外加一层循环
  2. 在可执行文件目录创建以当天日期命名的文件夹
  3. 将图放入日期名文件夹,并以日期时分秒_id.jpeg形式保存
  4. consoleDemo/linux64/proj目录重新运行make指令
  5. /consoleDemo/linux64/lib目录./sdkTest运行程序,输入4即可循环保存图片(1秒约存10张图)
// 添加上这些头文件
#include <iostream>
#include <chrono>
#include <ctime>
#include <sstream>
#include <sys/stat.h>

// 在开头添加以下函数
// 判断文件夹是否存在
bool directoryExists(const std::string& dirName) {
    struct stat st;
    return (stat(dirName.c_str(), &st) == 0 && S_ISDIR(st.st_mode));
}
// 获取当前日期并返回字符串
std::string getCurrentDate() 
{
    time_t now = time(0);
    struct tm tstruct;
    char buf[80];
    tstruct = *localtime(&now);
    strftime(buf, sizeof(buf), "%Y%m%d", &tstruct);
    return buf;
}
// 获取当前日期时间并返回字符串
std::string getCurrentTimeAsString() 
{
    auto now = std::chrono::system_clock::now();
    std::time_t now_time = std::chrono::system_clock::to_time_t(now);
    // 将 time_t 转换为 tm 结构体
    struct tm *timeinfo = std::localtime(&now_time);
    // 格式化输出时间
    char buffer[80];
    std::strftime(buffer, 80, "%Y%m%d%H%M%S", timeinfo);
    return std::string(buffer);
}

// 将原本的NET_DVR_CaptureJPEGPicture修改为如下代码
    int number=0;
    while(true)
    {
        std::string folderName = getCurrentDate();
        // 判断是否存在以当天日期命名的文件夹,如不存在则新建
        if (!directoryExists(folderName)) {
            if (mkdir(folderName.c_str(), 0777) == -1) {
                std::cerr << "Error creating directory" << std::endl;
                return 1;
            }
        }
        std::string current_time=getCurrentTimeAsString();
        // 需保存的文件名
        std::string img_path="./"+folderName+"/"+current_time+"_"+std::to_string(number)+".jpeg";
        // 为防止同时分秒的相片覆盖,名称加上id后缀
        ++number;
        // .data()用于将std::string的img_path转为const char*
        // 由于函数最后一个参数需要的是char*,再使用strdup将const char* 转换为char*
        iRet = NET_DVR_CaptureJPEGPicture(lUserID, struDeviceInfoV40.struDeviceV30.byStartChan, &strPicPara,strdup(img_path.data()));
        if (!iRet)
        {
            printf("pyd1---NET_DVR_CaptureJPEGPicture error, %d\n", NET_DVR_GetLastError());
            return HPR_ERROR;
        }
    }

3.2 将Makefile修改为CMakeLists.txt

  1. 由于对Makefile不太熟悉,后续阅读或修改项目可能存在困难,使用CMakeLists.txt来控制后续程序的编译
  2. Demo示例/1-C++开发示例/consoleDemo目录输入touch CMakeLists.txt新建文件
  3. CMakeLists.txt书写内容如下
  4. 用vscode打开Demo示例/1-C++开发示例/consoleDemo目录,安装cmake插件
  5. 在下方状态栏选择cmake为release,选择编译器版本,点击生成,成功后点击右边的小三角形即可运行
cmake_minimum_required(VERSION 3.0)
project(SDKTestProgram)
# 设置类似Makefile里的c++标志
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-strict-aliasing -Wno-unused-variable")
# message("CMAKE_SOURCE_DIR: " ${CMAKE_SOURCE_DIR})
# 包含头文件路径
include_directories(${CMAKE_SOURCE_DIR}/include)
# 设置库目录
link_directories(${CMAKE_SOURCE_DIR}/linux64/lib)
file(GLOB_RECURSE SOURCES "${CMAKE_SOURCE_DIR}/src/*.cpp")
# foreach(source IN LISTS SOURCES)
#     # NAME_WE 没有目录及后缀的文件名
#     get_filename_component(source_name ${source} NAME_WE)
#     list(APPEND SOURCE_NAMES ${source_name})
# endforeach()
# # 每一个单独的文件名
# message("SOURCE_NAMES: " ${SOURCE_NAMES})
message("SOURCES: " ${SOURCES})
add_executable(sdkTest ${SOURCES})
# 链接目标和库
target_link_libraries(sdkTest PRIVATE hcnetsdk)

在这里插入图片描述

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值