机器人视觉资料中的对象标识和类别标识都可能写成字符串。若摘要只留下一个ID栏目,同一类别的多个物体便可能被合成同一个对象。vision_msgs的消息定义为两种标识安排了不同的位置与用途:Detection2D中的id用于不同检测消息之间的对象一致性,而ObjectHypothesis中的class_id标识对象类别。理解这条区别,是阅读视觉结果附件的基础,不等于已经验证实际检测或跟踪质量。
Detection2D原始定义包含消息头、结果数组、二维边界框和id。结果数组的元素是ObjectHypothesisWithPose,后者再包含ObjectHypothesis。这说明对象层的id与类别假设中的class_id并不处于同一个结构位置。阅读一份被展开成表格的结果时,应保留字段路径,不能因为列名都带ID就把它们互相覆盖。
官方定义把结果数组标为类别概率相关信息。数组这个结构也提醒读者,不能预先假定每条检测只有一个类别假设,更不能凭某个导出表只显示一行就补写全部原始结果。本文只阅读原始消息说明与虚构附件,没有运行检测模型、读取摄像头或接收机器人消息。

Detection2D的注释说明,不同检测消息中的同一对象应使用相同id,并明确允许该字段为空。这里描述的是消息中标识所承担的关系。它不把所有同类别对象合为一个,也没有承诺任意实现都能在遮挡、视角改变或重新出现时维持正确身份。
因此,附件中的对象标识应连同来源实现及资料范围记录。空字符串在定义中是被允许的,但截图空白是否来自空字段、导出遗漏或界面裁切,仍需查看原始材料。不能仅凭一个空格就宣布设备没有检测到物体,也不能为了表格完整而复制旁边类别值当作对象标识。
ObjectHypothesis把class_id定义为对象类别的唯一标识,并说明若要取得可读类别名称等附加信息,应查阅相应元数据。这个字段表达某种类别,不是给画面中的每个实体分别编号。多个被归为同类的对象可以共享类别标识,却仍然需要对象层的关系来解释它们是否为同一个检测对象。
消息还为假设提供score字段。保留类别标识并不等于可以省略假设背景,把类别直接写成已经确认的实物身份。本文不讨论评分阈值、不计算识别正确率,也不把类别名称与真实物体逐一对应。元数据查找只是解释编码的一个环节。

设想一份明确虚构的仓内机器人附件,画面中有两个同类箱体,提交者给它们不同对象标识,却使用相同类别标识。编辑若按类别标识去重,可能把两条对象记录压成一条;如果按对象标识查类别,又可能查错元数据入口。问题来自字段角色被混用,不表示真实系统发生了漏检。
修订这份虚构表时,可以分别保留对象层标识、类别假设路径与可读名称的来源。若表格曾删除结果数组层次,应说明采用了怎样的展示规则,而不是假装展平后的每一列都对应原消息顶层。这样的说明让后续读者知道摘要保留和省略了什么。
Detection2D定义还说明,生成检测的源数据不属于该消息本身,并交代消息头与源数据的对应背景。因而一份标识表并不自动包含原图,更不能让读者重新看到全部检测依据。需要原图或其他材料时,应明确指出附件范围,而不是用字段定义代替实际证据。
本站机器人视觉资料与消息定义阅读可继续整理这类关系。清楚的结论应分别回答对象标识怎样用于一致性、类别标识怎样解释类别,以及提交资料是否保留了各自来源。表格读清楚以后,实际视觉表现仍须由真实观察另行支持。
主要来源:Detection2D原始定义;ObjectHypothesis原始定义;类别假设与位姿包装定义。本文阅读ros2分支,实际项目仍需保留自身版本。