首页 > 编程语言 >海康网络相机C#封装库

海康网络相机C#封装库

时间:2024-08-13 19:05:55浏览次数:15  
标签:... 封装 string C# 海康 camera originalPath CameraDevice

前言

最近做项目过程中,使用到了海康相机,官方只提供了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();
		// ImageSharp
		Image<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();

结束语

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

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

标签:...,封装,string,C#,海康,camera,originalPath,CameraDevice
From: https://www.cnblogs.com/onecainiao/p/18357459

相关文章

  • 嵌入式软件--C语言项目 客户信息管理系统
    考虑到目前C语言的学习是以为嵌入式做基础而进行的,项目所使用到的语法和结构都是嵌入式常用到的,这是较为特殊和针对性的项目,不与其他同名项目作比较。若有参考着谨慎借鉴。实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。1.需求说明(1)主菜单......
  • 【自用10.2】C++结构体-指向结构体的指针&使用结构体传递值
    指向结构体的指针#include<stdio.h>#include<stdlib.h>#include<string.h>struct_friend{charname[32];charsex;//m-男f-女intage;};intmain(void){struct_friendgirl={"小珑",'f',18};stru......
  • 【自用11.】C++枚举
    概念当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 枚举类型的定义enum枚举名{枚举元素1,枚举元素2,……};//例如e......
  • 第18 章探讨 C++新标准 移动构造函数解析,强制移动
    第18章探讨C++新标准移动构造函数解析,强制移动第18章探讨C++新标准移动构造函数解析,强制移动文章目录第18章探讨C++新标准移动构造函数解析,强制移动18.2.5强制移动程序清单18.3stdmove.cpp18.2.5强制移动移动构造函数和移动赋值运算符使用右值。如果......
  • Multicast Proxy
    OracleRAC(RealApplicationClusters)的组播通常用于私网环境。在RAC架构中,组播是一种重要的通信机制,用于在集群节点之间高效地传输数据。这种机制特别适用于实现诸如缓存融合(CacheFusion)等功能,它允许多个数据库实例在不同的服务器上协同工作,同时保持数据的一致性。在某些云环境......
  • 数组拷贝System.arraycopy
    数组拷贝第一种方式:packagecom.coding.demo.concurrent;importjava.util.Arrays;/***使用Arrays.copyOf()*/publicclassTestArraysCopyOf{publicstaticvoidmain(String[]args){int[]src={1,2,3,4,5,6,7,8,9};int[]dest=Arrays......
  • CRS-2101:The OLR was formatted using version 3
    RHEL7.5中安装11gRAC时,在gridinfrastructure的root.sh执行时,报错:  #/oracle/product/11g/grid/root.sh...AddingClusterwareentriestoinittabohasdfailedtostartFailedtostarttheClusterware.Last20linesofthealertlogfollow:2019-01-0417:0......
  • DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024
    论文分析了现有的新类别发现和定位(NCDL)方法并确定了核心问题:目标检测器往往偏向已知的目标,忽略未知的目标。为了解决这个问题,论文提出了去偏差区域挖掘(DRM)方法,以互补的方式结合类无关RPN和类感知RPN进行目标定位,利用未标记数据的半监督对比学习来改进表征网络,以及采用简单高效的m......
  • cmd怎么进入d盘某个文件下面
    1、打开命令提示符首先,我们需要打开命令提示符。可以通过以下几种方式来打开Cmd:1.使用快捷键:按下Win+R键,在运行对话框中输入"cmd"并点击"确定"按钮;2.使用开始菜单:点击开始菜单按钮,在搜索栏中输入"cmd",然后从搜索结果中选择"命令提示符"或"CommandPrompt";3.使用文件资源......
  • rocky minum necessary for installation
    安装依赖yum-yinstallgccautomakeautoconflibtoolmakeyum-yinstallpcre-developensslopenssl-develgd-develgccgcc-c++yasm-1.3.0 安装cdyasm-1.3.0./configuremake&&makeinstall安装ffmpegcdffmpeg-xxx./configure--prefix=/usr/local/ffm......