-
通用表格识别只支持识别PNG、JPG、JPEG、BMP、TIFF格式的图片。图像各边的像素大小在15px到8192px之间。图像中识别区域有效占比超过80%,保证整张表格及其边缘包含在图像内。支持图像任意角度的水平旋转。目前不支持复杂背景(如户外自然场景、防伪水印等)和表格线扭曲图像的文字识别。支持中英文以及部分繁体字。文字识别服务属于公有云服务,线上用户资源共享,如果需要多并发请求,请提前联系我们!
-
有些人感觉开发一个OCR识别接口没有什么难的,如今市面上有不少成熟的OCR接口,比如常见的身份证ocr识别,,接入对于接口使用OCR功能确实很方便,可是要想把产品做的更出色,那还是有很多工作要做,那么OCR识别接口都需要用到哪些技术?图片压缩技术使用市面上的OCR接口,要把照片上传到服务器,随后返回识别结果,上传之前,图片压缩就是非常重要的一环,原图上传容量太大,上传上去就得耗费一段时间,因此要将一张高清大图压得比较小还能保持画质,既保证了速度又确保了识别质量,是做好ocr识别功能的第一步。波浪纹过滤技术有一些用户是直接拍摄电脑显示屏上的照片的上传,识别效果很一般,原来是显示屏上的一片片波浪纹干扰了文字识别,人的双眼是不太能看的出来,当把图片缩小时,就能发现比较明显的的波浪纹,工程师通过研究运用技术手段对波浪纹进行优化,再遇到这些干扰波浪纹。也会把它们很好的过滤掉,确保识别效果。杂乱背景精准识别遇到纸张非常薄的情形下,纸张反面的字会透出来,那样就导致了识别时,可能会把纸反面的字当內容去识别,一般可以根据黑白色彩转换技术,去掉透出来的字或是别的杂乱背景。智能分段技术现阶段的OCR都是一行行的返回结果,为了方便后期编辑修改,需要提供智能分段功能,优化最终文字排版效果,当然当下只能对一般的文字内容进行智能分段,排版复杂的文章还需要继续优化。智能识别文件边界文档拍摄显然没办法保证完全按边界拍出来,只需要文档那一部分,就需要手动剪裁一下,通过工程师的研发,就有了智能识别文档边界的功能,能直接一键裁切。
-
此插件有效期到2023年6月30日,如需体验验证码等AI能力,请浏览以下帖子:【ManasAI-OCR】验证码、健康码颜色识别、表格图片识别cid:link_0---------------------------------------------1. 导入后,在studio中的控件界面,显示见图1;图12. 控件帮忙界面见图2;图23. 属性界面见图3,图4。(识别模式有三种,输入型验证码、健康码颜色识别、抱杆识别;输入型验证码中,需要选择是纯数字,还是纯字母,还是数字与字母混合)图3图4
-
介绍本文将讨论如何快速地从图像中删除文本,作为图像分类器的预处理步骤。删除文本可能有多种或多种原因,例如,我们可以使用无文本图像进行数据增强。在本教程中,我们将使用OCR(光学字符识别)检测图像中的文本,并在修复过程中填充照片中丢失的部分以生成完整的图像——以删除我们检测到的文本。处理为了从图像中删除文本,我们将执行以下三个步骤:1. 识别图像中的文本,并使用KerasOCR获取每个文本的边界框坐标。1. 对于每个边界框,应用一个遮罩来告诉算法我们应该修复图像的哪个部分。1. 最后,应用一种修复算法对图像的遮罩区域进行修复,从而得到一个无文本图像。### 实现Keras ocr简介KerasOCR提供现成的ocr模型和端到端训练管道,以构建新的ocr模型(请参见:https://keras-ocr.readthedocs.io/en/latest/).在这种情况下,我们将使用预训练的模型,它对我们的任务非常有效。KerasOCR将自动下载探测器和识别器的预训练权重。当通过Keras orc传递图像时,它将返回一个(word,box)元组,其中框包含四个角的坐标(x,y)。下面是一个快速示例:import matplotlib.pyplot as pltimport keras_ocrpipeline = keras_ocr.pipeline.Pipeline()#read image from the an image path (a jpg/png file or an image url)img = keras_ocr.tools.read(image_path)# Prediction_groups is a list of (word, box) tuplesprediction_groups = pipeline.recognize([img])#print image with annotation and boxeskeras_ocr.tools.drawAnnotations(image=img, predictions=prediction_groups[0])如果我们看一下prediction_groups,我们会看到每个元素对应一组坐标。例如,prediction_groups[0][10]如下:('tuesday', array(\[\[ 986.2778 , 625.07764\], \[1192.3856 , 622.7086 \], \[1192.8888 , 666.4836 \], \[ 986.78094, 668.8526 \]\], dtype=float32)) 数组的第一个元素对应左上角的坐标,第二个元素对应右下角,第三个元素是右上角,而第四个元素是左下角。#### cv2修复函数使用OpenCV应用修复算法时,需要提供两幅图像:1. 输入图像,包含我们要删除的文本。1. 遮罩图像,它显示图像中要删除的文本在哪里。第二个图像的尺寸应与输入的尺寸相同。Cv2具有两种修复算法,并允许应用矩形、圆形或线遮罩(请参考:https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_photo/py_inpainting/py_inpainting.html)在这种情况下,我决定使用线遮罩,因为它们更灵活地覆盖不同方向的文本(矩形遮罩只适用于平行或垂直于x轴的单词,圆形遮罩将覆盖比较大的区域)。为了应用遮罩,我们需要提供线的起点和终点坐标以及线的厚度:起点将是框的左上角和左下角之间的中点,终点将是右上角和右下角之间的中点。对于厚度,我们将计算左上角和左下角之间的线长度。import mathimport numpy as npdef midpoint(x1, y1, x2, y2): x\_mid = int((x1 + x2)/2) y\_mid = int((y1 + y2)/2) return (x\_mid, y\_mid)#example of a line mask for the word "Tuesday"box = prediction\_groups\[0\]\[10\]x0, y0 = box\[1\]\[0\]x1, y1 = box\[1\]\[1\] x2, y2 = box\[1\]\[2\]x3, y3 = box\[1\]\[3\] x\_mid0, y\_mid0 = midpoint(x1, y1, x2, y2)x\_mid1, y\_mi1 = midpoint(x0, y0, x3, y3)thickness = int(math.sqrt( (x2 - x1)\*\*2 + (y2 - y1)\*\*2 ))#现在我们可以创建我们的遮罩:mask = np.zeros(img.shape\[:2\], dtype="uint8")cv2.line(mask, (x\_mid0, y\_mid0), (x\_mid1, y\_mi1), 255, thickness)#我们还可以检查遮罩区域,确保其正常工作。masked = cv2.bitwise\_and(img, img, mask=mask)plt.imshow(masked)最后,我们可以修复图像。在这种情况下,我们将使用cv2.INPAINT_NS,指得是“Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting”一文中描述的修复算法。img_inpainted = cv2.inpaint(img, mask, 7, cv2.INPAINT_NS)plt.imshow(img_inpainted)正如你所看到的,“Tuesday”已从图片中删除。
-
一、EI-OCR操作控件介绍二、环境准备 华为云EI-OCR提供了两种识别方式:本地识别和华为云识别。其中本地识别是通过连接调用本地环境中的华为一体机上部署的华为云OCR服务,完成OCR识别,华为云识别则是通过用户自己的华为云IAM账号连接华为云端的华为OCR服务,完成OCR识别本地版环境准备: 1. 部署有华为云EI-OCR服务的华为一体机,并保证其服务处于启动状态,由于部署成本较高,非情况特殊不推荐使用华为云版环境准备:1、安装WeAutomate的pc可以连接华为云;2、已完成实名认证的可以正常使用的华为云账号 ,登录后获取账号下IAM账号信息。获取方法:通过登录华为云账号打开进入链接https://console.huaweicloud.com/iam创建用户,生成IAM子用户账号,如下图所示:3、开通订阅所需的相关的OCR服务,通过使用华为云账号登录如下链接 https://console.huaweicloud.com/ocr/?region=cn-north-4#/ocr/overview,选择华为云region代号(目前ocr主力region是: 华北-北京一(cn-north-1)、华北-北京四(cn-north-4)、华东-上海一(cn-east-3)、华东-上海二(cn-east-2)、华南-广州(cn-south-1)),然后点击开通服务,如下图所示:注意:账号已开通对应地区的华为云OCR服务(每个账号每个月拥有1000条免费使用次数),如需求条数等超过免费赠送量,可自行购买。三、EI-OCR操作控件的使用使用EI-OCR识别控件,首先需要使用前置控件连接EI-OCR服务,连接服务的方式分为如下本地版和华为云版两种方式,具体情况如下图所示,填入参数连接服务即可:1、前置控件-本地版/inputAccountNoToken控件的返回值retValue可以看到是否取到token,务必取到token以后再继续下一步。2、前置控件-华为云版/inputAccountByToken 控件的返回值retValue可以看到是否取到token,务必取到token以后再继续下一步。下图以EI_OCR火车票识别控件为例为例实现识别提取火车票中的文字信息
-
【功能模块】https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/ad958559-704d-4699-aebb-923ebb41e574预期结果不一致【操作步骤&问题现象】按照步骤部署承购后运行结果没有识别成功,只识别了前面几行字【截图信息】【日志信息】(可选,上传日志内容或者附件)求大神帮忙分析下看问题出在哪里
-
文字识别也是目前CV的主要研究方向之一。本文主要总结目前文字识别方向相关内容,包括单独文字识别以及结合文字检测和文字识别的端到端的文字识别。希望这篇文章能够帮助各位。 图0 文字检测Detection与文字识别Recognition对于文字识别,实际中一般首先需要通过文字检测定位文字在图像中的区域,然后提取区域的序列特征,在此基础上进行专门的字符识别。但是随着CV发展,也出现很多端到端的End2End OCR。文字检测(Text Detection)文字检测定位图片中的文本区域,而Detection定位精度直接影响后续Recognition结果。图1.1如图1.1中,红框代表“LAN”字符ground truth(GT),绿色框代表detection box。在GT与detection box有相同IoU的情况下,识别结果差异巨大。所以Detection对后续Recognition影响非常大! 目前已经有很多文字检测方法,包括:EAST/CTPN/SegLink/PixelLink/TextBoxes/TextBoxes++/TextSnake/MSR/... 其中CTPN方法的介绍如下:场景文字检测—CTPN原理与实现https://zhuanlan.zhihu.com/p/34757009文字识别(Text Recognition)识别水平文本行,一般用CRNN或Seq2Seq两种方法(欢迎移步本专栏相关文章):• CRNN:**CNN+RNN+CTC**一文读懂CRNN+CTC文字识别https://zhuanlan.zhihu.com/p/43534801• CNN+Seq2Seq+AttentionSeq2Seq+Attention原理介绍https://zhuanlan.zhihu.com/p/51383402对应OCR代码如下https://github.com/bai-shang/crnn_seq2seq_ocr_pytorch对于特定的弯曲文本行识别,早在CVPR2016就已经有了相关paper:• Robust Scene Text Recognition with Automatic Rectification. CVPR2016.arxiv.org/abs/1603.03915图2.1对于弯曲不规则文本,如果按照之前的识别方法,直接将整个文本区域图像强行送入CNN+RNN,由于有大量的无效区域会导致识别效果很差。所以这篇文章提出一种通过STN网络学习变换参数,将Rectified Image对应的特征送入后续RNN中识别。图2.2其中Spatial Transformer Network(STN)指:arxiv.org/abs/1506.02025核心就是将传统二维图像变换(如旋转/缩放/仿射等)End2End融入到网络中。具体二维图像变换知识请翻阅:Homograph单应性从传统算法到深度学习:https://zhuanlan.zhihu.com/p/74597564• Scene Text Recognition from Two-Dimensional Perspective. AAAI2018.该篇文章于MEGVII 2019年提出。首先在文字识别网络中加入语义分割分支,获取每个字符的相对位置。图2.4其次,在获取每个字符位置后对字符进行分类,获得文字识别信息。该方法采用分类解决识别问题,并没有像传统方法那样使用RNN。图2.5除此之外,在文章中还是使用了Deformable Convolution可变形卷积。相比传统3x3卷积,可变形卷积可以提取文字区域不同形状的特征。图2.6• SqueezedText: A Real-time Scene Text Recognition by Binary Convolutional Encoderdecoder Network. AAAI2018.https://ren-fengbo.lab.asu.edu/sites/default/files/16354-77074-1-pb.pdf该文章引入二值层(-1 or +1)部分替换CRNN中的float浮点卷积,核心是使用很小的网络进行识别。• Handwriting Recognition in Low-resource Scripts using Adversarial Learning. CVPR2019.arxiv.org/pdf/1811.01396.pdf• ESIR: End-to-end Scene Text Recognition via Iterative Image Rectification. CVPR2019.http:openaccess.thecvf.com/content_CVPR_2019/papers/Zhan_ESIR_End-To-End_Scene_Text_Recognition_via_Iterative_Image_Rectification_CVPR_2019_paper.pdf图2.7ESIR采用cascade R-CNN级联思路,通过3次变换将弯曲字符变换为水平,再经过LSTM识别。具体变换思路请查阅论文。End2End OCR (Detection+ Recognition)由于End2End OCR同时涉及文字检测+文字识别两个方向,对于不熟悉的读者建议首先阅读上述CTPN/CRNN/Seq2Seq三篇文章了解相关内容(当然求点赞喽)。在之前介绍的算法中,文字检测和文字识别是分为两个网络分别完成的,所以一直有研究希望将OCR中的Detection+ Recognition合并成一个End2End网络。目前End2End OCR相关研究如下:• Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks. ICCV2017.http:openaccess.thecvf.com/content_ICCV_2017/papers/Li_Towards_End-To-End_Text_ICCV_2017_paper.pdf图3.1该篇文章采用Faster R-CNN的Two-stage结构:首先Text Proposal Network(即RPN)生成对应的文本区域Text Proposal,后续通过Bounding Box regression和Box Classification进一步精修文本位置。但是不同的是,在RoI Pooling后接入一个LSTM+Attention的文字识别分支中,如图3.2。由于识别与之前介绍的文字识别方法大同小异,后续不再重复介绍。图3.2但是这样的结构存在问题。举例说明:Faster R-CNN的RPN只是初步产生Proposal,后续还需要再经过一次Bounding Box regression才能获取准确的检测框,该问题在CTPN论文(arxiv.org/abs/1609.03605)中有说明,如图3.3:图3.3 CTPN文章中提及RPN生成Proposal不准的问题所以Text Proposal不一定很准会对后续识别分支产生巨大影响,导致该算法在复杂数据集上其实并不是很work。• Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework. ICCV2017.http:openaccess.thecvf.com/content_ICCV_2017/papers/Busta_Deep_TextSpotter_An_ICCV_2017_paper.pdf图3.4 Deep TextSpotter在与Faster R-CNN不同,Deep TextSpotter生成的Region Proposal包含6个数值: 其中 代表Proposal box在图像中的位置, 代表Proposal box与水平方向的夹角, 代表置信度confidence。 对于Region Proposal所在的特征 ,通过双线性插值可以获得 固定高度的变换后的特征 , 其中 代表双线性采样核,本质就是传统的图像旋转+缩放插值变换。图3.5在获得 后,显然可以后接RNN+CTC进行识别。可以看到Deep TextSpotter通过学习角度 ,将proposal通过双线性插值变换为固定高度的水平特征,然后再进行识别,达到一种End2End的效果。与同时期的上一个方法类似,同样存在RPN生成Proposal不准导致识别率低的问题,所以在复杂数据集实际效果可能并不是太好。图3.6 Deep TextSpotter对应的CTC识别• Attention-based Extraction of Structured Information from Street View Imagery. ICDAR2017.arxiv.org/abs/1704.03549图3.7 spatial attention ocr该文章由Google在2017年提出,主要针对多视角的街景采集数据进行OCR,其关键点为:1. 利用CNN提取不同视角的图片的特征,并将特征concat为一个大的特征矩阵2. 计算图片中文的spatial attention , 越大该区域为文字区域的概率越大3. 通过 抽取 中文字区域特征 ,并送入后续RNN进行识别该方法利用spatial attention(arxiv.org/pdf/1502.03044v3.pdf)进行端到端OCR,相比检测+检测方法更加新颖。• Mask TextSpotter: An End-to-End Trainable Neural Network for Spotting Text with Arbitrary Shapes. ECCV2018.arxiv.org/abs/1807.02242图3.8 Mask TextSpotter该方法由旷视科技 (www.zhihu.com/people/c26b4202ed6af1379f52a967235d94b2) 在2018年提出,主要用于解决不规则弯曲字符End2End的识别问题。相比倾斜字符,处理弯曲不规则字符更难,无法简单通过Proposal角度 对特征进行变换。Mask TextSpotter借鉴了Mask RCNN,首先由RPN网络生成Proposal,再由Faster R-CNN分支对Proposal做进一步分类和位置回归,同时通过Mask分支分割出文本所在区域Global word map和每个字符所在中心Background map。这样不仅可以获得整个文本word区域,还可以获得每个字符character区域。图3.9 Mask TextSpotter进行文字识别在文字识别方面Mask TextSpotter设计0~1和A~Z共计36个“one-hot”形式的Character map进行分类,即没有使用RNN直接强行分类。如果用Mask TextSpotter识别汉字,则需要设计4000+ Character map,这显然是不科学的。另外该方法在识别过程中也没有用到文字的序列信息(总体来说该方法与之前的Scene Text Recognition from Two-Dimensional Perspective思路类似)。• Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline. ECCV2018.http:openaccess.thecvf.com/content_ECCV_2018/papers/Zhenbo_Xu_Towards_End-to-End_License_ECCV_2018_paper.pdf在该文章中提出一个包含250k图的中国车牌数据集CCPD,每个标注包含1个box+4个定位点+识别文字GT:图3.10 车牌数据集CCPD在网络方面该文章提出一种PRNet:1. 利用Box Regression layer层预测车牌位置 ;2. 检测出来 确定位置后,采集对应不同尺度的特征图进行ROI Pooling;3. 把不同尺度特征拼接在一起,进行识别。图3.11 PRNet该文章核心内容就是推出了一个车牌OCR数据集CCPD,并在这个数据集上提出一种BaseLine方法。该方向研究人员可以尝试使用该数据集。在这里特别感谢一下所有开放数据集的研究人员!数据才是cv第一生产力!• An end-to-end TextSpotter with Explicit Alignment and Attention. CVPR2018.http:openaccess.thecvf.com/content_cvpr_2018/papers/He_An_End-to-End_TextSpotter_CVPR_2018_paper.pdf改文章与Deep TextSpotter比较类似,首先生成带有角度 的倾斜Text Proposal,然后通过类似于RoI Pooling的Text-alignment提取固定长度的feature sequence,再送入RNN+Seq2Seq+Attention结构进行识别。图3.13与Deep TextSpotter不同的是,Text-alignment在通过双线性插值提取到整个Proposal特征后,再通过一组Inception卷积获取feature sequence送入RNN,而不是直接把双线性插值结果送入RNN。图3.15• FOTS: Fast Oriented Text Spotting with a Unified Network. CVPR2018.arxiv.org/abs/1801.01671FOTS采用Single-Shot结构结合(arxiv.org/abs/1612.03144)直接检测文字区域,输出带角度 的Bounding Box;之后利用双线性插值RoIRotate获取固定大小的特征,送入双向LSTM进行识别。图3.16 FOTS Architecture图3.17 FPN图3.18 RoIRotate由于使用Single-Shot结构,所以应该是相对“Fast”一点。• SEE: Towards Semi-Supervised End-to-End Scene Text Recognition. AAAI2018.arxiv.org/abs/1712.05404图3.19图3.20另外SEE作者2017年在arXiv上放出STN-OCR的论文,应该是没有中任何会议。考虑到完整性也挂在这里。arxiv.org/abs/1707.08831来自 | 知乎 作者 | 白裳链接 | https://zhuanlan.zhihu.com/p/65707543
-
2.18及之前的设计器调用getVatInfoOcr增值税发票识别,报错attributeError("'str' has no attribute 'get'"),类似错误。则需要把设计器安装路径下的如下路径里的ocr.pyc文件,改个名字如ocr_backup.pycD:\Program Files\Huawei\WeAutomate\Studio 2.18.0\python\Lib\site-packages\wa_aimanas然后把附件里的ocr.py解压出来放在这里即可。注意一定是要修改原来的文件名或者挪走备份。
-
论文题目: Visual Semantics Allow for Textual Reasoning Better in Scene Text Recognition作者: Yue He, Chen Chen, Jing Zhang, Juhua Liu, Fengxiang He, Chaoyue Wang, Bo Du指导教师:杜博教授论文概述: 现有的场景文本识别(STR)方法通常使用语言模型来优化视觉识别(VR)模型预测的一维字符序列的联合概率, 然而忽略了字符实例内部和字符实例之间的二维空间视觉语义,使得这些方法不能很好地应用泛化到任意形状的场景文本。为了解决这个问题,本文中首次尝试利用视觉语义进行文本推理。具体而言,在给定 VR 模型预测的字符分割图,首先为每个字符实例构建一个子图,并通过根节点顺序连接合并成一个完整的图。其次基于该图,我们设计了一个图卷积网络(GTR)进行视觉文本推理。同时我们将GTR 和语言模型结构并行构建S-GTR,通过相互学习有效地利用视觉语言互补性。另外GTR 可以插入不同的STR 模型以提高其识别性能。实验证明了所提方法的有效性,S-GTR 在六个通用场景文字识别数据集上获得较好表现,并可以推广到多语言数据集。https://www.zhuanzhi.ai/paper/423d31bbe1e7fe0d5ca545b8b3734b7f图1 算法的框架图图2 算法的定量结果
-
控件插件:见附件 ext_imgToExcel_1_0_1.zip控件功能演示:见附件 ImgToExcel功能演示.zip功能演示脚本:见附件 ImgToExcel_Script.zip功能:主要用OCR识别,将图片转为Excel文件【如果想PDF转Excel,则需要先将PDF转为Img,详情可见 https://bbs.huaweicloud.com/forum/thread-155245-1-1.html】操作说明: 1. 上传图片文件(指定路径)【注意:图片中的表格必须规范的(不含合并单元格),且表格边界线、表格内的分割线较清晰】 2. 指定Excel路径(将OCR识别图片后的表格数据存于此文件中,当前仅支持xls文件。也可不指定excel路径,则表示不生成文件,可直接使用list类型的返回值) 3. 指定工作表Sheet Name,默认Sheet1;若不指定Excel路径,则此Sheet Name属性可不用管使用举例说明:图1执行结果:在指定的路径生成Excel文件,其中list类型的返回值table_ret见图2,效果可见图3图2图3注意: 1. 如果运行出现“no module named 'xlwt'”,则进入黑窗口cmd,设计器是stduio/python/文件夹下(执行器是assistant/python/)执行 python.exe -m pip install xlwt;若黑窗口cmd中,出现Retry等字样信息,则需要将pip.rar(见附件)中的pip文件放入'C:\Users\用户名' 文件夹下,即自己的用户账号下(例如'C:\Users\工号','C:\Users\Administrator', 'C:\Users\Lenovo'等等)。 2. 该插件使用的是体验接口,短时间内不能过于频繁的使用,有流控。怪咖Creatorchf 发表于2022-01-22 17:25:56 2022-01-22 17:25:56 最后回复 怪咖Creatorchf 2022-04-26 15:15:286415 14
-
控件插件:见附件 ext_imgpdftoword_1_0_0.zip控件功能演示:见附件 ImgPDFToWord功能演示.zip功能演示脚本:见附件 ImgPDFToWord_Script.zip功能:主要用OCR识别,将图片或PDF文件转为Word文件操作说明: 1. 上传图片或PDF文件(指定路径)【注意:文件大小大约不超过3M,具体原因是文件base64编码后的大小不能超过3M】 2. 指定OCR识别模式(场景模式:图片、非规范文档;文档模式:规范文档) 3. 指定Word文件路径 使用举例说明: 例1【PDF文件转为Word文件】:图1 执行结果:在指定的路径生成Word文件,其中内容效果见,图2,返回值见图3,图2图3 例2【图片转为Word文件】:图4 执行结果:在指定的路径生成Word文件,其中内容效果见,图5,返回值见图6,图5图6怪咖Creatorchf 发表于2022-01-19 11:02:03 2022-01-19 11:02:03 最后回复 This is WeAutomate 2022-01-19 11:11:232188 1
-
时间可过得真快,本周小Mi的更新便是我们机器学习系列的最后一期啦!说了那么多理论,总该来点案例对不对!废话不多说,让我们开始吧~定义那么什么是图片文字识别呢?其实对应的英文全称为Photo Optical Character Recognition,也可以翻译为图片光学字符识别。随着智能手机拍照功能的成熟,OCR技术注重的是如何让计算机读取图片中的文字信息,从而方便以后的自动查找,而不是从成千上万的照片中用鼠标一张张照片点开查询,再逐个关闭(是不是想想都头大呢)。当然啦,从一张给定的图片中识别文字肯定比从一份扫描文档中识别文字要复杂的多。操作流程按照我们正常的理解,图片文字识别的话通常会先将图像扫描一遍,然后找出图片中的文字信息,并重点关注这些文字区域,同时对区域中的文字进行识别,当正确读出这些文字以后,将这些文字内容显示并记录下来。听起来好像很简单,毕竟光学文字识别对于扫描文档来说,已经是一个比较简单的问题了,但是对于常用的图片、照片来说,还算是一个较难的机器学习问题。因此,实现图片OCR技术需要采取如下步骤:1.文字探测(Text detection)——扫描图像并找出有文字的图像区域,将图片上的文字与其他环境对象分离开来;2.字符切分(Character segmentation)——进行文字分离,将文字分割成一个个单一的字符;3.字符分类(Character classification)——确定每一个字符是什么。流程图也能够非常直观地表达这个学习问题,每一项任务都可以单独拆解开来进行处理:如果成功解决了这样的问题,不仅可以帮助计算机更好地理解图像中的内容,还可以做一些更有意义的事情,比如可以为盲人提供一种相机,该相机可以识别出盲人前面的各种潜在危险路障。滑动窗口滑动窗口是一项用来从图像中抽取对象的技术。假使我们需要在一张图片中识别行人,首先要做的是用许多固定尺寸的图片来训练一个能够准确识别行人的模型。然后用之前训练识别行人的模型时所采用的图片尺寸在我们要进行行人识别的图片上进行剪裁,将剪裁得到的部分交给模型,让模型判断是否为行人,继而不断地在图片上滑动剪裁区域重新进行剪裁,同样将新剪裁的部分交给模型进行判断,如此循环直至将图片全部检测完。一旦完成后,按比例放大剪裁的区域,再以新的尺寸对图片进行剪裁,将新剪裁的部分按比例缩小至模型所采纳的尺寸,交给模型进行判断,如此循环。滑动窗口技术也被用于文字识别,首先训练模型能够区分字符与非字符,然后运用滑动窗口技术识别字符,一旦完成了字符的识别,我们将识别得出的区域进行一些扩展,然后将重叠的区域进行合并。接着便可以以宽高比作为过滤条件,过滤掉高度比宽度更大的区域(默认单词的长度通常比高度要大)。下图中绿色的区域是经过这些步骤后被认为是文字的区域,而红色的区域是被忽略的。下一步是训练一个模型来完成将文字分割成一个个字符的任务,需要的训练集由单个字符的图片和两个相连字符之间的图片来训练模型。模型训练完后,我们仍然是使用滑动窗口技术来进行字符识别。最后一个阶段是字符分类阶段,利用神经网络、支持向量机或者逻辑回归算法训练一个分类器即可。数据获取如果我们的模型是低方差的,那么获得更多的数据用于训练模型是能够有更好的效果的。问题在于,怎样获得更多的数据,可能还需要人工地创造一些数据。以文字识别应用为例,可以从字体网站下载各种字体,然后利用这些不同的字体配上各种不同的随机背景图片创造出一些用于训练的实例,这将会帮助大家获得一个无限大的训练集。同时,还可以利用已有的数据对其进行修改,例如将已有的字符图片进行一些扭曲、旋转、模糊处理。只要实际数据和经过处理后的数据依旧相似,那么便可以创造大量的数据。因此,获得更多数据可以通过如下方式:1.人工数据合成2.手动收集、标记数据3.众包局部分析在机器学习的应用中,通常需要通过几个步骤才能进行最终的预测,那么如何知道哪一部分是最值得我们花精力去完善的呢?大家可以跟着小Mi再仔细观察一下文字识别应用的流程图:流程图中每一部分的输出都是下一部分的输入,选取某一部分手动提供100%正确的输出结果,然后看最终的整体效果提升了多少。(假使总体效果为72%的正确率)令Text detection部分输出的结果100%正确,发现系统的总体效果从72%提高到了89%。这就意味着需要在Text detection部分多花些功夫啦。接着手动选择数据,使得Character segmentation部分输出的结果100%正确,发现系统的总体效果最终只提升了1%,也就是说Character segmentation部分已经足够好啦。同样Character recognition也是这样的检验方法啦~输出结果100%正确,系统的总体效果又提升了10%,表示完善Character recognition部分可以使得整体系统有较大的提升。2虽然整个系列小Mi只在最后介绍了机器学习相关的一个案例,但是已经足够可以展现一个复杂的机器学习系统是如何被组合起来的,同时也介绍了机器学习操作流程的有关概念以及如何分配资源来以作出更好的决定,希望可以帮助到大家学习如何自己开发一个复杂的机器学习应用呦。好啦,相聚总会有离别的时候,却依旧期待着下次的美好相遇,小Mi还记着当初跟大家的约定,后续一定会带来更多的学习系列!PS:再次感谢吴恩达老师!通过观看老师的视频,小Mi也重新对机器学习有了更多更深的理解,感谢大佬!!!原文链接:https://blog.csdn.net/skytttttt9394/article/details/122257650?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164224086116780357283983%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164224086116780357283983&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-122257650.first_rank_v2_pc_rank_v29&utm_term=MindSpore&spm=1018.2226.3001.4187
-
2021年6月24日举办了华为云AI论文精读会2021第八期:探讨文字识别中的语言模型嘉宾是中国科学技术大学信息与通信技术博士---王裕鑫博士本次论文精读的领域是CV领域,感兴趣的小伙伴一定不要错过呦!华为云AI论文精读会致力于让更多人低门槛使用经典算法,助力AI开发者基于ModelArts,实现高效率论文复现和挑战!观看地址:https://res-static.hc-cdn.cn/cloudbu-site/china/zh-cn/competition/1624673202271037396.mp4华为云AI论文精读会2021·论文算法实战赛报名地址:https://competition.huaweicloud.com/information/1000041393/introduction
-
描述Aster(文字识别/PyTorch)1. 概述此模型是基于ASTER: Attentional Scene Text Recognizer with Flexible Rectification的Pytorch实现版本,该算法需要使用SynthText和MJSynth数据集进行训练,IIIT5k的test数据进行验证。我们提供了训练代码和打包好的合成训练数据集和验证数据,如果有需要用户也可以加入真实数据集进行微调,具体参见ModelArts AI Gallery算法Aster使用指南。训练后生成的模型可直接在ModelArts平台部署成在线服务。对于英文识别任务,一般采用Accuracy作为评价指标:对于网络预测的字符串以及对应的gt,需要先进行归一化(去掉除字母和数字以外的字符,并统一大小写)。如果二者一致,则判定预测正确。Accuracy = 正确的数量 / 总数本算法的其他信息如下表所示:项目说明参考论文ASTER: Attentional Scene Text Recognizer with Flexible Rectification使用框架Pytorch-1.4.0训练集SynthText,MJSynth训练总epoch数7训练batch_size使用1卡训练,每张卡batch_size = 1024训练硬件及耗时1*v100,29小时左右测试集IIIT5K中的测试集推理硬件及速度CPU: 120~130ms/pic GPU: 20~30ms/pic (1*V100, batch_size=1024)输入图像尺寸64*256*3原论文准确率Accuracy (without Lexicon) = 93.4%本算法准确率Accuracy (without Lexicon) = 93.7%2、训练2.1. 算法基本信息任务类型文字识别支持的框架引擎PyTorch-1.4.0-python3.6算法输入存储在OBS上的数据集,必须将训练打包成lmdb格式进行存储,详情请查看下文第4节案例指导算法输出用于Pytorch推理的pth模型代码结构|-- lib| |-- datasets| |-- evaluation_metrics| |-- loss| |-- models| |-- tools| |-- utils| |-- evaluators.py| |-- trainers.py| |-- init.py|-- lib_infer_only| |-- datasets| |-- evaluation_metrics| |-- models| |-- utils|-- trained_model| |-- model| | |-- best_model.pth|-- train.py|-- evaluation.py|-- config.py|-- customize_service.py|-- config.json`-- pip-requirements.txt~~~2.2. 参数说明名称默认值类型是否必填是否可修改描述batch_size1024int是是batch size的大小workers8int是是workers的数量height64int是是网络输入图片的高度width256int是是网络输入图片的宽度voc_typeALLCASES_SYMBOLSString是否表示识别的类别包括大小写字母数字以及标点符号archResNet_ASTERString是否网络backbonecudaTrueString否是是否使用GPU训练evalFalseString是是是否进行模型评估,默认为False,如果设为True,则必须设定load_weight参数,加载指定的pth模型,在创建训练作业时指定的数据存储位置验证集上进行预测,所有预测结果results及模型评估结果eval_result.txt将保存到创建训练作业时指定的训练输出位置train_url上epoch7int是是总训练轮数,建议设置为7。load_weight./trained_model/model/best_model.pthString否是pth模型文件路径,支持加载OBS上保存的模型进行断点续训;不设置时直接进行训练. 默认使用已经预训练的模型,当删除该参数时则train from scratch.training_dataset/home/work/modelarts/inputs/Synth/String是否训练数据集在modelarts上的本地路径training_dataset_subfoldCVPR2016:NIPS2014String是否使用的训练数据集文件夹名。支持多个数据集同时训练,用:分隔多个数据集。testing_dataset/home/work/modelarts/inputs/Synth/benchmark_lmdbs_new/IIIT5K_3000/String是是验证集IIIT5K在modelarts上的本地路径,当eval=False时(训练过程),使用默认参数(对应imdb格式数据集)。当eval=True时,需要将其设置为/home/work/modelarts/inputs/Synth/IIIT5K/test/(对应png格式数据集)或者其他png格式的数据集。gt_path/home/work/modelarts/inputs/Synth/IIIT5K/testdata.matString否是如果eval时未设置gt_path参数,则不会输出统计指标,只保存推理结果。test_freq1000int是是训练过程中,每test_freq次迭代进行一次测试,并保存最优模型。print_freq100int是是训练过程中,每print_freq次迭代,输出一次loss。注1: 当eval设置成True时,只进行模型推理过程。如需对IIIT5K数据集进行推理,需要调整对应的testing_dataset = home/work/modelarts/inputs/Synth/IIIT5K/test/(对应png格式数据集);如需对自己提供的图片进行推理,请将数据集在obs中放置路径与该路径对应。注2: 当eval=True时,推理的结果results文件夹将会保存到train_url指定的obs路径。如果同时设置了gt_path的路径,还会将eval_result.txt保存到train_url路径。注3: 当使用自己提供的数据集进行训练时,需要根据数据集的大小来调整epoch以及test_freq,注意数据集需要放置在Synth目录下,并且将数据集的文件夹名称添加到training_dataset_subfold中,例如CVPR2016:NIPS2014。2.3. 模型输出训练输出的文件结构如下:|-- model | |-- lib_infer_only | | |-- datasets | | |-- evaluation_metrics | | |-- models | | |-- utils | |-- config.json | |-- config.py | |-- customize_service.py | |-- aster_Final.pth `-- logs |-- checkpoint.pth (last model) |-- model_best.pth |-- log.txt `-- cfg.txt设置eval = True,并对IIIT5K数据集进行推理,输出的文件结构如下:|-- results | |-- 1043_1_result.txt | |-- *** `-- eval_result.txt(当设置了gt_path之后输出评价结果)3. GPU/CPU推理利用本算法部署服务进行推理的详细步骤请查看ModelArts AI Gallery算法Aster使用指南4. 案例指导本算法的详细使用方法,请查看ModelArts AI Gallery算法Aster使用指南交付交付方式华为云ModelArts交付区域华北-北京一、华北-北京四、华东-上海一、华南-广州、亚太-**
-
如题
上滑加载中
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名
热门标签