本章包含基于样本的识别算子。
基于样本的识别技术能够根据纹理或颜色等特征属性识别经过训练的对象。这使您能够识别不携带条形码或数据码的物品。相较于 分类 章所述的分类方法,基于样本的识别在准备和训练方面极为便捷,因其无需复杂的参数调优。基于样本的识别能够区分大量对象。该识别方法对旋转、缩放和光照变化具有稳健性,同时也能应对遮挡、杂乱环境及中等程度的透视失真。此外,该识别方法对对象的中等变形具有稳健性,在一定范围内甚至能识别散装存储的产品。另一方面,这意味着当对象除某一特征外完全相同(而该特征恰好是识别方法具有稳健性的)时,则无法进行区分。需注意基于样本的识别方法仅适用于具有纹理特征的对象。
基于样本的识别每次只能识别一个对象。这意味着每个查询图像——更准确地说,每个查询图像的域——都不能包含多个对象。
| ( 1) | ( 2) |
| ( 3) | ( 4) |
identify_vegetables.hdev。
以下简要描述了使用基于样本的识别所需的步骤。
首先,必须通过创建并准备新的样本标识符来提供样本标识符,通过算子
准备工作对于将样本标识符的内部数据结构适配至待识别的对象类型至关重要。或者,可通过 从文件中读取已准备好的样本标识符——该标识符此前已通过
read_sample_identifier 写入文件。write_sample_identifier
预制样本标识符可视为一个仓库,其设计旨在优化特定对象组的处理流程。
随后,需使用待识别的个体对象样本对准备好的样本标识符进行训练。为此,将使用
算子。请注意,样本标识符可随时重新训练。为此,可通过 算子从标识符中移除样本,并通过
remove_sample_identifier_training_data 算子向标识符添加新样本。若待识别的对象类型变化不大,则无需重复准备标识符。以上述图片为例,训练过程相当于仓库的填充过程。
add_sample_identifier_training_data
最后,训练好的样本识别器可用于识别对象,通过算子 with
除上述算子外,还可使用以下算子管理样本标识符。通过
算子,可移除添加至样本标识符的数据,从而排除其在预处理中的使用。算子
remove_sample_identifier_preparation_data 和
set_sample_identifier_object_info 可用于为单个对象分配和查询标签(即名称)。后者还能用于获取有关准备和训练可用对象数量的附加信息。最后,算子
get_sample_identifier_object_info 和 set_sample_identifier_param
可用于设置和检索样本标识符的控制参数。
get_sample_identifier_param
以下将描述基于样本的识别过程中使用的重要术语:
通过基于样本的鉴定来识别对象。
对象的索引。该索引可视为对象的标签,在向 向样本标识符添加预处理数据或训练数据时设置。对象索引是 SampleIdentifier 算子最重要的输出结果。通过 apply_sample_identifier 算子,可为每个对象设置描述性名称,从而便于解读标识结果。
set_sample_identifier_object_info
对象的一个样本或视图。有时也使用术语“样本图像”来指代对象样本。
该术语可作为“对象样本”的同义词使用,若重点在于图像时。
对象样本的索引。请注意,每个对象的索引均从 0 开始单独设置。因此,对象样本索引仅与对应对象索引结合使用时才具有唯一性。
将样本标识符的内部数据结构调整为适应识别过程中可能出现的典型对象样本集的特征的过程。
通过 添加到样本标识符中的对象。add_sample_identifier_preparation_data
预处理对象的对象样本。通常每个对象基于多个预处理样本完成预处理。
所有预处理样本的集合。
样本标识符的训练。在此步骤中,样本标识符学习区分所有给定对象。
通过 添加到样本标识符中的对象,或是通过复用预处理数据作为训练数据获得的对象。与预处理对象不同,所有训练对象均标有唯一的对象索引。
add_sample_identifier_training_data
训练对象的对象样本。训练通常基于每个对象的多个训练样本进行。
所有训练样本的集合。
一张图像,其中可见一个对象,该对象应通过基于样本的识别进行识别。
add_sample_identifier_preparation_data添加样本标识符预处理数据add_sample_identifier_training_data添加样本标识符训练数据apply_sample_identifier应用样本标识符clear_sample_identifier清除样本标签符create_sample_identifier创建样本标识符deserialize_sample_identifier反序列化样本标识符get_sample_identifier_object_info获取样本标识符对象信息get_sample_identifier_param获取样本标识符参数prepare_sample_identifier准备样本标识符read_sample_identifier读取样本标识符remove_sample_identifier_preparation_data移除样本标识符预处理数据remove_sample_identifier_training_data移除样本标识符训练数据serialize_sample_identifier序列化样本标识符set_sample_identifier_object_info设置样本标识符对象信息set_sample_identifier_param设置样本标识符参数train_sample_identifier训练样本标识符write_sample_identifier写入样本标识符