使用深度学习读取文本和数字

使用此工具可利用深度学习技术读取图像中的文本和数字。

与现有的 MERLIC 工具读取文本和数字不同,此工具使用基于整体深度学习的光学字符识别 (OCR) 方法。它能更准确地定位字符,无论其位置、方向和字体类型如何。字符会自动组合,从而可以识别整个字。因此,可以避免误读外观相似的字符,并提高读取性能。

读取文本和数字”或“使用深度学习读取文本和数字”哪一个最适合您的应用取决于各种因素。“使用深度学习读取文本和数字”提供各种优势。它可以在图像中的任何位置找到文本。无需事先指定文本的位置。此外,该工具使用带有通用字体的预训练 Deep OCR 读取模型,可以阅读图像中不同字体的文本。因此不受特定字体的限制。此工具的另一个优势是可以读取任何方向的文本,而无需事先对齐。因此也可以读取从左到右以外的其他方向的文本。另一方面,取决于所使用的硬件,此工具需要更多内存和更多时间进行处理。如果您不确定这两个工具哪一个最适合您的应用,您可以测试这两个工具并比较结果、处理时间以及与您的应用相关的其他因素。

Deep OCR 模型

Deep OCR 模型,即用于光学字符识别的深度学习模型,通常包含两个组件:

  • 检测模型:此模型检测图像中的字,即定位图像中的字区域。
  • 读取模型:此模型识别并读取检测到的图像部分中的字。它定义可以识别的字符集。
可用模式

此工具可在两种不同的模式下使用。在默认模式(“检测和读取”)下,先由检测组件处理图像。在此步骤中,将扫描图像以寻找可能出现字符和文本的区域。然后,Deep OCR 模型的读取组件将对定位的区域进行进一步处理。在第二种模式(“读取”)中,仅执行读取步骤。因此,此模式提供更好的性能。但是,您必须手动指定字所在的区域。

为了在两种模式下都获得更好的结果,可以通过一个或多个感兴趣区域 (ROI) 限制要处理的区域。然后,Deep OCR 模型的相应组件将仅应用于所限制的图像区域。我们建议将要检查的区域严格限制在要读取的文本周围,尤其是在您只想使用此工具的读取组件的情况下。如果您只想使用读取组件读取多行文本,必须在每个字上绘制一个 ROI,以确保能读取每个字。

以下示例图像显示处于默认模式“检测和读取”的此工具。Deep OCR 模型仅在指定的 ROI 内搜索和读取文本。

下图显示处于“读取”模式的此工具,要读取的字周围具有所需的 ROI。

Artificial Intelligence Acceleration 接口 (AI²) 的支持

MERLIC 附带用于 NVIDIA® TensorRT™ SDK 和 Intel® Distribution of OpenVINO™ toolkitArtificial Intelligence Acceleration 接口 (AI²)。因此,您可以将 AI 加速器硬件用作与 NVIDIA® TensorRT™OpenVINO™ toolkit 兼容的处理单元,以便在相应的硬件(如 NVIDIA® GPU)或支持 OpenVINO™ toolkit 的硬件(如 CPU、Intel® GPU 和 Movidius™ VPU)上执行优化的推理。通过这种方式,您可以显著加快深度学习推理时间。相应的硬件可在工具参数“处理单元”中选择。

前提条件

支持 OpenVINO™ toolkitNVIDIA® GPU 和 CPU 在安装 MERLIC 后可立即使用。无需额外的安装或设置。

要将支持 OpenVINO™ toolkitIntel® GPU 和 VPU 用作处理单元,需要满足以下前提条件:

  • 首先必须安装 Intel® Distribution of OpenVINO™ toolkit
  • 必须在 OpenVINO™ toolkit 环境中启动 MERLIC

有关安装和前提条件的更多详细信息,请参阅 用于具有深度学习功能的工具的 AI² 接口 主题。

参数

一些工具参数仅适用于 Deep OCR 模型的检测组件。仅在“模式”参数设为“检测和读取”时,才会使用此组件。下表概述了各个模式中应用的参数。无法在所选模式中应用的参数将显示为灰色。

参数

检测和读取

读取

匹配度类型可视化

检测图像的宽度

检测图像的高度

最小字符检测匹配度

最小字连接匹配度

最小字匹配度

最小字区域

自动检测方向

检测方向

检测平铺

检测模型文件

用于读取的图像宽度

读取模型文件

处理单元

精度

有关更多详细信息,请参阅以下有关此工具所有参数和结果的文档

基本参数

图像

此参数表示输入图像。对于此工具,需要字节图像。如果需要转换图像的像素类型,可以使用转换像素类型工具。

模式

此参数允许您选择用于图像处理的模式,即应用 Deep OCR 模型的哪个组件。默认情况下,该参数设置为“检测和读取”。

描述

检测和读取

在此模式下,两个组件都将被使用。首先,应用检测步骤以定位图像中的字区域。然后,执行读取步骤以实际读取检测到的字区域内的字符和字。

读取

在此模式下,仅使用读取组件。这意味着仅执行读取步骤。

对于此模式,我们建议将要检查的区域限制为紧靠文本周围的区域,以获得更好的结果。这可以通过使用裁剪图像工具在单独的预处理步骤中完成,也可以通过使用紧紧围绕图像中的文本绘制的 ROI 来完成。

如果您想读取多个字,必须在每个字上绘制一个 ROI,以确保能读取每个字。

匹配度类型可视化

此参数定义哪种类型的匹配度图显示为图像上的叠加,以指示像素的某些属性,例如,它们如何构成某些字符或组合字。默认情况下,该参数设置为“字符检测”。您也可以在相应的连接器中更改该值。可以选择以下值:

描述

将不显示匹配度图。

字符检测

将显示字符检测的匹配度图。字符匹配度图指示字符被检测到的位置。像素的字符匹配度越高,评估其接近字符中心的可能性越高。

字连接

将显示用于检测可能代表组合字的连接字符的匹配度图。将评估两个已定位字符之间的连接,得出的匹配度越高,两个字符属于同一个字的可能性越高。

您可以直接在图像中查看评估的匹配度。将鼠标指针移到要处理的图像部分上方时,当前鼠标位置的相应匹配度会立即显示在工具提示中。如果将鼠标悬停在字段上方,还可以看到已读取的文本。

所选匹配度图也是“显示的图像”结果中返回的图像的一部分。如果该参数设为“”,则“显示的图像”中生成的图像将不显示匹配度图。

仅当使用 Deep OCR 模型的检测组件时才会应用此参数。如果参数“模式”设为“读取”,则不应用检测步骤,因此无法在图像中显示匹配度图。

其他参数

ROI

ROI”参数定义用于检测和读取文字和数字的感兴趣区域 (ROI)。默认情况下不定义任何 ROI。如果想要使用 ROI 进行处理,您必须将参数连接至前一工具的适当 ROI 结果以确保某个 ROI 会传输到此工具,或者必须使用可用的 ROI 按钮在图像中绘制新的 ROI。

如果在图像中绘制了 ROI,将只处理 ROI 内的图像部分。通过这种方式,可以定义 Deep OCR 模型的检测组件仅在指定的图像部分检查可能的字区域。如果仅使用 Deep OCR 模型的读取组件,即,如果已将参数“模式”设为“读取”,则将仅在 ROI 内的图像部分读取文本。然而,请记住,必须在每个字周围绘制一个 ROI,以确保能读取每个字。

如果在“检测和读取”模式下工作并定义多个 ROI,MERLIC 将在内部创建一个围绕所有 ROI 的最小矩形图像。然后,此图像将由 Deep OCR 模型的检测组件进行处理。在“读取”模式下,每个定义的 ROI 将作为一个字区域单独处理。

使用 ROI 定义要处理的区域可获得更好的结果,尤其是在仅使用读取组件的情况下。

对齐数据:

此参数表示用于对齐 ROI 的对齐数据。默认情况下不会连接对齐数据,因此不显示任何效果。如果想要使用特定对齐数据,您必须将参数连接至前一工具的适当结果,例如通过匹配确定对齐确定与直线边缘对齐对齐图像旋转图像

检测图像的宽度

此参数定义将由 Deep OCR 模型的检测组件处理的图像的宽度。深度学习网络通过在处理图像之前将其缩放到定义宽度的最大值来保持图像的纵横比。因此,宽度可能会影响结果。

参数以像素为单位,默认情况下设为 512 像素Deep OCR 模型的架构要求宽度为 32 的倍数。如果输入的值不是 32 的倍数,则会向上舍入到 32 倍数的最接近整数。

如果要为检测图像使用较大的图像宽度,请记住以下要点:图像越大,检测模型越大,因此所需的内存消耗也越大。

检测图像的高度

此参数定义将由 Deep OCR 模型的检测组件处理的图像的高度。深度学习网络通过在处理图像之前将其缩放到此高度的最大值来保持图像的纵横比。因此,高度可能会影响结果。

参数以像素为单位,默认情况下设为 512 像素Deep OCR 模型的架构要求高度为 32 的倍数。如果输入的值不是 32 的倍数,则会向上舍入到 32 倍数的最接近整数。

如果要为检测图像使用较大的图像高度,请记住以下要点:图像越大,检测模型越大,因此所需的内存消耗也越大。

最小字符检测匹配度

此参数定义用于字符匹配度图以估计字符尺寸的下限阈值。默认情况下,此参数设置为 0.5。您可以在相应的连接器中将最小匹配度更改为 0 到 1 之间的值。如果要分割建议的字符实例,可以增大该值。要合并相邻的实例,可以减小该值。

最小字连接匹配度

此参数定义将两个字符识别为组合字所需的最低匹配度值。将评估两个已定位字符之间的连接,如果得出的匹配度等于或高于此参数中定义的匹配度值,则确定这些字符属于同一个字。默认情况下,此参数设置为 0.3。您可以在相应的连接器中将最小匹配度更改为 0 到 1 之间的值。如果要分割建议的字实例,可以增大该值。要将字符的相邻实例合并成字,可以减小该值。

最小字匹配度

此参数定义将已定位字符实例建议为有效字所需的最低匹配度值。您可以使用此参数筛选不确定的字。默认情况下,此参数设置为 0.7。您可以在相应的连接器中将最小匹配度更改为 0 到 1 之间的值。

最小字区域

此参数定义对已定位字区域作出建议所需的最小大小。此参数可用于筛选太小的字建议。默认情况下,此参数设置为 10。您可以在相应的连接器中将大小更改为 0 到 1000000 之间的值。

自动检测方向

此参数允许您选择自动还是手动设置字检测的方向。定义为布尔值,默认情况下设置为 1。这意味着将自动确定方向。如果要手动定义方向,您必须将该参数设为“0”。

描述

0

将不会自动确定方向。取而代之,将使用参数“检测方向”中设置的方向。

如果要确保仅从特定方向检测并读取文本,可以使用此值。

1

将自动确定方向。这意味着将从各个方向检测并读取文本。

检测方向

此参数定义字检测的方向角度。它还定义读取文本的方向。它以为单位并默认设为 。您可以在相应的参数中将方向更改为 -180°和 180°之间的值。如果要使用此参数中定义的方向,必须确保将参数“自动检测方向”设为 0。否则,将自动确定方向并忽略此参数的值。

如果文本始终以相同的方向放置,并且您希望确保始终以特定的方向检测和读取文本,可以手动设置方向。

检测平铺

此参数定义在 Deep OCR 模型的检测组件中处理图像之前,是否对图像使用平铺。定义为布尔值,默认情况下设置为 0。这意味着不使用平铺,而是缩放图像。请参阅下表中的说明以了解更多详细信息。

描述

0

图像将缩放到参数“检测图像的宽度”和“检测图像的高度”中定义的大小。然后,缩放的图像将由模型的检测组件进行处理。

1

图像未缩放。在这种情况下,图像会自动分割成参数“检测图像的宽度”和“检测图像的高度”中定义的大小的重叠平铺图像。这些平铺图像,即检测图像,随后将由检测组件单独处理。这还让您可以处理比检测图像的定义大小大得多的图像,而无需预先缩放图像。

这些值中哪一个最适合您的应用取决于许多因素,如图像大小、文本大小、所需速度或可用内存。例如,如果不执行缩放,则不会因缩放伪影而丢失任何信息。但是,如果图像中的文本非常大,则在缩放图像后,文本可能会足够大,方便在之后正确检测和正确。另一方面,处理多个较小的检测图像需要更少的图像内存,但也需要更长的时间。

检测模型文件

此参数定义检测模型(即用于字检测的 Deep OCR 模型组件)的文件名。MERLIC 提供两种预训练检测模型。

默认情况下会设置检测模型“pretrained_deep_ocr_detection.hdl”。如果您更关注时间和内存,则可以改用检测模型“pretrained_deep_ocr_detection_compact.hdl”。此模型的精确度略低于默认模型,但内存占用少得多,推理速度也快得多。

此参数应使用文件后缀名为“.hdl”的模型。这种类型的文件通常可使用 MVTec Deep Learning Tool 训练。但是,目前还无法在 MVTecDeep Learning Tool 中训练用于字检测的 Deep OCR 模型。在提供此功能之前,您可以使用提供的检测模型。

用于读取的图像宽度

此参数定义将由 Deep OCR 模型的读取组件处理的图像的宽度。它以像素为单位并默认设为 120 像素。您可以在相应的参数中将宽度更改为 32 到 10000 之间的值。

深度学习网络会先将相应的图像部分缩放到 32 像素的预定义高度,同时保持图像的纵横比。如果生成的图像的宽度小于此参数中定义的宽度,则图像部分将在右侧使用灰度值 0 填充。如果使用更大的值,图像将缩放到为“用于读取的图像宽度”设置的宽度。然后,生成的图像将由 Deep OCR 模型的读取组件进行处理。

对于工具的初始配置,我们建议将此参数的宽度设置为要读取的最长字的宽度。这样,可以避免生成的图像中由于内部缩放而可能出现的失真。

读取模型文件:

此参数定义读取模型(即用于字识别的 Deep OCR 模型组件)的文件名。MERLIC 提供可立即使用并默认设置的预训练读取模型“pretrained_deep_ocr_reading.hdl”。

此参数应使用文件后缀名为“.hdl”的模型。这种类型的文件通常可使用 MVTecDeep Learning Tool 训练。但是,目前还无法在 MVTecDeep Learning Tool 中训练用于字识别的 Deep OCR 模型。在提供此功能之前,您可以使用默认的读取模型。

处理单元

此参数定义用于处理图像的方法。默认情况下,此参数设置为自动。在此模式下,MERLIC 尝试选择合适的 GPU 作为处理单元,因为它通常比 CPU 性能更好。CPU 是自动模式的后备。但是,您也可以手动选择处理单元。单击此参数,从所有可用处理单元列表中选择设备。

MERLIC 还支持使用与 NVIDIA® TensorRT™ SDK 或 OpenVINO™ toolkit 兼容的 AI 加速器硬件:

  • NVIDIA® GPU
  • 支持 OpenVINO™ toolkit 的 CPU、Intel® GPU、Intel® VPU(MYRIADHDDL

相应设备用前缀“TensorRT(TM)”或“OpenVINO(TM)”标记。如果您选择支持 NVIDIA® TensorRT™OpenVINO™ toolkit 的设备,内存将通过 AI² 接口的相应插件在设备上初始化。这些类型的处理单元必须手动设置,因为此参数的“自动”模式仅会从不支持任何 AI 加速器的可用 GPU 和 CPU 中进行选择。

选择 AI 加速器硬件作为处理单元后,即开始深度学习模型的优化。优化后,表示模型参数的某些参数将在内部设置为只读。在 工具面板 中,这些参数将显示为灰色。只要选定的 AI 加速器用作处理单元,就无法再更改它们的值。要更改这些参数,首先必须将处理单元更改为没有任何 AI 加速的其他处理单元。设置参数后,可以将处理单元设置回相应的 AI 加速器硬件。

选定的处理单元通常用于 Deep OCR 模型的两个组件(检测和读取)。然而,在某些情况下,同时处理的模型数量可能会受到限制,例如,在 Intel® Movidius™ Myriad™ VPU 上,只能处理 Deep OCR 模型的一个组件。如果选定的处理单元无法用于两个组件,则它将仅用于 Deep OCR 模型的检测组件。然后,读取组件的处理单元将由 MERLIC 自动选择。

支持 OpenVINO™ toolkit 的 CPU 无需任何额外的安装步骤即可使用。它们将自动出现在可用处理单元列表中。如果有多个具有相同名称的处理单元可用,则会为其名称指定一个索引号。这同样适用于支持 NVIDIA® TensorRT™ 的 GPU。

要将支持 OpenVINO™ toolkit 的 GPU 和 VPU 用作处理单元,计算机上必须安装 Intel® Distribution of OpenVINO™ toolkit,并且必须在 OpenVINO™ toolkit 环境中启动 MERLIC。请参阅 用于具有深度学习功能的工具的 AI² 接口以了解有关前提条件的更多详细信息。

精度

此参数定义内部用于优化推理深度学习模型的数据类型,它定义了模型转换的精度。默认情况下设置为“”。

下表显示此工具支持的模型精度。

描述

深度学习模型转换为“float32”的精度。

中等

深度学习模型转换为“float16”的精度。

大部分处理单元支持两种精度类型。然而,可能有一些处理单元只支持其中一种精度。在这种情况下,在参数“处理单元”中选择相应的设备后,参数中只有受支持的精度可用。如果自动选择处理单元,即如果“处理单元”设置为“自动”,则只有精度“”可用。

结果

基本结果

字轮廓

此结果返回已检测字的边界框。它们作为轮廓返回,但仅限使用 Deep OCR 模型的检测组件(即,如果参数“模式”设为“检测和读取”)的情况下。如果参数“模式”设为“读取”,则仅应用读取组件,因此不会为此结果返回任何轮廓。

文本

此结果包含已读取的文本和数字。返回结果为字符串。如果在多个 ROI 中读取多个文本条目或数字,结果将以 tuple 形式返回。

您也可以在图像中看到已读取的文本。将鼠标指针移到检测到的字区域,即带有字符和文本的已定位 ROI 上方,可以在工具提示中看到已读取的文本。这样,您就可以轻松地检查每个检测到的字的结果。

工具状态

工具状态”返回有关工具状态的信息,因此可用于处理错误。请参阅主题工具状态结果,了解关于不同工具状态结果的更多信息。

其他结果

显示的图像

此结果表示处理图像和在参数“匹配度类型可视化”中选择的匹配度图的叠加。当处理图像通过匹配度图显示时,您可以更清楚地看到 Deep OCR 模型的检测组件分别检测到字符或字的位置。

仅在使用 Deep OCR 模型的检测组件(即,如果参数“模式”设为“检测和读取”)时匹配度图才可用。此外,参数“匹配度类型可视化”必须设为“字符检测”或“字连接”。否则,没有可用的匹配度图,并且生成的图像仅返回没有任何匹配度图的处理图像。

预处理的图像

该结果表示在检测步骤中已处理的图像。如果使用 ROI 限制检测任何字符和文本的区域,则只有 ROI 内的图像部分会作为“预处理的图像”返回。如果使用了多个 ROI,则返回围绕所有 ROI 的最小可能矩形的图像部分。

参数“检测平铺”也可能影响生成的图像。如果它设为 1,则将输入图像分割成重叠的平铺图像,即检测图像,这些图像由 Deep OCR 模型的检测组件单独处理。在这种情况下,结果“预处理的图像”返回处理这些检测图像所生成的图像。

用于检测的已使用处理单元

此结果返回 Deep OCR 模型的检测组件在上次迭代中使用的处理单元。

选定的处理单元通常用于 Deep OCR 模型的两个组件(检测和读取)。然而,在某些情况下,同时处理的模型数量可能会受到限制,例如,对于 Intel® Movidius™ Myriad™ VPU。在这种情况下,在与读取步骤不同的处理单元上执行检测步骤。您可以使用此结果来检查检测组件实际使用了哪个处理单元。如果将参数“处理单元”设为“自动”,这也很有用。

用于读取的已使用处理单元

此结果返回 Deep OCR 模型的读取组件在上次迭代中使用的处理单元。

选定的处理单元通常用于 Deep OCR 模型的两个组件(检测和读取)。然而,在某些情况下,同时处理的模型数量可能会受到限制,例如,对于 Intel® Movidius™ Myriad™ VPU。在这种情况下,在与读取步骤不同的处理单元上执行检测步骤。您可以使用此结果来检查读取组件实际使用了哪个处理单元。如果将参数“处理单元”设为“自动”,这也很有用。

精度数据类型

此结果返回内部用于优化推理深度学习模型的数据类型。您可以使用此结果检查是否使用了正确的精度,以防出现任何问题。

如果参数“精度”设置为“”,深度学习模型应转换为“float32”的精度。因此,预期此结果返回数据类型“float32”。如果参数“精度”设置为“中等”,深度学习模型应转换为“float16”的精度。在这种情况下,此结果的预期值为数据类型“float16”。如果在 MVApp 迭代过程中出现任何问题,可以检查此结果是否返回与预期不同的数据类型,还可以查看日志文件以了解更多信息。请参阅日志记录主题以了解关于日志文件的更多信息。

处理时间:

此结果返回最近一次执行工具的持续时间(以毫秒为单位)。该结果作为附加结果提供。因此,默认情况下它是隐藏的,但是可以通过工具结果旁边的 按钮显示。有关更多信息,处理时间请参工具参考中所阅部分。

应用程序示例

此工具用于以下 MERLIC Vision App 示例:

  • read_best_before_date_with_orientation.mvapp