官方人体检测和跟踪demo中
对异步调用采用了NodeOutputManage对推理结果进行排序,其中Feed函数如下:
问题如下:
1. 当cache_frame_.begin() 时间戳和cache_node_output_.begin()的时间戳不相等时,for循环仍会继续,但循环已无意义?
2. 红框中的break似乎永远不会执行?
官方人体检测和跟踪demo中
对异步调用采用了NodeOutputManage对推理结果进行排序,其中Feed函数如下:
问题如下:
1. 当cache_frame_.begin() 时间戳和cache_node_output_.begin()的时间戳不相等时,for循环仍会继续,但循环已无意义?
2. 红框中的break似乎永远不会执行?
问题1:
有意义,例如L156到L160的逻辑是首个推理结果和首帧图像数据的时间戳相差大于阈值,说明存在推理丢帧,需要删除首帧图像数据,然后继续下一个循环判断时间戳是否匹配。
举个例子:图像缓存的时间戳序列是[1, 2, 3],输出的推理结果时间戳序列是[2, 3],第一次循环时时间戳序列为1的图像没有推理输出,第一次循环会删除这个缓存(加入时间差大于阈值);第二次循环时图像缓存的时间戳序列是[2, 3],时间戳为2的推理结果匹配成功,对外输出结果。
问题2:
break永远不会执行,其实就是上一层if的情况。
明白了,谢谢
这块逻辑是有问题,相当于排序失效了。
这里主要是考虑两个特殊情况:未启用输出排序功能;消息不完整(没有时间戳)导致无法排序。
正确的逻辑应该如下(今天会提交到github,10月份版本正式发布):