使用插件获取数据

API 提供了 EnablePlugin() 函数,以启用某路径下的插件。

官方目前提供了些计算双目视差的插件,在 MYNTEYE_BOXPlugins 目录内。

Plugins/
├─linux-x86_64/
│  ├─libplugin_b_ocl1.2_opencv3.4.0.so
│  ├─libplugin_g_cuda9.1_opencv2.4.13.5.so
│  ├─libplugin_g_cuda9.1_opencv3.3.1.so
│  └─libplugin_g_cuda9.1_opencv3.4.0.so
├─tegra-armv8/
└─win-x86_64/
  • 目录 linux-x86_64 表明了系统和架构。
    • 可从系统信息或 uname -a 得知你的 CPU 架构。
  • 库名 libplugin_* 表明了插件标识和第三方依赖。
    • b g 是插件标识,说明用了不同算法。
    • ocl1.2 表明依赖了 OpenCL 1.2 ,如果存在。
    • cuda9.1 表明依赖了 CUDA 9.1 ,如果存在。
    • opencv3.4.0 表明依赖了 OpenCV 3.4.0 ,如果存在。
    • mynteye2.0.0 表明依赖了 MYNT EYE SDK 2.0.0 ,如果存在。

首先,根据具体情况,选择你想测试使用的插件。如果依赖了第三方,那么请安装一致的版本。

然后,参考如下代码启用插件:

auto &&api = API::Create(argc, argv);

api->EnablePlugin("plugins/linux-x86_64/libplugin_g_cuda9.1_opencv3.4.0.so");

路径可以是绝对路径,也可以是相对路径(相对于当前工作目录)。

最终,和之前一样调用 API 获取数据就行了。

小技巧

如果没有启用插件的话, api->Start(Source::VIDEO_STREAMING); 时会自动在 <sdk>/plugins/<platform> 目录里找合适的插件去加载。

换句话说,可以把当前平台的插件目录整个搬进 <sdk>/plugins 目录内。安装好对应的 CUDA OpenCV 等插件依赖后重编译,此后运行 API 层接口程序,就会自动加载官方插件了。

运行前,请执行如下命令,以确保能搜索到插件的依赖库:

# Linux
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
# /usr/local/lib 指依赖库所在路径

# macOS
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
# /usr/local/lib 指依赖库所在路径

# Windows
set PATH=C:\opencv\x64\vc14\bin;%PATH%
# 或者,添加进系统环境变量 Path 里。

此外,可执行如下命令,检查是否能搜索到插件的依赖库:

# Linux
ldd *.so
# *.so 指具体插件路径

# macOS
otool -L *.dylib
# *.dylib 指具体插件路径

# Windows
# 请下载如 Dependency Walker ,打开 DLL 。

如果找不到插件的依赖库,加载时将会报错 “Open plugin failed” 。

完整代码样例,请见 get_with_plugin.cc

小技巧

Linux 上也可以把依赖库路径加入系统环境,编译出的程序就可以直接运行了(不需要于终端里 export LD_LIBRARY_PATH 再运行)。

  • 新建 /etc/ld.so.conf.d/libmynteye.conf 文件,写入依赖库路径。
  • 终端里执行 sudo /sbin/ldconfig 命令,刷新缓存。
e.g. libmynteye.conf
# libmynteye configuration
#
# 1) Copy this file to: /etc/ld.so.conf.d/libmynteye.conf
# 2) Run this cmd in Terminal: sudo /sbin/ldconfig

/usr/local/cuda/lib64
$HOME/opencv-3.4.1/lib