拌合楼管理系统开发(六) 海康威视摄像头调用拍照

news2024/11/14 14:58:27

前言:无人值守过磅摄像头拍照

        无人值守过程很重要的一个环节就是车辆过磅等车辆到到磅上指定位置后,触发车牌识别,以及车辆前后左右四个方位摄像头拍照,并存入到系统中。


一、支持设备:

        建议都采用600万像素以上的海康威视的抢形摄像头,地磅一般都处于户外,主要考虑恶劣的工作环境,相比球型摄像头,枪型更加适合了。

二、下载海康威视官方SDK:

1. 海康威视官网地址: 海康威视-引领智能物联新未来 (hikvision.com)

2. 服务支持-》下载中心-》SDK下载

3. 选择合适的SDK版本,系统采用的.net开发那么肯定是选择win64的了。

4. 下载文件解压缩:

 务必阅读txt文件,否则你调试时候会发现怎么都无法正常进行。

5. 注意事项:

        1. 更新设备网络SDK时,SDK开发包【库文件】里的HCNetSDK.dll、HCCore.dll、HCNetSDKCom文件夹、libssl-1_1.dll、libcrypto-1_1.dll、hlog.dll、hpr.dll、zlib1.dll、PlayCtrl.dll、SuperRender.dll、AudioRender.dll等文件均要加载到程序里面,【HCNetSDKCom文件夹】(包含里面的功能组件dll库文件)需要和HCNetSDK.dll、HCCore.dll一起加载,放在同一个目录下,且HCNetSDKCom文件夹名不能修改。

        2. 如果自行开发软件不能正常实现相应功能,而且程序没有指定加载的dll库路径,请在程序运行的情况下尝试删除HCNetSDK.dll。如果可以删除,说明程序可能调用到系统盘Windows->System32目录下的dll文件,建议删除或者更新该目录下的相关dll文件;如果不能删除,dll文件右键选择属性确认SDK库版本。

        3. 如按上述步骤操作后还是不能实现相应功能,请根据NET_DVR_GetLastError返回的错误号判断原因。

三、官方Demo示例 

        官方提供了8个c#的示例,我们主要调用摄像头进行拍照,那么主要就是前面两个Demo是研究的重点了。

四、调用SDK的方法

1. 直接把演示项目中的CHCNetSDK.cs 拷贝到项目中。

2. 按照前面的注意事项把库文件拷贝到debug目录下:

        否则无法进行调试。我这里用的.net 8 注意拷贝到debug目录下的net8.0-windows 中才可以使用

3.  首先需要定义一些类属性以及常量:

   private uint iLastErr = 0;
private Int32 m_lUserID = -1;
private bool m_bInitSDK = false;
   private bool m_bRecord = false;
   private bool m_bTalk = false;
private Int32 m_lRealHandle = -1;
   private int lVoiceComHandle = -1;
   private string str;

   CHCNetSDK.REALDATACALLBACK RealData = null;
   CHCNetSDK.LOGINRESULTCALLBACK LoginCallBack = null;
   public CHCNetSDK.NET_DVR_PTZPOS m_struPtzCfg;
   public CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo;
   public CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo;

4. 构造函数初始化SDK:        

	m_bInitSDK = CHCNetSDK.NET_DVR_Init();
	if (m_bInitSDK == false)
	{
		MessageBox.Show("NET_DVR_Init error!");
		return;
	}
	else
	{
        //保存SDK日志 To save the SDK log
        CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
	}

5. 登录设备:

    private void Login(string ipAddress, string username, string password, string port = "8000")
    {

        struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO();

        //设备IP地址或者域名
        byte[] byIP = System.Text.Encoding.Default.GetBytes(ipAddress);
        struLogInfo.sDeviceAddress = new byte[129];
        byIP.CopyTo(struLogInfo.sDeviceAddress, 0);

        //设备用户名
        byte[] byUserName = System.Text.Encoding.Default.GetBytes(username);
        struLogInfo.sUserName = new byte[64];
        byUserName.CopyTo(struLogInfo.sUserName, 0);

        //设备密码
        byte[] byPassword = System.Text.Encoding.Default.GetBytes(password);
        struLogInfo.sPassword = new byte[64];
        byPassword.CopyTo(struLogInfo.sPassword, 0);

        struLogInfo.wPort = ushort.Parse(port);//设备服务端口号
      

        struLogInfo.cbLoginResult = LoginCallBack;
        struLogInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 

        DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();

        //登录设备 Login the device
        m_lUserID = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo);
        if (m_lUserID < 0)
        {
            iLastErr = CHCNetSDK.NET_DVR_GetLastError();
            str = "NET_DVR_Login_V40 failed, error code= " + iLastErr; //登录失败,输出错误号
            MessageBox.Show(str);
            return;
        }

    }

6.  操作拍照:

  string sJpegPicFileName;
  //图片保存路径和文件名 the path and file name to save
  sJpegPicFileName = "JPEG_test.jpg";

  int lChannel = 1; //通道号 Channel number

  CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
  lpJpegPara.wPicQuality = 0; //图像质量 Image quality
  lpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档

  //JPEG抓图 Capture a JPEG picture
  if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
  {
      iLastErr = CHCNetSDK.NET_DVR_GetLastError();
      str = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
      MessageBox.Show(str);
      return;
  }
  else
  {
      str = "Successful to capture the JPEG file and the saved file is " + sJpegPicFileName;
      MessageBox.Show(str);
  }

总结:

        初次接触调用海康威视的sdk,看到CHCNetSDK上定义的常量就有些发怵,其实你不用去管他,直接copy过来,弄清楚整个调用的流程,首先定义一些需要用到的常量和属性,再就是构造函数上初始化sdk,第三步就是登录到设备,最后就是调用拍照的接口函数了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jQuery+CSS3自动轮播焦点图特效源码

jQueryCSS3自动轮播焦点图特效源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 jQueryCSS3自动轮播焦点图特效源码

javaweb day20

dml 写法 更新数据 写法 删除 写法

Java并发编程之ReactiveSteams

Reactive Steams 一、Reactive Steams介绍 在聊Reactive Steams之前&#xff0c;先了解一下Reactive Programming&#xff08;反应式/响应式编程&#xff09;。为了解决异步编程中出现的各种问题&#xff0c;程序员们提出了各种的思路去解决这些问题&#xff0c;这些解决问题…

docker init 生成Dockerfile和docker-compose.yml —— 筑梦之路

官网&#xff1a;https://docs.docker.com/engine/reference/commandline/init/ 简介 docker init是一个命令行实用程序&#xff0c;可帮助初始化项目中的 Docker 资源。.dockerignore它根据项目的要求创建 Dockerfile、Compose 文件。这简化了为项目配置 Docker 的过程&#…

Linux 文件系统:文件描述符、管理文件

目录 一、三个标注输入输出流 二、文件描述符fd 1、通过C语言管理文件—理解文件描述符fd 2、文件描述符实现原理 3、文件描述符0、1、2 4、总结 三、如何管理文件 1、打开文件的过程 2、内核空间的结构 struct task_struct&#xff08;PCB&#xff09; struct file…

html5播放flv视频

参考&#xff1a;flv-h265 - npmHTML5 FLV Player. Latest version: 1.7.0, last published: 6 months ago. Start using flv-h265 in your project by running npm i flv-h265. There are no other projects in the npm registry using flv-h265.https://www.npmjs.com/packag…

java类的定义及使用

1、类的定义 &#xff08;1&#xff09;类的重要性&#xff1a;是Java程序的基本组成单位&#xff1b; &#xff08;2&#xff09;类是什么&#xff1a;是对现实生活中一类具有共同属性和行为的事物的抽象&#xff0c;确定对象将会拥有的属性和行为&#xff1b; &#xff08…

卷积篇 | YOLOv8改进之C2f模块融合SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。本…

AI时代,Matter如何融入与服务中国智能家居市场,助力中国企业出海?

随着智能家居产业的飞速发展&#xff0c;丰富多样的智能家居产品为消费者带来了便利的同时&#xff0c;因为不同品牌、不同产品之间的协议与标准不统一&#xff0c;导致消费者体验产生割裂&#xff0c;本来想买个“智能”家居&#xff0c;结果买了个“智障”家居&#xff0c;这…

C++开发基础——类对象与构造析构

一、基础概念 类&#xff1a;用户自定义的数据类型。 对象&#xff1a;类类型的变量&#xff0c;类的实例。 类的成员&#xff1a;成员变量和成员函数。 成员变量&#xff1a;类中定义的变量。 成员函数&#xff1a;类中定义的函数。 定义类的代码样例&#xff1a; class…

社区生活超市管理系统|基于JSP技术+ Mysql+Java+ Tomcat的社区生活超市管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

【Unity动画】Unity如何导入序列帧动画(GIF)

Unity 不支持GIF动画的直接播放&#xff0c;我们需要使用序列帧的方式 01准备好序列帧 02全部拖到Unity 仓库文件夹中 03全选修改成精灵模式Sprite 2D ,根据需要修改尺寸&#xff0c;点击Apply 04 创建一个空物体 拖动序列上去 然后全选所有序列帧&#xff0c;拖到这个空物体…

python异常:pythonIOError异常python打开文件异常

1.python读取不存在的文件时&#xff0c;抛出异常 通过 open()方法以读“r”的方式打开一个 abc.txt 的文件&#xff08;该文件不存在&#xff09;&#xff0c;执行 open()打开一个不存在的文件时会抛 IOError 异常&#xff0c;通过 Python 所提供的 try...except...语句来接收…

Java基础经典10道题

目录 for循环的嵌套 题目一: 求101到200之间的素数的个数,并打印 代码分析: 注意点: 题目二:开发验证码 代码分析: 题目三:数组元素的复制 代码分析: 题目四:评委打分 健壮版代码: 代码分析:看源码 注意点: 题目五:数字加密 优化版代码: 代码分析: 题目六:数字…

HandyControl PropertyGrid及自定义编辑器

前提条件 项目引入对应HandyControl对应版本包。 使用案例 UI部分 <Window xmlns:hc"https://handyorg.github.io/handycontrol"><hc:TabControl><hc:TabItem Header"默认样式"><hc:PropertyGrid Width"380" SelectedO…

[RCTF2015]EasySQL ---不会编程的崽

今天也是sql注入的新类型---二次注入。不得不说花样真的多哦。 既然真的是sql注入了。那就不测试其他地方了。现在注册进去看一下界面 单纯的回显了名字。源代码里发现user.php。 可以修改密码&#xff1f;二次注入应该就在用户名这里了。因为修改密码时&#xff0c;用户名会被…

学习笔记Day11:初探Linux

Linux系统初探 Linux系统简介 发行版本Ubuntu/centOS&#xff0c;逻辑一样&#xff0c;都可以用。 服务器 本质是一台远程电脑&#xff0c;大多数服务器是Linux系统&#xff0c;通常使用命令行远程访问而不是桌面操作。LInux服务器允许多用户同时访问。NGS组学测序数据上游…

硬盘哨兵Hard Disk Sentinel Pro V6.20.0.0 便携版

Hard Disk Sentinel 是一款功能强大的硬盘监控和分析软件&#xff0c;专为 Windows 用户设计。它可以实时监测硬盘驱动器&#xff08;HDD&#xff09;、固态硬盘&#xff08;SSD&#xff09;、混合硬盘&#xff08;SSHD&#xff09;、NVMe SSD、RAID 数组和外部 RAID 盒子的健康…

pdf文件属性的删除

pdf文件属性的删除 投标过程中需要处理文件属性&#xff0c;特别是word文件属性以及pdf文件的处理 这里讲解pdf文件属性的处理 word处理在我的另外一个博客中&#xff0c;word文件属性的处理 https://ht666666.blog.csdn.net/article/details/134102504 一般用 adobe acroba…

MySQL—数据库导入篇

什么是数据库&#xff1f; 数据库是干啥的&#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 MySQL属于哪一类数据库&#xff1f; MySQL是一种关系型数据库。所谓的关系型数据库&#xff0c;是建立在关系模型基础上的数据库&a…