光学字符识别
识别文本使用光学字符识别
描述
例子
识别文本在一个图像
图像与文本加载到工作区。
名片= 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));
识别感兴趣的文本区域(roi)
读一个图像到工作区中。
我= 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模型的评估精度
这个例子展示了如何评估一个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二进制图像
输入图像,作为指定米——- - - - - -N3真彩图像,米——- - - - - -N灰度或米——- - - - - -N二进制图像。输入图像必须由真正的、nonsparse值。函数将真彩或输入灰度图像转换成一个二进制图像使用大津阈值技术,进行字符识别。最佳光学字符识别结果,指定一个图像一个小写字母的高度x或类似的角色,大于20像素。改善结果,删除任何文本的水平或垂直轴旋转大于10度。
数据类型:单
|双
|int16
|uint8
|uint16
|逻辑
roi
- - - - - -感兴趣的矩形区域
米4矩阵元素
感兴趣的矩形区域,指定为一个米4矩阵。每一行指定一个区域输入图像中感兴趣的形式(xy宽度高度),(xy)指定左上角的位置,宽度高度)指定感兴趣的矩形区域的大小,以像素为单位。每个矩形必须完全包含在输入图像我
。在识别过程中,函数使用之前首先进行阈值技术转换真彩和灰度输入区域二进制感兴趣的区域。
当使用获得最好的结果光学字符识别
认识到七段数字,指定一个roi
只包含图像的一部分,其中包含七段数字。
ds
- - - - - -评估数据
数据存储对象
评估数据,指定为一个数据存储,它返回一个细胞数组或一个表的输入读
函数。数据存储必须返回一个细胞数组或一个表读
函数至少这两列:
细胞1列向量逻辑值的灰度图像或RGB图像。
第二列向量,其中包含一个细胞numROIs4矩阵边界框的形式xy宽度高度),指定文本的位置在每个图像。
当使用一个数据存储的输入时,LayoutAnalysis
名称参数值必须“汽车”
或“没有
”。
名称-值参数
指定可选的双参数作为Name1 = Value1,…,以=家
,在那里的名字
参数名称和吗价值
相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。
例子:txt = ocr(我LayoutAnalysis =“页面”)
将图像中的文本视为一个页面包含的文本块。
R2021a之前,用逗号来分隔每一个名称和值,并附上的名字
在报价。
LayoutAnalysis
- - - - - -类型的布局分析执行文本分割
“汽车”
(默认)|“页面”
|“块”
|“行”
|“单词”
|“性格”
|“没有”
类型的布局分析执行文本分割,指定为这些选项之一:
TextLayout价值 | 文本处理 |
---|---|
“汽车” |
如果 |
“页面” |
将图像中的文本视为一个页面包含的文本块。 |
“块” |
将图像中的文本视为一个单一的文本块。 |
“行” |
将图像中的文本视为一行文本。 |
“单词” |
将图像中的文本视为一个词的文本。 |
“性格” |
将图像中的文本视为一个单独的字符。 |
“没有” |
不执行布局分析。最好用于图像与一行文本。 |
您可以使用LayoutAnalysis
参数确定输入图像中的文本的布局。例如,您可以设置LayoutAnalysis
来“页面”
从扫描识别文本文档,其中包含一个特定的格式,比如双柱。这个设置保持阅读顺序返回的文本。
如果您的输入图像包含几个区域的文本,或文本位于混乱的现场,光学字符识别
函数可以返回质量差的结果。如果你得到可怜的OCR的结果,尝试不同的布局,更好的匹配你的图像中的文本。如果文本位于混乱的现场,尝试指定一个ROI图像中的文本除了尝试一种不同的布局。
模型
- - - - - -用于识别模型
“英语”
(默认)|“日本”
|“七段”
|<“ModelName”>摄入快速”
|特征向量|字符串标量|单元阵列的特征向量|字符串数组
模型用于识别、指定为其中的一个选项;
“英语”
,“日本”
,“七段”
——这些指定内置的模型检测英语文本,日本文字,或七段数字,分别。特征向量或字符串标量——使用这个选项指定一个自定义模型或者一个额外的语言模型包含在OCR语言数据文件支持包。万博1manbetx
单元阵列特征向量或字符串数组,使用这个选项指定要使用多个模型同时检测。
为了更快的性能使用内置的模型(包括任何额外安装语言模型),你可以添加摄入快速
语言模型字符串。例如,“很快”
,“japanese-fast”
,或“seven-segment-fast”
。
你也可以安装额外的模型或添加一个自定义模型。有关详细信息,请参见安装OCR语言数据文件。
指定多种语言支持同时承认所有选中的语言。然而,选择一个以上的语言可以减少的准确性光学字符识别
功能和增加处理时间。指定的任何其他语言中包含的安装OCR语言数据文件包,他们以同样的方式指定为内置的语言。你不需要指定的路径。例如,芬兰指定文本识别:
txt = ocr (img、模型=“芬兰”);
“南非荷兰语”
“阿”
“写作”
“阿拉伯语”
“阿塞拜疆人”
“巴斯克”
“白俄罗斯”
“孟加拉”
“保加利亚”
“加泰罗尼亚”
“切诺基”
“chinesesimplified”
“哥伦比亚”
“克罗地亚”
“捷克”
“丹麦”
“荷兰”
“英语”
“世界语”
“esperantoalternative”
“爱沙尼亚”
“芬兰”
“法兰克人的”
“法国”
“加利西亚”
“德国”
“希腊”
“希伯来”
“印地语”
“匈牙利”
“冰岛”
“印尼”
“意大利”
“italianold”
“日本”
“埃纳德语”
“韩国”
“拉脱维亚”
“立陶宛”
“马其顿”
“马来语”
“马拉雅拉姆语”
“马耳他”
“mathequation”
“middleenglish”
“middlefrench”
“挪威”
“波兰”
“葡萄牙”
“罗马尼亚”
“俄罗斯”
“serbianlatin”
“斯洛伐克”
“斯洛文尼亚”
“西班牙”
“spanishold”
“斯瓦希里语”
“瑞典”
“塔加拉族语”
“泰米尔”
“泰卢固语”
“泰国”
“土耳其”
“乌克兰”
您可以使用自己的自定义模型通过指定训练数据文件的路径。使用一个表中描述的方法来指定的路径。您所使用的方法取决于您是否获得通过使用训练数据trainOCR
函数或通过使用OCR教练应用程序。
训练模型来源 | 规范流程 |
---|---|
trainOCR 函数 |
对于一个
|
OCR教练应用程序 | 您必须在<格式命名文件模型>。 txt = ocr (img、模型= " <路径> / tessdata / eng.traineddata”); 英格 。traineddata 返回的是OCR教练应用程序。当指定多个自定义模型时,您必须指定包含文件夹相同。例如,因为这段代码包含文件夹,指向两个不同的它不工作。 txt = ocr (img、模型={" <路径> / / tessdata / eng.traineddata”,…“<路径> /两/ tessdata jpn.traineddata "}); 一些语言模型文件依赖于另一个语言模型。例如,印地语取决于英语培训。如果你想用北印度语,英语 |
生成的部署目标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
。使用可推论的知识输入图像中的人物有助于提高文字识别精度。例如,如果您设置CharacterSet
所有数字位数,“0123456789”
,函数尝试匹配每个字符位数。在这种情况下,光学字符识别
函数不正确承认non-digit字符是一个数字。
如果你指定模型
作为七段
,光学字符识别
函数使用CharacterSet
价值“0123456789。:”
。
输出参数
提示
如果你的OCR的结果不是你期望什么,试试这些选项中的一个或多个:
图像大小增加2 - 4倍。
如果图像中的字符太近或边缘触摸,使用形态学瘦出字符。使用形态学瘦出它们之间的角色帮助创建的王牌。
利用二值化检查非均匀照明的问题。使用
graythresh
和imbinarize
函数来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年。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
LayoutAnalysis
,模型
,CharacterSet
必须在编译时常量。这个函数使用一个预编译生成的代码特定于平台的共享库。
版本历史
介绍了R2014aR2023a:语言
和TextLayout
名称-值参数删除
的语言
和TextLayout
名称-值参数已被移除。使用模型
和LayoutAnalysis
。
Abrir比如
这种版本modificada德埃斯特比如。害怕Desea abrir埃斯特比如con sus modificaciones吗?
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。