三维项目开发记录

疫情在家这半年里,上层一直没有停止让我们跟进项目的实施,只是工作具体内容总是在变动,开始让我们在ubuntu上开发项目,等我们在服务器上配置好环境后,又说要和公司那边衔接,公司那边做前端,他们那个软件只有windows的,于是我们又在windows配置了一遍openmvg-openmvs。可能是因为沟通存在一些不及时不准确吧,中间消耗了很多无用功。

最开始学习了几个开源软件的界面设计,一个是AliceVision,一个是专业做匹配的软件(没记错的话叫colmap)。前者是直接用深度图做稠密点云的,后者需要cuda,我苹果笔记本没有就没测试成功。

目前的需求就是搭建好平台,集成到公司软件平台上去。学习那个软件的开发也是废了一些功夫,(该软件简称做MA吧)MA只能在VS2010下进行开发C#环境,不支持VS2013以上的版本,而OpenMVG-MVS是需要VS2015以上的,所以我们在配置好了openmvg以后,有一个转换过程。简单来讲就是,把c++装一个c#的壳,先将openmvg编译成的exe执行文件改成dll动态链接库,再用封装成c#的dll,最后放进MA的开发环境里去形成一个MA可调用的插件。

第一步 配置windows系统下的openmvg-mvs
openmvg比较容易,之前写过一篇博文,注意就是编译的时候,需要对应版本,x64对应x64,debug对应debug,release对应release,对应是指跟后续封装它的c#的版本对应,否则就会出错。
openmvs的话就比较复杂,推荐使用官方教程配置,用vcpkg下载,而且需要用到科学up网,这个自己可能需要点功夫找了。我是一遍就安装成功了,配环境尽量一次性搞完。测试数据需要openmvg的exe跑的结果。

第二步 exe改成dll
用到的是
extern “C” __declspec(dllexport) __declspec(dllimport)
这是师弟研究出来的,直接将原函数的main函数名改一下就可以了,然后属性exe改成dll,重新生成就改成了dll。openmvg有7个基本功能(在官方发布的release教程里一个python脚本文件里)都是这样套模板改一下。

第三步 dll封装成c#的dll
c++和c#还是有一些不同,比如c#里面不能用指针,用sring[]代替char**,但具体替代也是一两行代码很简单。这里需要把第一步生成的dll放在c#工程对应的debug或者release文件夹下面。

第四步 MA开发
这里就没什么好说,就根据不同软件平台的要求进行调用了。稍微吐槽几句,不同软件有不同的变态之处,比如MA吧,他每次测试完成后都要重启软件新建一个工程- -,而且新建的工程文件分散在MA安装文件夹里,不易找到。最烦人的是我们开发的dll有10几个的时候,它界面调用只能一个一个在选框里选,可幸的是聪慧的师弟发现了每次调用都在某个文件夹里留有备份,多个引用时直接粘贴到那里就行了(真棒)。

最后,我们完成了openmvg-openmvs的十几个功能的开发集成,但是公司嫌弃我们的界面太简陋(不好意思,我们就只会做个菜单栏以及一些功能button)。中间也遇到一些问题,简单记录一下。

1.最开始做openmvg的计算匹配以及计算特征时,耗时非常久,这个主要是因为用的debug环境,换成release基本就是十几秒,相当于发行exe的速度了。中间有个弹窗问题,换成release,玄学的消失了。

2.调用的dll都要放在对应的所在文件夹里,openmvs会依赖多个第三库dll,都是需要的。

3.有的功能自动创建目标结果的文件夹,有的不会自动创建,需要手动添加存放结果的文件夹。

你可能感兴趣的:(三维重建研究)