机器视觉软件显示一行识别文字时,中间还经历了怎样的数据变化?Cognex的OCV/OCR文档没有把OCRMax概括成一次直接从照片跳到文字的动作,而是区分segmentation与classification,即分割与分类。本文采用In-Sight Spreadsheet文档Revision 25.1.1.7的说明,沿着输入、字符图像、字体和返回结果阅读这两个阶段。

分割先处理文字在图像中的区域。文档说,OCRMax在ROI内确定文字行的位置,并涉及文字的角度、倾斜和极性信息。随后,这一区域经过归一处理,再分成前景和背景像素。这里的对象仍是图像区域及像素,而不是已经获得字符名称的字符串;本文只解释这些对象,不给出ROI或参数怎样设置。

像素片段与完整字符也没有被原文合成一个层次。二值图像中的blob分析先产生character fragments,每个片段对应一个blob;这些片段随后被分组成为字符,并分配character rectangle。于是,资料里出现“片段”时,不能马上将它抄成“已经识别出的字母”。原文还保留了一次由片段到字符图像的组织关系。

字符矩形是分割结果的一部分。文档说,文字行被分成各个字符的图像,每个字符被包围在不可编辑的字符矩形内。这个矩形说明图像中哪一部分进入后续比较,并不是已经替该部分命名的字符标签。它与前面的ROI也有层次差别:ROI关联近似的整行位置,字符矩形则关联从这行中分出的单个字符图像。

分类使用的另一侧资料来自训练字体。按照文档,一个字符可以用一个或多个示例训练,所有训练字符组成字体,并保存在OCRMax函数的数据结构中。每个字符包含自己的名称、字符矩形图像及其中的信息,例如文字的墨迹。因此,这里的font是一组带名称和图像信息的训练字符,而不是只留下一个字体文件名就能完整描述的对象。

到运行时,classification以已经分割的字符图像作为输入,与字体中的训练字符比较,返回最佳匹配字符以及这个匹配的score。对一行中的各个字符进行分类后,返回整行字符串。字符图像、某一字符的匹配结果、匹配分数和整行字符串,在这一说明中分别承担输入、单项结果、结果分数与组合输出的角色。

OCRMax与OCRMaxSettings也各有职责。文档明确称OCRMax是自包含函数,可以在没有OCRMaxSettings的情况下完成分割和分类;后者提供高级分割、分类参数及程序控制入口。看到两个函数名称,不应将它们直接写成分割与分类必须各调用一个的固定配对。文档所述的两阶段存在于OCRMax本身,另一个函数提供的是设置入口。

对机器视觉资料读者,这份说明让文字识别落到可区分的数据对象:区域先成为片段与字符图像,字符图像再与带名称的训练示例比较,形成字符和整行结果。本文完整读取该页提取正文,未执行采图、训练或识别。页脚2025年5月14日用于标识文档版本,网页首次发布日期未确认;这里不把最佳匹配分数解释为实际生产的合格判据。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。