目前许多终端设备上都带有摄像头,这使得物体检测应用可以在终端设备上运行。但物体检测算法需要进行大量运算,终端设备的运算力通常不能满足实时物体检测所要求的低时延。若将算法交给服务器运行,则传输时延变得不可接受。
Glimpse周期性地将一些关键帧发送给服务器,由服务器标记关键帧中的物体,终端设备缓存一部分帧,并且根据关键帧的标记在缓存帧中追踪要检测的物体。从而降低时延并减少带宽需求。
注:object detection(检测) 和 object reconition(识别) 的区别:物体检测指发现物体的存在,标记物体的位置。物体识别指确认物体是什么。先要检测出物体才能识别物体。
物体识别的三个步骤:
物体追踪技术:在不同帧之间使用物体的特征点追踪移动的物体。
挑战:在终端设备中进行物体检测和识别所耗费的时间和能量都远大于服务器,但运行物体追踪的消耗很小。
核心问题:服务器需要大量时间来检测和识别物体,所需要的时间远大于相邻帧间隔,当服务器返回识别结果时,该物体可能已经发生移动,此时终端设备如何实时地对物体进行定位?
我们打算使用关键帧标识+物体追踪来定位所有帧中的物体。需要缓存的帧是上一个从服务器回来的关键帧到当前帧之间的所有帧。当前帧中的物体定位就通过关键帧和缓存帧而得。如果我们遍历缓存中的所有帧,那时延将变得不可接受,所以我们只能挑选缓存中的部分帧来运行物体追踪。问题转化为应该挑选多少帧和挑选哪些帧。
n:当前帧到关键帧之间帧的数量。缓存的帧数。
l:从缓存的帧中挑选l帧进行物体追踪。p = l/n。
e:运行一次物体追踪所需时间。
通过实验寻找p与n,e的关系。确定最佳的p。
确定p后,可计算出l。表明需要挑选l帧。
将所有的n帧转化为灰度图,逐像素比较,得出相邻两帧的差异度,根据差异度将n帧划分到l+1个区间,使得所有区间中最大差异度之和最小。可用dp求解。
确定某一帧是否发送给服务器的主要目的在于不损失精度的情况下降低带宽开销。
使用三个方法确定某一帧是否作为关键帧发送给服务器: