Symbolic Barcode
SymCode:人类和机器的符号条码
如果你有幸住在附近有 Amazon Go 商店的地方,你绝对应该去看看。它充满了深奥的技术,像我们这样的爱好者会非常感兴趣。引起我们注意的一个项目是现成食品区的沙拉和三明治上的标签。
什么是SymCode ?
SymCode 是 Symbolic Code 的缩写,是一种二维条码,设计用于人类可读和机器可读。
这里的符号集由 32 个由三角形组成的符号组成,因此称为 Acute32。
那里印着一个由可爱的小圆圈和正方形组成的矩阵!它必须是某种条形码。我们试图破译“亚马逊黑白棋代码”是徒劳的,但这是故事的开始。
背景
对于不熟悉的读者来说,条形码这个名称指的是我们今天仍然在几乎所有包装产品中找到的标签。条码通过改变垂直条的宽度和间距对数据进行编码,这些垂直条将由水平交叉的激光束扫描。随着图像传感器的出现,开发了二维条码,其中 QR 码和 Aztec 码是最著名的。
一般来说,二维条码扫描器的工作原理如下:
- 找到发现者。这些查找器充当触发器,告诉扫描仪“这是条码!”。探测器必须易于检测,但不干扰数据模块。
- 尝试扫描和读取 finder 候选者周围的元数据。元数据通常包括格式代码和时序模式。
- 如果上一步成功,扫描器将对整个条码进行采样以构建原始位串。进行校验和操作以检测错误。
- 如果上一步成功,则从原始位中提取有效负载,这通常涉及一些位掩码和改组。
这个框架已经过时了,它们在嵌入式系统中实现起来非常健壮且成本低廉。但是,它们是由机器而不是我们的肉眼读取的。它们不是为美学而设计的,人类无法理解。
目标和约束
我们的目标是设计一个人类可读和机器可读的条形码系统。我们现在通过研究人类语言将注意力转向人类的可读性。
机器在位上运行,所以我们可以说字母表由 0 和 1 组成。在人类语言中,我们有一组更大的字母表。在英语中,我们有 26 个不同的小写字母。在韩语中,字符是由一组 40 个不同的 Jamo 中的 2 到 6 个元素组成的。
在信息密度和视觉模糊性之间存在直接的权衡。如果符号集太大,人类将难以记住所有符号。此外,可能有一些视觉上相似的符号很难消除歧义。如果符号集太小,则必须用更多符号对同一消息进行编码,这又一次,人类通常很难处理长字符串。
我们确定在 16 到 64 个符号范围内的符号集是一个很好的平衡。
符号设计
什么是好的符号?
- 突出首先,符号必须从自然世界中脱颖而出,以表明它们是故意创建的,以传达信息,而不是某种自然现象的结果。
- 可重复符号是用可以教给其他人的特定工具和过程构建的。符号的含义在复制时应保持不变,其中可以容忍变化。
- 与众不同一组中的符号不应彼此相似,并具有独特的特征,使读者能够解决符号之间的歧义。
- 美学最后,好的符号应该遵守人眼的审美规则,包括反对称、旋转对称、平衡和一致。作为一个指针,格式塔原则是非常棒的经验法则。
考虑到上述规则,我们设计了一个简约的符号集。每个符号由多个三角形组成,这是基本的几何图元。每个符号总体上是对称或反对称的,但在内部表现出不对称性。它们就像七巧板,一个人类孩子可以通过将一些三角形拼凑在一起来轻松地复制这些符号。
下一节将定量分析和证明这种设计方法。
形状的痕迹
将形状与符号集匹配的简单方法是执行线性搜索,对每个符号进行 XOR,然后选择具有最低 delta 的符号。它原则上有效,但效率低下。理想情况下,一种算法可以将一个复杂的形状压缩成一个特征向量,我们可以在符号集的特征空间中查找最近邻的特征向量并进行匹配。
我们没有使用实数数组,而是设计了一个位数组足以捕捉符号的本质,从现在开始,我们将此位串称为“跟踪”。