海康网络相机C#封装库

news/2024/11/17 16:01:17/文章来源:https://www.cnblogs.com/onecainiao/p/18357459

前言

最近做项目过程中,使用到了海康相机,官方只提供了C/C++的SDK,没有搜寻到一个合适的封装了的库,故自己动手,简单的封装了一下,方便大家也方便自己使用和二次开发

项目地址:https://github.com/martixjohn/HikvisionNetworkCameraSdkForCsharp

项目结构

├─Dlls/
│
├─Native/
│        	HCNetSDK.cs
│
├─ CameraDevice.cs
│
...

项目很简单,主要就提供了两个类:

  • 一个是CameraDevice.cs:相机API使用

    主要接口和成员如图

    img

  • HCNetSDK.cs:对C++的头文件的封装,包含常用的类型的声明等

    (由官方提供的Demo进行修改,并小修小补,修复了部分Bug)

    img

使用

拷贝动态链接库DLL

拷贝动态链接库到程序目录,或者程序能访问到的地方,内部运行时自动链接

这里有个巧妙地办法:使用环境变量

string originalPath = Environment.GetEnvironmentVariable("Path") ?? string.Empty;
originalPath = Regex.Replace(originalPath, "^" + Path.PathSeparator, string.Empty);
// 加入当前目录的bin
Environment.SetEnvironmentVariable("PATH", "bin" + Path.PathSeparator + originalPath);

重点在Environment.SetEnvironmentVariable("PATH", ...),因为程序一般运行都会访问PATH环境变量

示例

// 初始化相机SDK,涉及非托管内存分配
CameraDevice.InitializeSdk();string userName = "admin";
string password = "password";
string iP = "192.168.18.1";
ushort port = 8000;// CameraDevice实现了IDisposable
using(CameraDevice camera = new(userName, password, iP, port)){try{// 需要登录才能使用, 阻塞camera.Login();Console.WriteLine("登录成功! {0}", camera.UserName);} catch (Exception e) {Console.WriteLine("exception: {0}", e);return;}try{// 直接从流中获取图片byte[] image = camera.DirectlyCaptureJpegImage();// ImageSharpImage<Rgb24> rgb24 = Image.Load<Rgb24>(image);// ...} catch(Exception e){Console.WriteLine("exception: {0}", e);return;}// 自己处理流数据 (使用回调,非阻塞)camera.StartFetchVideoStream((streamType, data) => {if(streamType == StreamType.Header) {// ...} else if(streamType == StreamType.Body) {// ...}});// 模拟进行其他任务Stopwatch stopwatch = Stopwatch.StartNew();while (stopwatch.ElapsedMilliseconds < 3000){// ...}
}// 程序运行结束,销毁SDK资源(非托管)
CameraDevice.CleanUpSdk();

结束语

项目很简单,依然有不足,大家可能还是需要根据具体业务进行二次开发来。

总之欢迎大家使用,若感兴趣欢迎参与贡献!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们常用的地铁卡/银行卡,竟然运行着一个 Java 虚拟机

我们日常使用 NFC 卡可以用来刷地铁,进出门禁,但是你有没有想过, 当我们使用一个 NFC 的 IC 卡刷卡进入地铁的时候,此时系统是如何知道我这个卡上有多少充值余额的? 这个薄薄的 NFC 卡到底有什么魔力,除了可以刷卡进地铁,还可以去银行取钱,进出小区门禁。 今天我在看到…

Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解

1、概述 在《Jenkins部署架构概述 》这篇博文中对Jenkins部署架构进行了讲解。对于分布式架构,Jenkins包括固态Agent和动态Agent两种方案。固定Agent(常用于虚拟机):Agent容器一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。 动态Agent…

在项目里快速运行史上最强开源大模型「Llama 3.1」

7月份,Meta正式发布迄今为止最强大的开源模型——Llama 3.1,包含了405B、70B和8B三个版本的模型。 作为开发者,如何在项目里快速运行LLaMa3.1大模型? 今天,我们结合英智未来自己的LLM推理API平台,给大家介绍一套免费实践流程。 免费使用地址:https://cognihub.baystone…

利用Jenkins Pipeline高效部署Kubernetes服务

什么是 Jenkins Pipeline Jenkins Pipeline是一种持续集成和持续交付(CI/CD)的功能,它允许开发者将复杂的构建、测试和部署流程编码为一系列称为“管道”的自动化步骤。这些步骤以Groovy脚本的形式编写,并且可以在Jenkins中可视化管理。Pipeline提供了代码化和可重用的构建…

DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024

论文分析了现有的新类别发现和定位(NCDL)方法并确定了核心问题:目标检测器往往偏向已知的目标,忽略未知的目标。为了解决这个问题,论文提出了去偏差区域挖掘(DRM)方法,以互补的方式结合类无关RPN和类感知RPN进行目标定位,利用未标记数据的半监督对比学习来改进表征网络…

城市信息模型:构建未来智慧城市之基底座

在智慧城市的宏大叙事中,城市信息模型(City Information Model, CIM)平台如同城市智能的神经中枢,将数据、空间与技术深度融合,为城市规划、管理、服务、居民生活提供了前所未有的洞察与优化途径。CIM平台的构建不仅是技术的集成,更是智慧城市的灵魂,它以三维可视化、数…

8.10作业

代码:5秒后跳转马哥教育官网 如下:

ALV TABLE-COTROL

1.画屏幕 2.流逻辑CONTROLS gr_9112_control TYPE TABLEVIEW USING SCREEN 9112.PROCESS BEFORE OUTPUT.MODULE status_9112. *处理LOOP从内表读到表控制LOOP WITH CONTROL gr_9112_control.MODULE filltbl1_9112.ENDLOOP.PROCESS AFTER INPUT. *处理LOOP从表控制更新内表LOOP …

Tornado 龙卷风混币原理

项目背景 Tornado(https://tornado.cash/)是以太坊隐私赛道著名的混币项目,其混币技术主要使用了 zk-SNARK 零知识证明。 1、关于 zk-SNARK 零知识证明的原理可以参见 if(DAO) 之前的文章:https://mirror.xyz/0xd05cFA28Eaf8B4eaFD8Cd86d33c6CeD1a1875417/X3qSOjObTknXQ_iG…

java浅拷贝BeanUtils.copyProperties引发的RPC异常

背景 近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到 人在地铁上,bug从咚咚来~ 没有任何修改的服务接口,抛出异常: java.lang.ClassCastException: java.util.HashMap cannot be cast t…

RSS 源:在信息洪流中找回你的时间掌控权

简单介绍了 RSS 后,那么关键的一步就是建立好自己的 RSS 源了。200.RSS源管理 简单介绍了 RSS 后,那么关键的一步就是建立好自己的 RSS 源了。 并不是所所有平台都会提供 RSS 源,因此我们也没办法直接去订阅。 目前使用 RSS 的难题之一就是 RSS 源的匮乏,是无数人重新拥抱 …

P5431 【模板】模意义下的乘法逆元 2

看到5e6的数据,500ms的时限,\(O(NlogN)\)快速幂直接跑肯定会T掉,那我们就要考虑优化一下式子。 我们令\(s = \prod_{1}^{n}{a[i]}\) ,那我们给第i个式子通分,就为$ \frac{k^i*s/a[i]}{s} $ \(s/a[i]\) 就相当于$ \prod ^{i-1}_{1}{a[i]}* \prod _{i+1}^{n}{a[i]}$ 因此我们只…