广义的说,所有在实景画面上叠加了虚拟元素都属于增强现实拍照,比如叠加相框的前景拍照,或者抠像前后景叠加。
但是我们一般提到AR拍照,都是需要基于人体或者人脸的位置信息进行元素叠加,且这些元素需要跟着目标位置移动,甚至是旋转。比如在用户头顶虚拟出帽子,人脸上虚拟出胡子,人手上出现气球。
硬件
可以使用网络摄像头,基于OpenCV去框定人脸、五官、手去做AR的功能。也可以使用体感设备,比如Kinect去做位置的跟踪。由于早期Kinect在这方面接入比较方便,在使用Unity的情况下,Kinect比OpenCV要更加精准和稳定,所以一直以来,使用体感设备会比较多。
其他硬件需要准备的就是主机和显示设备,比如电视或者LED拼接屏。
软硬件的准备工作参考:Unity体感应用开发——Kinect V2 获取彩色摄像头数据
软件
在准备好硬件,sdk和开发环境Unity,并导入了插件之后:
1 非脸部骨骼点跟踪
关注OverlayDemo的JointOverlayer脚本:
Foreground Camera:根据这个摄像机去判断基准方向,并将骨骼点的在彩色坐标系中的数据换算为Unity世界坐标数据。
playerIndex:跟踪哪一个玩家的骨骼点。
trackedJoint:就是需要OverlayObject去跟踪的骨骼类型。
OverlayObject:你需要AR的虚拟物体。
Smooth Factor:为了防止侦测信息的抖动,用了一个Lerp去渐变位置和旋转。
Tips:
1 帽子:帽子的位置严格来说不是Head的位置,而应该是Head的Pos+(Head的Vector3 - Neck的Vector3)
2 其他位置:骨骼点在实际彩色画面中的体现,不是人体的边缘。所以UI素材在处理上要有一定的空间留出来。
2 脸部骨骼点跟踪
关注KinectFaceTrackingDemo5的FacePointOverlayer脚本
配置参数与上述相似,包含35个面部关键点。