两个问题:1.摄像机旋转卡顿;2.整个程序卡死;

0 投票
最新提问 5月 19 用户: powerpbk (160 分)
修改于 5月 20 用户:powerpbk
Easy版本:EasyARSenseUnityPlugin_4.2.0.1102

使用功能:MotionTrackerCameraDevice

测试手机:华为nova 3i

Demo功能:场景上放了些3D对象,使用AR功能拿手机走动观察

问题一:摄像机旋转卡顿

描述:原地不动时,那手机旋转观察周围3D对象,摄像机旋转会卡顿,中间有几秒钟摄像机旋转角度不会变化,然后突然变到新的角度,在一些时候会集中出现该情况。请问下该情况需要怎么处理或优化效果?

问题二:整个程序卡死

描述:程序运行一段时间后(10m-30m),程序帧率会在3-5秒内急速下降,画面会迅速突然卡顿死。测试排除Demo内存泄露问题,不是Demo程序代码问题。当前怀疑EasyAR问题,未能发现必能重现原因,请问下是否有遇到同样的问题,可能是什么原因导致的?需要怎么处理?

1个回答

0 投票
最新回答 5月 20 用户: easyarguxin (1,980 分)

你可以尝试切换到EasyARSenseUnityPlugin_4.3的某个版本,里面有修复一些bug。

另外4.3里有VIO模式,SLAM模式,Anchor模式,你可以切换测试一下。

VIO模式使用最少的 内存和计算量,节省资源。

SLAM模式包括建图,占用更多CPU和内存。

Anchor模式支持设置锚点,将虚拟物体锁定在某个地方,占用最多CPU和内存。

发表于 5月 27 用户: powerpbk (160 分)
我更新到了最新的4.3版本测试几天,还是有该问题
我通过真机性能测试发现,其中ARSession.Update()和Camera.Render CPU消耗相对最多,另外有一些测试时看到GPU消耗很大。

当前问题:室内测试还好,但一到室外测试,摄像机就开始漂移,摄像机旋转开始卡顿,帧率下降,手机开始发热。

之前在室外测试都还好,但最近发现,在室外光线比较好的时候,就很容易出现问题,我猜测是不是运动追踪通过摄像机获取的室外图像,在光线较强的情况下,识别算法会出现识别不准等一些问题,并且进入大量的计算情况,导致帧率下降,手机发热。

不知道我猜测对不对,请问下该情况可能是什么原因导致的,需要怎么解决?感谢!
发表于 5月 27 用户: easyarguxin (1,980 分)

4.3版本相比4.2版本的SLAM地图占用内存太多,我们正在尝试推出新的版本解决4.3内存过高的问题。

你可以在运行4.3时,只启动VIO模式,占用计算资源最少,但是VIO模式不会校正位姿,这意味着累计的漂移无法消除。

发表于 5月 27 用户: easyarguxin (1,980 分)

MotionTrackerCameraDevice.setTrackingMode,用于支持不同的跟踪模式

发表于 5月 28 用户: powerpbk (160 分)
我使用VIO模式进行最新的测试,又有新的测试反馈,这次数据可以给到贵部技术人员,或许有些帮助。

出现方式:放了25个左右的模型,手机一直四周晃动,开始时画面还好,但摄像机卡顿,然后手机放在桌子上,摄像机对准桌面,识别图基本全黑就卡死了。

测试结果同样是卡死,通过性能分析确定了进一步的问题点:

1.卡死时 ,代码主要卡在函数WaitForTargetFPS/Semaphore.WaitForSignal;CPU消耗在VSync垂直同步异常猛增;

2.卡死的前三帧,主要消耗性能函数是,ARSession.Update,耗时16ms-34ms;  其中异常的是该函数GC调用在111-113次不等,GC占用内存在3.5kb-3.6kb;
我根据以上情况得到结论:在一些异常识别情况下,ARSession.Update的某种运行算法,会导致大量GC,导致VSync异常增高,最后都出现卡线程WaitForTargetFPS,程序卡死。
希望能得到该问题出现原因和告知怎么处理该问题?
发表于 5月 28 用户: easyarguxin (1,980 分)

motiontracking为什么会有识别图?

你是motiontracking和imagetracking一起用了吗?

发表于 5月 28 用户: powerpbk (160 分)
我描述有误,不是识别图,是AR主要通过摄像机图像算法进行运动追踪,我说的识别图指的是摄像机的AI图像算法。

准确是,摄像机近距离对准桌面,摄像机获取的画面是全黑的。
发表于 5月 28 用户: easyarguxin (1,980 分)

我们测试nova 3,使用官网的unity sample。未复现你描述的現象。
1.你使用原版官网sample运行测试下,不做任何改動。
2.你使用其他手机测试下,排除单个手机硬件或软件问题。

发表于 5月 28 用户: powerpbk (160 分)
EasyAR:EasyAR Sense Unity Plugin Version 4.3.0-1931.fb511f99
Scene:MotionTracking(未做任何修改)
Unity:2020.3.9f1c1
手机:华为 Nova 3i,荣耀 COL-AL10
重现方式:
1.Unity新建3D项目,导入EasyAR包,API选择Android7.1,开启真机性能测试,然后Build And Run;
2.运行后,随便放下小方块,就坐着左右晃下,多向下向上或快速晃动(摄像机图像怎么难识别怎么做),在性能界面性能开始异常增高后,就把手机摄像机朝下放着,很快就会卡死。如果没卡死,重复以上步骤,几分钟到最多10分钟就能重现。
另外,上午我说的ARSession.Update GC当前发现一直很频繁,我现不确定是否是该问题导致。当前我测试了两台手机,均按照以上方法能重新改问题。希望贵部能再次测试确认问题。
我们正使用EasyAR做项目,但遇到该问题影响很大,希望能尽快得到回复。
发表于 5月 28 用户: powerpbk (160 分)
我现在项目正常运行时发现有卡死卡顿现象,最开始并非是以上重现方式出现的,
我在分析和尝试重现问题时,找到以上重现方式可以快速重现问题,但实际正常运行过程中,也有出现卡顿卡死的情况。可见我最开始提问的描述。
发表于 6月 1 用户: powerpbk (160 分)
是不是与多线程渲染有关系-Multithreaded Rendering?
发表于 6月 4 用户: easyarguxin (1,980 分)

我们没有nova3i这台手机,我们使用nova3进行了测试,

4.2存在突然变到新的角度的问题,在4.3已经修复了。

4.3地图占用内存很大,退出时会导致画面卡顿。在4.4会修复该问题,减小地图大小。

运行中卡顿的现象未复现。但我们推测与内存占用、VIO重定位有关系。这部分会在4.4里有所优化。

发表于 6月 4 用户: powerpbk (160 分)
那相当于你们测试后还是没找到这个问题点。。。

我这边确实出现这个问题,并且用官方demo和多台手机均重现了,主要严重的情况是程序会卡死,这个问题很大。

如果需要的话可以来一个技术人员和我对接下:我可以重现该问题便于你们确定问题点。

如果可以的话,可以通过我账号的邮箱QQ号联系我,其他联系方式也行。

另外给两个优化方向建议:

1.ARsessIon.Update,这个函数通过性能检测,发现性能消耗很异常,希望重点关注下;

2.之前测试有个异常BUG,也注意下:

  2.1 首先再静止不动时,摄像头保存了一个画面特征数据a1,并绑定了摄像机坐标b1;

  2.2 在识别异常情况下,手机未动,摄像机会发生大幅度偏移,最后摄像机停在一个异常位置;

  2.3 在异常位置的摄像机,会保存另一个画面特征数据a2,并绑定了摄像机异常坐标b2;

  2.4 这时会出现,手机在同一位置,手机在同一画面,轻微晃动下,会在画面特征数据a1和a2来回识别,这是就会出现摄像机在b1和b2位置来回切换。
欢迎来到 EasyAR Q&A ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...