项目直达 : ARUnity
关于
ARUnity是用Unity来实现增强现实(Augmented Reality)的简单框架。本框架面向AR初学者,对AR感兴趣并想了解其原理的同学们。框架目前仅支持标记识别,win32 x86平台,标定系统待完成,摄像机内参使用默认的参数。麻雀虽小,但五脏俱全。下一步计划是完善框架->加入自然识别(Natural Feature Tracking)->融合IMU->加入SLAM。
现况与展望
在这个领域,目前世界上商用效果最好的当属高通的Vuforia SDK(被PTC收购),其次是Metaio SDK(被Apple收购)。当然国内也有几家SDK公司,我所了解的真正掌握源代码的公司有亮风台(NFT,QQ AR采用该公司SDK)、EasyAR(IMU+NFT),VoidAR(NFT+PTAMM),这三个公司的SDK全部基于OpenCV编写,不要问我为什么知道这些公司的细节,其实反编译一下就能看出来[滑稽]。最近比较火的游戏《口袋妖怪》是采用GPS+IMU的技术。虽然AR表面上很热,但其实目前发展其实并不乐观,国内唯一能找到盈利点的AR应用当属AR涂涂乐(采用Vuforia SDK所开发)了,其实大部分开发者都处于十分茫然的状态。AR未来的发展方向将会是深度学习+SLAM,越来越依靠GPU、专用算法芯片和相关传感器。未来若干年这几个领域都是热门的研究方向,各大公司也亟需这样的人才。加油吧,各位!
简述
预备知识
- OpenCV
- Unity基础
- 计算机视觉基础
- OpenGL基础
开发语言
C++ C#
软件版本
- OpenCV(32-bit,github最新代码编译)
- Unity 5.4.0f3 (32-bit)
- Visual Studio 2013
使用方法
- 下载:
git clone https://github.com/liu-wenwu/ARUnity.git
。 - 使用Visual Studio 2013打开工程文件
Plugins/win32/arunity.sln
。 - 配置工程 x86 & release,编译成功将生成Unity插件
Plugins/win32/bin/x86/arunity.dll
,拷贝该文件到文件夹Unity/ARUnity/Assets/Plugins/x86
。 - 子项目
test
用来测试算法和接口,可以打开运行. - 打开 Unity 5.4.0f3 (32-bit),点击
OPEN
,选择项目文件夹Unity/ARUnity
。 - 在Unity项目文件管理器中打开场景文件
test.unity
。 - 确保电脑连接有摄像头.点击play按钮,将打印好的标记放在摄像头的场景中,然后我们会发现一个方块“站在”标记上.
Unity开发
ARUnityControllor (唯一必须,可配置
)
ARUnity控制器,控制算法的启动、停止和参数配置。目前可设置的参数:
- DICT : 标记使用的词典,共有17种。命令规则:DICT_位长度_个数,例DICT_5x5_50表示该词典的标记的长度是5x5 bits,共包含50个单词,单词id的范围是[0,50)。其中DICT_ARUCO_ORIGINAL是5x5 bits,1024 markers。
DICT_4X4_50 = 0, DICT_4X4_100, DICT_4X4_250, DICT_4X4_1000, DICT_5X5_50, DICT_5X5_100, DICT_5X5_250, DICT_5X5_1000, DICT_6X6_50, DICT_6X6_100, DICT_6X6_250, DICT_6X6_1000, DICT_7X7_50, DICT_7X7_100, DICT_7X7_250, DICT_7X7_1000, DICT_ARUCO_ORIGINAL
VideoQuad (唯一必须,不可配置
)
相机背景渲染器,从插件中获得相机每帧的数据并渲染。Shader采用自定义的VideoPlaneNoLight,以此去掉光照和阴影的效果。
VideoCamera (唯一必须,不可配置
)
相机背景的Unity照相机,正交投影,深度为0,Culling Mask为0(仅第0层对该相机可见),这里参数设置为相机背景始终适应屏幕尺寸。
ARCamera (唯一必须,不可配置
)
AR场景的Unity照相机,透视投影,深度为1(必须保证大于VideoCamera),Culling Mask为Mixed(ARMarker及子物价应放在这里可见的 层),为了和Unity场景一致,这里在OpenGL投影矩阵上,绕X轴顺时针旋转90°,所以对应的模型矩阵也要做同样的旋转。
★ARMarker (可多个,id不能重复,可配置
)
每个唯一标记对应的组件,这个组件的子物价将会增强到对应的现实标记上,固定配置为绕X旋转90°,Scale设为1,位置可任意。例子中子物件是Scale为0.5的方块,在ARMarker的中心,这种比例位置关系在运行时不变。目前可设置的参数:
id
标记的ID,范围在 0~词典的单词数-1.length
标记的物理尺寸,单位m,和标定系统搭配食用。在使用默认内参时,可随意设置一个合适的值,保证在投影范围内即可。use backgroud color
使用纯色还是标记图片作为marker的平面背景。backgroud color
当3被选中时,设置marker背景的颜色。
算法开发
本框架目前仅实现了标记的增强现实,可以在此基础上开发其他的AR算法,而不用关心CV矩阵到Unity矩阵的变换,以及其他到Unity的转换工作。程序结构图如下:
待补充。。。