主要内容

光学字符识别

识别文本使用光学字符识别

描述

例子

三种= ocr ()返回一个ocrText对象包含光学字符识别(OCR)从输入图像的信息。对象包含识别字符,文字、文本行,认识到单词的位置,一个度量表明每个识别结果的信心。

例子

三种= ocr (,roi)识别文本在一个或多个矩形区域。

三种= ocr (ds)返回一个单元阵列ocrText对象包含识别结果的roi内指定的数据存储相应的形象。使用这种语法来评估OCR结果图像的集合。

例子

(___)= ocr (___,名称=值)指定选项使用一个或多个名称参数除了参数从以前的语法的任意组合。例如,LayoutAnalysis = "页面"将图像视为一个页面包含的文本块。

例子

全部折叠

图像与文本加载到工作区。

名片= imread (“businessCard.png”);ocrResults = ocr(名片)
ocrResults = ocrText属性:文本:“4 MathWorks:……“CharacterBoundingBoxes (x4 107双):CharacterConfidences: [107 x1单]字:{16}x1细胞WordBoundingBoxes: [16 x4双]WordConfidences: x1单[16]TextLines: {8} x1细胞TextLineBoundingBoxes: [8 x4双]TextLineConfidences: [8 x1单)
recognizedText = ocrResults.Text;图imshow(名片)文本(600150年,写成BackgroundColor recognizedText = (1 1 1));

图包含一个坐标轴对象。坐标轴对象包含2图像类型的对象,文本。

读一个图像到工作区中。

我= imread (“handicapSign.jpg”);

定义一个或多个矩形区域内的兴趣识别文本输入图像。

投资回报率= (370 246 363 423);

或者,您可以使用drawrectangle选择一个地区使用鼠标。

例如,

图;imshow(我)

投资回报率=圆(getPosition (drawrectangle))

识别文本中的ROI。

ocrResults = ocr (roi);

识别文本插入原始图像。显示的图像插入文本。

Iocr = insertText (roi(1:2),我ocrResults.Text, AnchorPoint =“RightTop”,字形大小= 16);图imshow (Iocr)

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

读一个图像包含的七段显示到工作区中

我= imread (“sevSegDisp.jpg”);

指定包含七段显示器的ROI。

投资回报率= (506 725 1418 626);

识别的数字的七段显示,模型参数指定为“七段“

ocrResults = = ocr(我roi模型“七段”);

显示识别数字和检测的信心。

流(公认的七段数字:““% s”“\ nDetection信心:% 0.4 f”ocrResults.WordConfidences cell2mat (ocrResults.Words))
公认的七段数字:“5405.9”检测信心:0.7948

插入公认的数字图像。

Iocr = insertObjectAnnotation(我“矩形”,ocrResults.WordBoundingBoxes ocrResults.Words,线宽= 5,字形大小= 72);图imshow (Iocr)

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

读一个图像包含文本到工作区中。

名片= imread (“businessCard.png”);ocrResults = ocr(名片)
ocrResults = ocrText属性:文本:“4 MathWorks:……“CharacterBoundingBoxes (x4 107双):CharacterConfidences: [107 x1单]字:{16}x1细胞WordBoundingBoxes: [16 x4双]WordConfidences: x1单[16]TextLines: {8} x1细胞TextLineBoundingBoxes: [8 x4双]TextLineConfidences: [8 x1单)
Iocr = insertObjectAnnotation(名片,“矩形”,ocrResults.WordBoundingBoxes,ocrResults.WordConfidences);图imshow (Iocr)

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

加载图像包含文本到工作区中。

名片= imread (“businessCard.png”);ocrResults = ocr(名片);bboxes = locateText (ocrResults,“数学”,IgnoreCase = true);Iocr = insertShape(名片,“FilledRectangle”,bboxes);图imshow (Iocr)

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

这个例子展示了如何评估一个OCR模型,可以识别的准确性的七段数字数据集。评估数据集包含图像的能量计显示的七段数字。

下载并提取数据集。

datasetURL =“https://ssd.mathworks.com/万博1manbetxsupportfiles/vision/data/7SegmentImages.zip”;datasetZip =“7 segmentimages.zip”;如果~存在(datasetZip“文件”)disp (“下载评估数据集(“+ datasetZip +”——96 MB)……”);websave (datasetZip datasetURL);结束datasetFiles =解压(datasetZip);

负载评估地面真理。

ld =负载(“7 segmentgtruth.mat”);gTruth = ld.gTruth;

创建数据存储包含图像、边界框和文本标签groundTruth对象使用ocrTrainingData函数中使用的标签和属性名称标签。

labelName =“文本”;attributeName =“数字”;[imd, boxds txtds] = ocrTrainingData (gTruth, labelName attributeName);

结合数据存储。

cd =结合(imd, boxds txtds);

OCR评估数据集上运行。

结果= = ocr (cd、模型“七段”);

评估OCR的结果与地面真理。

指标= evaluateOCR(结果、cd);
评估ocr结果- - - - - - - - - - - - - - - - - - - - - - - *选定指标:字符错误率,字错误率。* 119(加工)图像。*完成……完成了。*数据集指标:CharacterErrorRate WordErrorRate _____________ _________________ 0.082195 - 0.19958

显示OCR模型的准确性。

modelAccuracy = 100 * (1-metrics.DataSetMetrics.CharacterErrorRate);disp (" OCR模型的精度= "+ modelAccuracy +“%”)
OCR模型的精度= 91.7805%

输入参数

全部折叠

输入图像,作为指定——- - - - - -N3真彩图像,——- - - - - -N灰度或——- - - - - -N二进制图像。输入图像必须由真正的、nonsparse值。函数将真彩或输入灰度图像转换成一个二进制图像使用大津阈值技术,进行字符识别。最佳光学字符识别结果,指定一个图像一个小写字母的高度x或类似的角色,大于20像素。改善结果,删除任何文本的水平或垂直轴旋转大于10度。

数据类型:||int16|uint8|uint16|逻辑

感兴趣的矩形区域,指定为一个4矩阵。每一行指定一个区域输入图像中感兴趣的形式(xy宽度高度),(xy)指定左上角的位置,宽度高度)指定感兴趣的矩形区域的大小,以像素为单位。每个矩形必须完全包含在输入图像。在识别过程中,函数使用之前首先进行阈值技术转换真彩和灰度输入区域二进制感兴趣的区域。

当使用获得最好的结果光学字符识别认识到七段数字,指定一个roi只包含图像的一部分,其中包含七段数字。

评估数据,指定为一个数据存储,它返回一个细胞数组或一个表的输入函数。数据存储必须返回一个细胞数组或一个表函数至少这两列:

  • 细胞1列向量逻辑值的灰度图像或RGB图像。

  • 第二列向量,其中包含一个细胞numROIs4矩阵边界框的形式xy宽度高度),指定文本的位置在每个图像。

当使用一个数据存储的输入时,LayoutAnalysis名称参数值必须“汽车”“没有”。

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

例子:txt = ocr(我LayoutAnalysis =“页面”)将图像中的文本视为一个页面包含的文本块。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

类型的布局分析执行文本分割,指定为这些选项之一:

TextLayout价值 文本处理
“汽车”

如果模型参数值是“七段”,把图像中的文本LayoutAnalysis值是“块”。如果你指定ds输入参数,将图像中的文本视为虽然LayoutAnalysis值是“没有”。否则,该函数将图像中的文本“页面”

“页面” 将图像中的文本视为一个页面包含的文本块。
“块” 将图像中的文本视为一个单一的文本块。
“行” 将图像中的文本视为一行文本。
“单词” 将图像中的文本视为一个词的文本。
“性格” 将图像中的文本视为一个单独的字符。
“没有” 不执行布局分析。最好用于图像与一行文本。

您可以使用LayoutAnalysis参数确定输入图像中的文本的布局。例如,您可以设置LayoutAnalysis“页面”从扫描识别文本文档,其中包含一个特定的格式,比如双柱。这个设置保持阅读顺序返回的文本。

如果您的输入图像包含几个区域的文本,或文本位于混乱的现场,光学字符识别函数可以返回质量差的结果。如果你得到可怜的OCR的结果,尝试不同的布局,更好的匹配你的图像中的文本。如果文本位于混乱的现场,尝试指定一个ROI图像中的文本除了尝试一种不同的布局。

模型用于识别、指定为其中的一个选项;

  • “英语”,“日本”,“七段”——这些指定内置的模型检测英语文本,日本文字,或七段数字,分别。

  • 特征向量或字符串标量——使用这个选项指定一个自定义模型或者一个额外的语言模型包含在OCR语言数据文件支持包。万博1manbetx

  • 单元阵列特征向量或字符串数组,使用这个选项指定要使用多个模型同时检测。

为了更快的性能使用内置的模型(包括任何额外安装语言模型),你可以添加摄入快速语言模型字符串。例如,“很快”,“japanese-fast”,或“seven-segment-fast”

你也可以安装额外的模型或添加一个自定义模型。有关详细信息,请参见安装OCR语言数据文件

指定多种语言支持同时承认所有选中的语言。然而,选择一个以上的语言可以减少的准确性光学字符识别功能和增加处理时间。指定的任何其他语言中包含的安装OCR语言数据文件包,他们以同样的方式指定为内置的语言。你不需要指定的路径。例如,芬兰指定文本识别:

txt = ocr (img、模型=“芬兰”);

支持包OCR语言万博1manbetx列表

您可以使用自己的自定义模型通过指定训练数据文件的路径。使用一个表中描述的方法来指定的路径。您所使用的方法取决于您是否获得通过使用训练数据trainOCR函数或通过使用OCR教练应用程序。

训练模型来源 规范流程
trainOCR函数

对于一个trainOCR输出ocrModel指定:

ocrResults = ocr(我,模型= ocrModel);

ocrModel必须包含模型的完整路径。

OCR教练应用程序

您必须在<格式命名文件模型>。traineddata。并将其保存在一个文件夹命名tessdata。<模型>是训练有素的自定义模型的名称。例如,使用一个自定义模型命名为“英格”,您必须指定:

txt = ocr (img、模型= " <路径> / tessdata / eng.traineddata”);
在那里,路径tessdata文件夹的完整路径,然后呢英格traineddata返回的是OCR教练应用程序。

当指定多个自定义模型时,您必须指定包含文件夹相同。例如,因为这段代码包含文件夹,指向两个不同的它不工作。

txt = ocr (img、模型={" <路径> / / tessdata / eng.traineddata”,…“<路径> /两/ tessdata jpn.traineddata "});

一些语言模型文件依赖于另一个语言模型。例如,印地语取决于英语培训。如果你想用北印度语,英语traineddata文件必须存在于同一文件夹印地语traineddata文件。的光学字符识别功能只支持万博1manbetxtraineddata文件由使用tesseract-ocr3.02,或通过使用OCR教练应用程序。

生成的部署目标MATLAB®编码器™:OCR生成可执行文件和文件夹必须托管的语言模型。

  • 英语:C: /路径/ / eng.traineddata

  • 日本:C: /路径/ / jpn.traineddata

  • 七段:C: /路径/ / seven_segment.traineddata

  • 自定义数据文件:C: /路径/ / customlang.traineddata

  • C: / / ocr_app.exe路径

你可以复制的英语,日语和七段训练数据文件从这个文件夹:

fullfile (matlabroot,“工具箱”、“愿景”、“visionutilities”,“tessdata_best”);

矢量字符子集,指定为一个字符或字符串标量。默认情况下,CharacterSet设置为空字符向量”“,它指定函数搜索指定的语言模型中所有的人物模型名称-值参数。你可以设置这个值较小的已知的字符集来约束分类过程。

光学字符识别函数选择最佳匹配的文本CharacterSet。使用可推论的知识输入图像中的人物有助于提高文字识别精度。例如,如果您设置CharacterSet所有数字位数,“0123456789”,函数尝试匹配每个字符位数。在这种情况下,光学字符识别函数不正确承认non-digit字符是一个数字。

如果你指定模型作为七段,光学字符识别函数使用CharacterSet价值“0123456789。:”

输出参数

全部折叠

识别文本和指标,作为一个返回ocrText对象,数组的ocrText对象,或单元阵列ocrText对象。每个对象包含识别文本和输入图像的识别文本的位置,以及指标显示结果的信心。信心值是在[0,1],代表百分之一的概率。的形状三种输出取决于您指定一个完整的单一图像或单一图像ROI,单个与多个ROI图像,或一个数据存储光学字符识别函数。

提示

如果你的OCR的结果不是你期望什么,试试这些选项中的一个或多个:

  • 图像大小增加2 - 4倍。

  • 如果图像中的字符太近或边缘触摸,使用形态学瘦出字符。使用形态学瘦出它们之间的角色帮助创建的王牌。

  • 利用二值化检查非均匀照明的问题。使用graythreshimbinarize函数来binarize形象。如果字符二值化的结果是不可见的,那么图像有一个潜在的非均匀照明的问题。试着上流社会的过滤,使用imtophat函数,或其他技术处理消除非均匀照明。

  • 使用roi论点孤立的文本。您可以指定roi手动或使用文本检测。

  • 如果你的图像看起来像一个自然场景包含单词,比如街景,而不是扫描文档,试着设置LayoutAnalysis参数要么“块”“单词”

  • 确保图像包含光背景黑色文字。为了实现这一点,您可以binarize形象和反转之前通过它光学字符识别函数。

引用

史密斯[1],雷。概述超正方体的OCR引擎。在第九次国际会议文档分析和识别(ICDAR 2007), 629 - 33所示。IEEE 2007。https://doi.org/10.1109/ICDAR.2007.4376991。”

[2]史密斯,R。,D. Antonova, and D. Lee.适应多语种OCR的超正方体开源OCR引擎。学报》国际多语种OCR研讨会(2009)。

[3]r .史密斯。通过Tab-Stop检测混合页面布局分析。学报第十届国际会议文档分析和识别。2009年。

扩展功能

版本历史

介绍了R2014a

全部展开