主要内容

自动化地面实况OCR的标签

这个例子展示了如何创建一个自动化算法自动标签数据OCR图像贴标签机应用培训和评估。

概述

图片标志,贴标签机视频,地面实况贴标签机(自动驾驶工具箱)(自动驾驶的工具箱)应用程序提供一个简单的方法来培训或交互标签数据评估图像分类器,对象探测器,OCR模型、语义和实例分割网络。这些应用程序包括几个内置的自动化算法和一个接口来定义自定义自动化算法加速标签的过程。

在这个示例中,创建一个定制的自动化算法在图像贴标签机应用自动检测图像中的文本区域和识别发现文本中的词地区使用pretrained OCR模型。

创建一个文本检测算法

中描述的火车定制OCR模型地面实况,OCR包含图像的文本位置指定为边界框和实际文本内容的位置。自动化的第一步是创建一个文本检测算法。下面的例子使用了算法中描述自动检测并使用女士和OCR识别文本例子来说明如何创建一个自动化算法。

检测文本区域

负载测试图像包含文本。

我= imread (“DSEG14.jpg”);imshow(我)

helperDetectTextRegions描述的函数使用技术自动检测并使用女士和OCR识别文本例子来检测候选文本区域。它使用几何属性的文本区域,区域和长宽比等,来确定区域可能包含文本。有关更多信息,请参见自动检测并使用女士和OCR识别文本

helper函数定义几何属性的阈值。这些阈值可能需要调整其他图像。

参数个数。MinArea = 20;参数个数。MinAspectRatio = 0.062;参数个数。MaxAspectRatio = 4;

使用helperDetectTextRegions在这张照片中,功能检测文本区域。

bboxes = helperDetectTextRegions(我params);

检测结果显示文本。

showShape (“矩形”,bboxes);

检测单词边界框

检测到文本区域从上一步必须结合产生有意义的边界框周围的言语。

合并字符边界箱子塞进单词边界框使用字符之间的距离阈值。

%找到两两之间的距离边界框。distanceMatrix = helperBboxPairwiseDistance (bboxes);%定义的距离阈值。这个阈值可能需要调整%其他图像。maxWordSpacing = 20;%根据距离阈值滤波器边界框。连接= distanceMatrix < maxWordSpacing;图g =(连接,“OmitSelfLoops”);componentIndices = conncomp (g);%合并边界框。bboxes = helperBboxMerge (bboxes componentIndices”);%显示结果。imshow(我);showShape (“矩形”,bboxes);

字符边界框已经成功地合并成词边界框。一些边界盒紧密配合动人的人物。边界框扩大了15%,这样他们不碰这个角色。调整这一扩张比例因子等其他图像边界框不碰任何字符。

expansionScale = 1.15;bboxes = helperBboxExpand (bboxes expansionScale);

显示大小的边界框。

showShape (“矩形”,bboxes);

使用Pretrained OCR识别文本模式

一旦检测到的文本,你可以自动识别文本使用pretrained OCR模型。在这个例子中,pretrained OCR模型中提供fourteen-segment.traineddata。使用这个模型光学字符识别函数来识别检测文本。

模型=“fourteen-segment.traineddata”;结果= ocr(我bboxes模型=模型、LayoutAnalysis =“单词”);

显示识别结果。

imshow(我);showShape (“矩形”bboxes标签={结果。文本},LabelTextColor =“白色”);

注意,pretrained OCR模型可能无法提供准确的地面真值标签。例如,这个词快被错误地认识到pretrained模型。这个错误可以纠正在跑后手动验证自动化算法通过编辑算法的结果。

文本检测算法集成到图片标志

把图像中的文本探测器贴标签机应用MATLAB中通过创建一个自动化类继承自抽象基类vision.labeler.AutomationAlgorithm。这个基类定义的API应用程序使用的配置和运行算法。图片标志应用程序提供了一种方便的方法来获得一个初始自动化类模板。的WordDetectorAutomationAlgorithm类是基于这个模板和提供了一个现成的文本检测自动化类。

在本节中,一些关键自动化类的属性和方法进行了讨论。

自动化类的属性部分指定运行算法所需的自定义属性。

属性%的相关属性词检测阈值。MinArea = 5;MinAspectRatio = 0.062;MaxAspectRatio = 4;MaxWordSpacing = 10;% OCR的相关属性。DoRecognizeText = false;AttributeName =”“;ModelName =“英语”;UseCustomModel = false;CustomModel =”“;DoCustomizeCharacterSet = false;CharacterSet =”“;%属性缓存标签中的属性定义。AttributeList = [];ValidAttributeList = [];结束

这个函数,checkLabelDefinition,确保只有标签启用适当类型的自动化。对于OCR标签,确认只启用了矩形和缓存任何类型的标签与标签相关的属性定义。

函数labelDef isValid = checkLabelDefinition(这)%只对矩形ROI的标签被认为是有效的。isValid = labelDef。类型= = labelType.Rectangle;hasAttributes = isfield (labelDef,“属性”);%缓存相关的属性列表标签定义。如果isValid & & hasAttributes attributeNames =字段名(labelDef.Attributes);numAttributes =元素个数(attributeNames);isStringAttribute = false (numAttributes, 1);我= 1:numAttributes如果isfield (labelDef.Attributes。(attributeNames{我}),“DefaultValue”)isStringAttribute (i) =isstring (labelDef.Attributes。(attributeNames{我}).DefaultValue);结束结束这一点。AttributeList = attributeNames;这一点。ValidAttributeList = attributeNames (isStringAttribute);结束结束

这个函数,settingsDialog、获取和修改上面定义的属性。使用这个API调用来创建将打开一个对话框,当用户点击设置按钮自动选项卡。这个函数使用helperCreateUIComponents创建的UI元素设置对话框helperAttachCallbacks附加行动回调这些创建UI元素。回顾这些函数WordDetectorAutomationAlgorithm类文件。

函数settingsDialog(这)应用= helperCreateUIComponents(这个);helperAttachCallbacks(应用);结束

这个函数,运行时,在本例中定义了前面所讨论的核心算法。运行呼吁每个图像,并预计自动化类返回一组标签。的helperDetectWords函数实现了逻辑中讨论创建一个文本检测算法部分。的helperRecognizeText实现了逻辑中讨论使用Pretrained OCR识别文本模式部分。回顾这些函数WordDetectorAutomationAlgorithm类文件。

函数autoLabels =运行(我)bboxes = helperDetectWords(我);autoLabels = [];如果~ isempty (bboxes) autoLabels = helperRecognizeText(我,这bboxes);结束结束

使用文本检测自动化类的应用

在前一节中描述的属性和方法已经实现WordDetectorAutomationAlgorithm类文件。使用这个类的应用程序:

  • 创建一个文件夹结构+视觉/ +贴标签机在当前文件夹,并自动化类复制到它。

mkdir(“+视觉/ +贴标签机”);拷贝文件(“WordDetectorAutomationAlgorithm.m”、“+视觉/ +贴标签机”);
  • 打开图片标志应用。为了便于说明,打开CVT-DSEG14.jpg形象。

注释2023-01-05 103555. png

  • 定义一个矩形ROI标签和给它一个名称,例如,“文本”。

  • 定义一个字符串属性标签和给它一个名称,例如,“词”。属性包含的文本信息ROI。

  • 点击算法>词探测器。如果您没有看到这个选项,确保当前工作目录中有一个文件夹叫+视觉/ +贴标签机,与一个名为WordDetectorAutomationAlgorithm的文件。m。

worddetector (1) . png

  • 点击自动化。将打开一个新的面板,显示方向使用算法。

  • 点击运行。自动算法在图像上执行,检测的话。运行完成后,验证自动化算法的结果。

注释2023-01-03 130253. png

  • 如果你不满意这个标签,点击设置。将打开一个新的对话框显示检测算法参数。调整这些参数并重新运行自动化算法直到你得到令人满意的结果。

注释2023-01-05 153543. png

  • 在设置对话框中,单击使用OCR识别检测单词复选框来启用识别选项。属性名称将填充所有字符串属性可用于选定的标签的定义。选择属性,并选择一个自定义的OCR模型。单击浏览按钮,选择fourteen-segment。traineddata OCR识别模型边界内的文本框。点击好吧和重新运行自动化算法。

注释2023-01-05 153633. png

  • 除了检测边界框,其中的文本将被和填充属性字段。这些可以看到查看标签,Sublabels和属性右边的部分应用。

注释2023-01-03 130839. png

  • 自动化的OCR标签图像现在已经完成。手动验证文本边框和公认的文本属性字段。

  • 点击接受保存和导出这个标签运行的结果。

结论

这个例子演示了如何使用几何属性检测文字在图片的文本和使用pretrained OCR识别它们模型加速标签文本图片标志应用程序使用AutomationAlgorithm接口。如果一个文本探测器基于几何性质是不够的,使用这个示例中描述的步骤来创建一个自动化算法使用pretrained文本探测器基于深度学习。有关更多信息,请参见detectTextCRAFT自动检测并使用Pretrained工艺网络和OCR识别文本

万博1manbetx支持功能

helperDetectTextRegions函数

helperDetectTextRegions功能检测图像边界框的连接组件和过滤器使用面积等几何性质,长宽比和重叠。

函数bboxes = helperDetectTextRegions (params)% Binarize图像。bw = helperBinarizeImage(的);%找到候选边界框的文本区域。cc = bwconncomp (bw);统计= regionprops (cc, {的边界框(“大小)});bboxes = vertcat(统计(:).BoundingBox);%过滤边框基于面积最小。面积= prod (bboxes (: [3 - 4]), 2);toRemove =面积< params.MinArea;%滤波器边界框基于最小和马克西姆长宽比。aspectRatio = bboxes (:, 3)。/ bboxes (:, 4);toRemove = toRemove | (aspectRatio <参数。MinAspectRatio | aspectRatio > params.MaxAspectRatio);基于重叠率%滤波器边界框。重叠= bboxOverlapRatio (bboxes bboxes,“最小值”);%删除框重叠超过5其他盒子重叠(toRemove:) = 0;%不计数的盒子被删除。numChildren =(重叠> 0)和- 1;% 1的自我toRemove = toRemove | numChildren ' > 5;%去除过滤边界框。bboxes (toRemove:) = [];%找到重叠边界框。重叠= bboxOverlapRatio (bboxes bboxes,“最小值”);图g =(> 0.5重叠,“OmitSelfLoops”);componentIndices = conncomp (g);%合并边界框。bboxes = helperBboxMerge (bboxes componentIndices”);结束

helperBinarizeImage函数

helperBinarizeImage函数binarizes形象和反转的二进制图像如果文本图像的颜色比背景。

函数我= helperBinarizeImage(我)如果~ ismatrix(我)我= rgb2gray(我);结束如果~ islogical(我)我= imbinarize(我);结束%确定文本极性;黑暗对光明与黑暗。%用于文本检测,我们希望光明在黑暗。c = imhist(我);(~,本)= max (c);如果本= = 2%光背景%补充极性切换形象I = imcomplement(我);结束结束

helperBboxMerge函数

helperBboxMerge基于集团指数函数合并边界框。inBboxes是M-by-4向量和outBboxes是一个N-by-4向量。groupIndices是一个m×1标签向量对应其合并组(1,…,N)。

函数outBboxes = helperBboxMerge (inBboxes groupIndices)% (x y宽度高度)坐标转换为开始和结束坐标。xmin = inBboxes (: 1);ymin = inBboxes (:, 2);xmax = xmin + inBboxes (:, 3) - 1;ymax = ymin + inBboxes (:, 4) - 1;%合并基于最小和最大的箱子尺寸。xmin = accumarray (groupIndices xmin, [], @min);ymin = accumarray (groupIndices ymin, [], @min);xmax = accumarray (groupIndices xmax, [], @max);ymax = accumarray (groupIndices ymax, [], @max);outBboxes = [xmin ymin xmax-xmin + 1 ymax-ymin + 1);结束

helperBboxPairwiseDistance函数

helperBboxPairwiseDistance函数计算两两之间的距离边界框。两个边界框之间的距离的定义是他们最亲密的边缘之间的距离。bboxes是一个M-by-4向量的边界框。经销是一个m×m矩阵的两两距离。

函数dist = helperBboxPairwiseDistance (bboxes) numBoxes =大小(bboxes, 1);dist = 0 (numBoxes);%填充距离矩阵行,行通过计算距离%边界框到所有其他迭代边界框。我= 1:numBoxes%选择一个边界框。bbox1 = bboxes(我);%边界框转换为角点。point1 = bbox2points (bbox1);点= bbox2points (bboxes);%找到质心的边界框。centroid1 =排列(意思是(point1), [3 2 1]);质心=排列(意思是(点),[3 2 1]);%计算他们最亲密的边缘之间的距离。w1 = bbox1 (3);h1 = bbox1 (4);ws = bboxes (: 3);hs = bboxes (: 4);xDists = abs (centroid1 (1) -centroids (: 1)) - (w1 + ws) / 2;yDists = abs (centroid1 (2) -centroids (:, 2)) - (h1 + hs) / 2;dists1 = max (xDists yDists);dists1 (dists1 < 0) = 0;%将结果存储在距离矩阵。距离(:,i) = dists1;结束结束

helperBboxExpand函数

helperBboxExpand函数返回一个边界框bboxOut这是规模倍的大小bboxInbboxInbboxOut是M-by-4向量分别为输入和输出边界框。规模是一个标量指定大小的因素。

函数bboxOut = helperBboxExpand (bboxIn、规模)%转换输入边界框角点。点= bbox2points (bboxIn);%找到重心输入的边界框。质心=排列(意思是(点),[3 2 1]);%计算输出边界框的宽度和高度。newWidth =规模* bboxIn (:, 3);newHeight =规模* bboxIn (:, 4);%找到输出边界框的坐标。newX =质心(:1)- newWidth / 2;newY =质心(:,2)- newHeight / 2;bboxOut = [newX newY、newWidth newHeight);结束