刚刚在北京结束的Ismar2019增强现实领域的顶级学术会议年大会上,来自加州大学伯克利分校的openark开发团队提供了一个教程,介绍了这个强大的增强现实开源,OpenARK。
OpenARK是于2016年在加州大学伯克利分校创建的开源可穿戴式增强现实(AR)系统。基于C ++的软件提供了创新的核心功能,可为各种现成的AR组件提供动力,包括透明眼镜,深度摄像头和IMU。
开源平台包括高级模块,以帮助人机交互,例如3D手势识别,平面检测,化身/姿势跟踪和多用户协作,还包含基本工具,例如基于AR的相机校准,深度到立体声,SLAM以及它。当前,它同时支持PMD Pico Flexx和Intel RealSense SR300摄像机。该项目在Windows和Linux上都原生构建。
我们来看下他的演示视频:
看到下面这种图是不是在很多科幻片中见过,隔空放大缩小飞机模型:
在看看现实增强拼积木:
特点
-
多目标追踪,实时模拟用户的手势和周围物体
-
硬件整合,将OpenARK与您选择的硬件设置集成
-
游戏引擎支持,将跟踪结果无缝地传输到流行的游戏引擎(例如Unity)。
-
技术堆栈:C ++,OpenCV,PCL,Boost,OpenNI,RealSense 3D SDK,PMD SDK
-
状态:Beta 0.8
-
应用演示:vimeo.com/205084929
依赖
Hardware
-
Depth Camera
-
RGB Camera
-
Transparent AR Glasses (optional)
Software
-
Eigen 3
-
OpenCV 3.2.0+
-
PCL 1.8
-
Boost 1.6.4
-
Ceres-solver
-
DBoW2
-
etc. for the full list, see DEPENDENCIES.md
安装
Building From Scratch
以下文档中提供了说明:
-
Windows:documentation / Windows-build-instructions.pdf
https://github.com/augcog/OpenARK/blob/master/documentation/Windows-build-instructions.pdf
现在可以使用新的依赖项包安装程序,它可以加快设置过程。请阅读说明文件/Windows-build-instructions-quick.md以获取说明。可以在https://github.com/sxyu/OpenARK-Deps/releases/download/0.0.1/openark-deps-vc14-win64.exe中找到安装程序。
-
Linux:documentation/Linux-build-instructions.md
https://github.com/augcog/OpenARK/blob/master/documentation/Linux-build-instructions.md
要使用头像模块/演示:您将需要手动下载SMPL模型文件。指令位于data / avatar-model / README.md中。您也可以通过运行data / avatar-dataset / download.sh下载数据集样本。
对于Windows需要预编译二进制文件
此处https://github.com/augcog/OpenARK/releases提供了用于64位Windows的预构建二进制文件。仅针对主要版本进行了更新。静态库(带有标头)和演示程序都包括在内。为了使SVM正常工作,svm /文件夹必须存在于当前目录中或OPENARK_DIR环境变量指向的目录下。
使用
用Visual Studio C++ 打开OpenARK项目:
设置完所有依赖的库 (OpenCV, PCL, etc.) 通过下面配置添加需要的库文件, add openark_x_x_x.lib to Project > MyProjectProperties > Linker > Input > Additional Dependencies.
然后添加include目录OPENARK_DIR/include to C/C++ > General > Additional Include Directories.
最后确定在 C/C++ > Code Generation, Runtime Library 设置为 Multi-threaded DLL (/MD)开发模式.
现在你可以使用 #include OpenARK's 该语句包含OpenARK.所需要的头文件进行开发。
我们来看看这是执行手部检测程序的代码:
...
#include "core.h"
#include "SR300Camera.h"
#include "opencv2/core.hpp"
#include <vector>
...
int main() {
ark::DepthCamera & camera = ark::SR300Camera(); // OpenARK camera backend
ark::HandDetector detector(); // OpenARK hand detector; also see PlaneDetector
// start the camera; alternatively, call nextFrame() manually inside the loop (slower)
camera.beginCapture();
...
while (true) {
cv::imshow("XYZ Map", camera.getXYZMap());
detector.update(camera);
std::vector<ark::Hand::Ptr> hands = detector.getHands();
// do something with the hands detected
...
// quit when q is pressed
if (cv::waitKey(1) == 'q') break;
}
...
// automatically stops capture on exit
}
相关论文源码下载地址:关注“图像算法”微信公众号 回复“增强现实”