主要内容

使用OCR识别七段数字

这个例子展示了如何识别的七段数字图像通过使用光学字符识别(OCR)。在这个示例中,您使用detectTextCRAFT功能和区域特性来检测图像中的七段文本区域。然后,您使用OCR识别检测的七段数字文本区域。

读取图像

一个图像读入MATLAB®工作区。

img = imread (“meterreading.jpg”);

检测的七段文本区域

检测使用的文本区域输入图像detectTextCRAFT函数。的CharacterThreshold值是该地区阈值用于本地化中的每个字符图像。的LinkThreshold值是亲和力阈值定义了分组的分数两个检测文本到一个单独的实例。你可以调整检测结果通过修改区域和亲和力阈值。增加亲和力阈值的值更多,也能进行字符级别的检测。信息关联阈值对检测结果的影响,看到了通过修改亲和力阈值检测字符的例子。

亲和力阈值的值设置为0.005。区域阈值的默认值是0.4。的输出是一组边界框中定位文本区域输入图像。边界框指定检测到文本区域的空间坐标形式的形象,是一个向量(x,y,宽度,高度]。向量指定左上角和检测区域像素的大小。

bbox = detectTextCRAFT (img, LinkThreshold = 0.005);

画出输出图像通过使用边界框insertShape函数。

Iout = insertShape (img,“矩形”bbox,线宽= 4);

显示输入图像和输出文本检测。

图蒙太奇({img; Iout});标题(“输入图像|发现文本区域”)

图包含一个坐标轴对象。坐标轴对象标题输入图像|发现文本区域包含一个类型的对象的形象。

在输入图像,七段文本区域占地面积最大。使用检测到的面积边界框提取七段文本区域。

计算区域的边界框,找到面积最大的边界框。

bboxArea = bbox (: 3)。* bbox (:, 4);[价值,indx] = max (bboxArea);

提取面积最大边界框的文本区域输入图像。

投资回报率= bbox (indx:);extractedImg = img (roi (2): roi (2) + roi (4), roi (1): roi (1) + roi (3):);

提取的七段显示文本区域。

图imshow (extractedImg)标题(七段文本区域提取的)

图包含一个坐标轴对象。坐标轴对象与标题提取七段文本区域包含一个类型的对象的形象。

认识到七段数字

认识到七段数字检测文本地区使用光学字符识别函数。设置的值模型名称-值参数”七段“。输出是一个ocrText对象包含识别文本信息,识别自信,原始图像中的文本的位置。

输出= = ocr (img、roi模型“七段”)
输出= ocrText属性:文本:“810000…“CharacterBoundingBoxes: [17 x4双]CharacterConfidences: [17 x1单]字:{2 x1细胞}WordBoundingBoxes: [2 x4双]WordConfidences: [2 x1单]TextLines: {2 x1细胞}TextLineBoundingBoxes: [2 x4双]TextLineConfidences: [2 x1单)

公认的七段数字显示。你可以注意到OCR检测包含两个边界框的文本区域和认识到在每个地区的数字。

disp ([output.Words])
”{810000}{0110555。}
Iocr = insertObjectAnnotation (img,“矩形”output.WordBoundingBoxes output.Words,线宽= 4,字形大小= 20);图imshow (Iocr)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

挑战获得准确的结果

准确识别的主要挑战七段数字文本的分割区域的选择LayoutAnalysis名称-值参数光学字符识别函数。

作为一个预处理步骤,光学字符识别函数执行二值化分割文本区域从背景中。由于七段文本图像的性质,关键文本区域断开连接的像素。如果像素之间的距离已断开连接的沿垂直方向的价值LayoutAnalysis参数设置为“”,光学字符识别函数把输入图像的多行文本。然后,光学字符识别函数组的每一行文字到一个区域,认识到数字在每个区域。因此,识别结果可能不准确。在这种情况下,可以提高识别精度通过选择一个合适的值LayoutAnalysis参数。

改善结果使用LayoutAnalysis参数

如果检测到图像区域包含只有一行七段文本,你可以设置LayoutAnalysis名称-值参数””、“字符”或““为了获得良好的识别结果。更多细节关于如何选择的值LayoutAnalysis名称-值参数,看到光学字符识别

输入图像包含一组七段数字。认识到所有的数字组,设置的值LayoutAnalysis名称-值参数””。计算OCR的结果。

输出= = ocr (img、roi模型“七段”LayoutAnalysis =“单词”)
输出= ocrText属性:文本:“010555 ....“CharacterBoundingBoxes: [9 x4双]CharacterConfidences: [9 x1单]字:{010555年。'}WordBoundingBoxes (149 213 1057 365): WordConfidences: 0.4774 TextLines:{010555年。'}TextLineBoundingBoxes (149 213 1057 365): TextLineConfidences: 0.4774

公认的七段数字显示。

disp ([output.Words])
{' 010555。}

画出输出图像通过使用边界框insertObjectAnnotation函数。显示识别结果。你可以注意到七段文本区域图像本地化和数字将被正确识别。

Iocr = insertObjectAnnotation (img,“矩形”output.WordBoundingBoxes output.Words,线宽= 4,字形大小= 20);图imshow (Iocr)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

进一步的探索

  • 如果检测到文本区域包含多个行七段文字,设置LayoutAnalysis名称-值参数b”“最优结果。

  • 可以提高识别结果准确定位和细分七段文本区域在一个给定的图像。虽然您可以使用detectTextCRAFT功能检测文本区域,你将不得不手动选择适当的区域阈值和亲和力阈值检测结果。或者,您可以使用颜色阈值图像裂殖体应用程序交互部分所需的文本图像中区域。

  • 如果分段区域包含异常值,使用形态学操作执行OCR前预处理图像。例如,看到图像预处理和ROI-based处理技术中演示识别文本使用光学字符识别(OCR)的例子。提高识别结果部分自动检测并使用Pretrained工艺网络和OCR识别文本示例还展示了图像预处理技术,您可以使用为提高识别结果如果图像包含多个行文本。