目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic)。CV的方法很多,简单些比如FREAK+ICP(ARToolKit中的NFT),复杂些就是SLAM(Magic Leap)。CG就没什么好说的,利用CV算法获取到的图形相关信息(比如CG中的模型矩阵、视图矩阵、投影矩阵)进行绘制。从这一点上来说Pokemon GO确实不能算作AR游戏,毕竟人家只是基于LBS的。
从目前来看vision based的AR系统才是主流。但是局限于我个人的见识,只使用过Vuforia、EasyAR、ARToolKit。大家有兴趣的话,可以看一下知乎上的讨论 - 有哪些比较优秀的AR开源项目,或者SDK?
Vuforia没得说,商业SDK,支持的特性也比较多,好像可以支持3D Object Tracking,具体支持到什么程度,还没有尝试,大家感兴趣可以登录Vuforia官网。EasyAR是国内的一款SDK,AR识别性能还是要赞一个,大家可以去看EasyAR官网视频,还是很真实地反映了其性能(不像Magic Leap之前那个鲸鱼的视频),个人还是很看好的,比起Vuforia最大优势是免费使用时不需要水印(^_^;)。而ARToolKit相对上述两个SDK在识别性能和特性上表现的不是很突出,但是ARToolKit胜在开源,如果你需要做一些AR业务扩展,而Vuforia和EasyAR不能满足你,ARToolKit是一个很好的选择。而且AR其中一个趋势就是集成到现有App中,那么使用Vuforia和EasyAR的代价就比较大了。另外作为一个学生,抱着研究学习的心态,ARToolKit就再合适不过了。
所以后期我还是专注于ARToolKit的研究上,听说今年秋天ARToolKit6将发布,还是很期待的,ARToolKit官网链接请戳。
ARToolKit系统核心思路是这样的:
下面以NFT(自然图片追踪,Natural Feature Tracking)为例,简述AR实现流程
1. 通过相机校准(标定),获取到因为相机制造工艺偏差而造成的畸变参数,也就是相机内参(intrinsic matrix),来复原相机模型的3D空间到2D空间的一一对应关系。这对后面的特征提取步骤有很大作用。
2. 根据相机本身的硬件参数,我们可以计算出相应的投影矩阵(Projection Matrix)。
3. 对待识别的自然图片(也就是任意的一张二维图片)进行特征提取,获取到一组特征点{P1}。
4. 实时对相机获取到的图像进行特征提取,也是一组特征点{P2}。
5. 使用ICP(Iterative Closest Point)算法来迭代求解这两组特征点的RT矩阵(Rotation&Translation),即Pose矩阵,也就是图形学中常说的模型视图矩阵(Model View Matrix)。
6. 有了MVP矩阵(Model View Projection),就可以进行图形绘制了。
ARToolKit支持特性
目前来说,ARToolKit支持自然图片/Marker/2D BarCode的识别。
- 自然图片处理
这个应用比较广泛,对用户的限制也会小很多。不过最好使用一些特征比较明显的图像,效果会更好。
- Marker/MultiMarker
这是一种经过特殊处理的图像,需要在边缘包裹两层,最外侧是包裹了白色/浅色边缘,内侧是包裹了黑色边缘,大家猜也能猜出来这样做主要是提高识别度,同时也方便计算Pose(因为可以直接提取边缘来计算Pose)。如下图:
- 2D BarCode(二维码)
这个没什么好说的,最常见的。
另外ARToolKit目前支持的渲染引擎是OSG(OpenSceneGraph),不过版本比较低。当然,你也可以使用OpenGL ES进行绘制。毕竟我们只需要获取到了MVP矩阵,理论上绘制部分是可以完全分开的。
参考资料
实际体验
ubuntu16.04下安装artoolkit
github上有artoolkit在linux上的安装文档,https://github.com/artoolkit/artoolkit5
安装依赖项
sudo apt install clang sudo apt install libc++-dev
ARToolKit follows the Linux model whereby required software is externally installed. The following packages are required to be installed in your package manager to run the ARToolKit examples. (Additional packages required to build ARToolKit from source are listed on that help page.)
- C++ runtime: use the standard libstdc++ or install the package ‘libc++1‘.
- OpenGL: Package ‘xorg‘
- OpenCV (unless building with Clang). Packages: ‘libopencv-dev‘.
- GLUT: Package ‘freeglut3‘. Alternatively, GLUT can be built from source and is also included in the MESA 3D libraries:
- Video4Linux, lib1394dc, or GStreamer. Packages: ‘libv4l2-0‘, ‘libdc1394-22‘ (for lib1394 version 2.x) or ‘libdc1394-13‘ (for lib1394 version 1.x), and ‘libgstreamer1.0‘ or ‘libgstreamer0.10‘.
- OpenSceneGraph (optional; The ARToolKit OSG renderer requires OpenSceneGraph). Package ‘openscenegraph‘.
- 安装需要 OpenGL OpenCV Video4Linux 可选OpenSceneGraph
sudo apt install libc++1 sudo apt install libopencv-dev sudo apt-get install libdc1394-22 libraw1394-dev sudo apt-get install libv4l-dev sudo apt-get install libgstreamer1.0 sudo apt-get install libgstreamer0.10
以上依赖项都安装完成后,就可以下载artoolkit的源码编译安装
git clone https://github.com/artoolkit/artoolkit5.git
cd到源文件目录下执行
cd artoolkit5 ./share/artoolkit5-setenv
./Configure
./Configure make
一路 y,没有报错的话就安装成功了
好了之后 就会发现有一个bin目录:
再跑它的例子的时候要注意一下:
Linux:
simpleLite can be launched from a terminal window thus:
- First, set the environment variable ARTOOLKIT5_VCONF to indicate the video device to be used; for example, to use a Video4Linux2 camera, do:
export ARTOOLKIT5_VCONF="-module=V4L2"
or to use a camera driven via GStreamer, doexport ARTOOLKIT5_VCONF="-module=GStreamer"
- then cd to the bin directory and do
./simpleLite
也可以参考一下 他的博文:https://blog.csdn.net/sinat_37335165/article/details/73467764
参考:
[1] http://www.cnblogs.com/polobymulberry/p/5857372.html
[2] https://blog.csdn.net/weixin_41330194/article/details/80607382
原文地址:https://www.cnblogs.com/feifanrensheng/p/9164063.html