ZED相机 C# Api环境配置

ZED相机 C# api环境配置

目前ZED相机官方提供的api主要针对的是C++和python。

为什么要配置ZED相机在C#的Api环境

任务需求:

  1. 想要用Python中的pytourch对zed的彩色图像进行预测
  2. 预策的结果需要和zed的点云匹配
  3. 匹配的结果要在unity中实时透视显示 (增强现实)

这就引入了问题:

1.Unity中的zed插件可以获得彩色图像但是没有点云接口。
2. Python能够同时获得两者,但是无法实时把图像传递给Unity(即使用UDP多线程也无法顺畅,最后的结果肯定是实时性的坑)。
3. ZED提供的SDK不像Kinect那样可以同时在不同的程序里面读取相近时刻的图像。(就是两个程序同时读取图像)

考虑到Python中的网络要求输入的图像尺寸并不是很大,因此还是考虑在Unity中运行ZED相机,然后把图像数据压缩后用UDP实时传递给Python,Python再把识别的结果传回Unity。目前查看的博客内容能够了解到压缩后的图像可以一次性实时发给python(65535个字节以内)。 所以要解决的另外一个问题就是识别的结果如何和点云匹配。
只有两种方法可行了,一种是在C#中完成双目立体视觉的算法,另外一种是看看C#中能否有Api直接调用zed的SDK了。 后来发现在ZED官方的github中还真有这个东西,但是是测试版,文档和环境配置没有C++和Python那么方便,因此记录一下。
另外,考虑到后面用开发Hololens2,而主要的程序也是unity和C#上,所以也顺便多学习一下C#语言。

这真是一个心累何以概括。 本来很简单的一个环境配置问题。 结果因为官方的工程文件里面的一个小毛病整了一天。
在这里插入图片描述

基础环境

系统版本:win 10 专业版
VS版本:VS2019
Unity版本:8.0

环境配置

主要参考: zed C# api 工程

基础条件

  1. 下载Zed的 SDK 重新更新了下自己的,发现8月12号出了3.2版本。
    注意要和自己的CUDA版本匹配,CUDA版本和Python中的Pytourch所需的版本也要匹配。我的CUDA是10.2的.
    后来发现官方Github-APi暂时还没有升级到3.2版本,在分叉的仓库中有他们的工作人员新提交了,但是还没有被整合进去。 这边最好还是下载3.1版本的SDK 下面图片就不修改了。
    所以我下载的是以下版本:
    在这里插入图片描述

    扫描二维码关注公众号,回复: 13153232 查看本文章
  2. VS2017带C#拓展的, 我自己的是2019版本的,先试试看吧。

  3. 相应CUDA,这个是英伟达显卡的驱动软件,自己倒腾着下载吧, 记得要和python深度学习框架的版本结合起来,不要这边可以用了 那边不能用。我记得我的是V10的。

  4. Cmake3.8 最新的(支持C#的) 下载传送门
    自己下载了最新的3.18版本

  5. 下载github 上 C# api的工程资源 下载传送门

配置过程

Cmake生成工程文件

  1. 把下载下来的Api工程文件解压缩,放置到C盘ZED SDK的根目录下(C:\Program Files (x86)\ZED SDK)(路径不是必须的,自己习惯而已)
    在这里插入图片描述

2 用管理员身份打开Cmake
第一个路径指向资源的文件夹,主要为了查找CMakeLists.txt文件,所以要选择以下的路径
第二个路径指向生成代码的路径,最好也是这个路径,我试过放在根目录下不好使
在这里插入图片描述

  1. 点击下面的Congigure,选择 X64模式

在这里插入图片描述

  1. 选择后提示 配置done ,然后点击生成,提示生成done。
    在这里插入图片描述
  2. 查看该路径会发现多了很多文件
    在这里插入图片描述

构建Stereolabs.zed

  1. 右键以管理员的权限打开刚刚生成的工程文件,Stereolabs.zed.sln。用VS打开
    在这里插入图片描述
  2. 点成生成,生成解决方案
    在这里插入图片描述
    在这里插入图片描述
  3. 点选解决方案资源管理器的INSTALL,然后再右键 生成 选择生成INSTALL。这样会在bin文件夹中添加Sterolabs.zed.dll 和sl_zed_interface.dll文件
    在这里插入图片描述

构建tutorials

按照上面 的构建流程构建这个工程。
这边有一个很大的坑。
Sterolabs.zed.dll 和sl_zed_interface.dll是两个代码相同的文件,但是是不同的动态链接库,前者是托管类型的,就是也.net类型的。可以直接在C#中被引用;后者是C语言生成的,非托管的,不能直接被C# 引用。 前面构建的过程实际上是把后者生成前者,让C# 能够直接调用。
然后这边构建tutorials的过程 实际上是生成几个调用了这个Sterolabs.zed.dll的案例供我们参考。 但是坑爹的是,官方的解决方案中,在Image_Capture中误引用了sl_zed_interface.dll这个文件,导致一再生成解决方案都是报错。 折腾了一天才明白这里面的道理,由于这个版本是内测的版本,官方人员也还没意识到这里面的小问题。 解决办法很简单,就是把里面的那个引用项移除,添加生成后的Sterolabs.zed.dll就可以。

deomo

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

问题记录

构建tutorials时出现找不到Stereolabs.zed的错误

这个问题处理了好久,在构建这个zed项目的时候就发现生成的东西在调试的时候,显示拒绝访问。
后来仔细看了一下官方github的分叉请求,发现官方的这个GitHub似乎还不支持3.2版本的。因此重新装了3.1版本SDK。 真是自己给自己挖坑。

在这里插入图片描述
重新换了3.1版本的SDK后仍然存在同样的问题。最终找到了解决方案。
在打开的项目中,发现之前构建的那两个DLL文件都无法在引用中正常加载进来,可能原本的初始配置文件有问题。
在这里插入图片描述
解决办法,就是把这几个文件中含有那两个DLL文件的引用全都删除掉,
在这里插入图片描述在这里插入图片描述
然后右键添加引用
在这里插入图片描述
在SDK的bin文件夹中,添加进去就可以,记得不要添加sl_zed_interface.dll,每个子项目里面添加一次Sterolabs.zed.dll就可以
在这里插入图片描述

添加引用 sl_zed_interface.dll时报错,不是有效的程序集或者COM组件

错误如下图~~
在这里插入图片描述
这是因为这个文件并没有经过.net重新构建,不是一个托管代码,属于C、C++的动态库。 需要对他进行注册。

Update

2020/8/26 配置3.2版本

配置3.2版本的过程与3.1相差不大。
3.2 Api github
3.2 Api 下载传送门
需要注意的是,

  1. 在构建tutorials工程的时候需要把所有引用里面的sl_zed_interface.dll删掉。确保子工程里面添加了Stereolabs.zed。
  2. 在depth_sensing中的program.cs文件中,找到主函数,在第20行的代码的参数入口添加 0. 例如下图,
    在这里插入图片描述
    我记得一共两处,编译的时候如果报下面错误就修改相应的地方就可以。
    在这里插入图片描述
  3. 里面的object_detection 和positional_tracking虽然编译通过了,但是跑不起来,因为是测试版本的,估计是代码还不够稳定。 不影响,这边只是给我们提供了应用案例而已。

2020/8/26 卒

25号配置了一天的API,26白天准备修改unity的插件,下午发现unity的插件能满足自己的需求。 一口老血喷出。

猜你喜欢

转载自blog.csdn.net/scy261983626/article/details/108208518