Photo OCR问题描述

随着网络上的图片的数量越来越多,读取图片上的文字成为了一个日益增强的需求。

按照photo ocr问题的各个处理流程,我们可以大致为不同的环节分配不同数量的人去进行。

滑动窗口(Sliding Windows)

文字检测和行人检测的差别:

行人由于其矩形的长宽比例(ratio)大致比较固定(根据距离远近不同产生差别),因此可能较为容易检测。而文字则可能有各种各样的形状,相对比较难以确认其所在的区域。

如果要建立一个行人检测的系统,我们需要一些形状/像素相同的照片,分别是有行人的正例,和没有行人的反例。

  • 滑动窗口检测

用一个固定比例的小矩形(patch)作为检测器,在目标图片上逐渐平移,每次平移距离称为step-size/stride。用这个小矩形在整个图片上完成一次完整的扫描,然后再用稍微大一点的矩形,重复操作。最后,记录下所有用小矩形检测到的行人。

  • 应用于文字检测

与行人检测类似,我们用像素相同的正例和反例来做训练。

在训练好检测器模型后,我们就可以用模型来做检测工作。

如上图,首先我们会用一个小滑动窗口完成一次扫描,然后标注出模型认为可能有文字的部分为白色小块,然后我们将这些白色小块部分做一个扩张(expansion)(左图->右图)。之后没我们可以用针对扩张后的,有较大面积,连续的和有规则轮廓的白色块,我们将它们用矩形窗口框起来,再使用模型去尝试确认这些框起来的区域是否有文字。

  • 文字分割(Text Segmentation)

这是在文字检测后的下一个步骤。

如下图,同样,我们用正例和反例训练出可以检测文字边界的检测器模型。

然后,我们用滑动窗口扫描目标图像,并在每个模型认为是文字边界的地方做标记。

  • Photo OCR pipeline

Photo OCR问题的处理流程:

获得大量数据和人工数据(Getting Logs of Data and Artificial Data)

机器学习模型的训练中,我们往往需要大量的数据。而这些数据从哪里来呢?我们可以用Artificial Data Synthesis(人工数据合成)。

如下图,假设我们收集了一个文字识别的数据集(图像+字母标记),我们如何将它”扩大“呢?

首先,字母可以变换成很多不同的字体,并且给字母可以赋予不同的背景样式。对真实数据(左图)进行一番变化后,我们就可以获得合成数据(右图)。

另外,我们还可以对数据图像引入一定程度的扭曲(如下图)。

类似的做法在语音识别(speech recognition)里面也有(为原始纯净的语音添加不同的干扰音和背景音【噪音】)。

要注意的是,所添加的噪音/扭曲必须是在对应类型的数据集中比较有代表性的噪音/扭曲。

获得更多数据的注意事项:

  • 确认使用的是low bias的分类器(通过画学习曲线来判别)(如果是high bias的分类器,增加样本数量对提升模型性能已经不太有用了【见前面】,这时要增加训练特征数目,比如在神经网络里可以增加隐藏层的神经元数目)

  • 注意获得更多数据的投入成本。考虑到所付出的工作和模型可能从更多的数据中获得的性能改善,作出权衡。(不同的三种途径:人工合成,自己搜集,众筹)

瓶颈分析:需要攻克的环节(Ceiling Analysis:What Part of the Pipeline to Work on Next)

我们希望在改善机器学习系统的性能时,把更多的精力投入到性价比比较高的部分,即改善的努力最有可能得到回报的部分,那么,我们就需要首先找出当前是系统的哪个部分对系统的性能限制最大。

如下图,回到文字识别问题,我们对识别系统的不同组件(component)的准确度进行对比:

按照流程的顺序,我们会不断地将每个涉及到模型性能的流程做一些调整,使得当前流程的模型表现“完美”,即通过调整,使某个流程的模型在某个数据集上表现100%准确(手工标记正确标签(ground-truth labels),然后将完全正确处理过的数据再输入到下一个模型中)。这时,再测量系统的准确率如何,这个准确率也就是当前流程模型表现“完美”时的系统瓶颈(ceiling)性能。

获得了所有流程中的模型的表现完美的情况下,系统的瓶颈性能后,我们就可以开始抉择,在哪些模型的改进上下功夫。当然是在能够使得瓶颈性能获得最大程度的改进的模型上!(上图中,是文字检测模型,因为可以获得最大72%->89%的大幅度改善。至于文字识别的100%识别率对于系统改进是没有太大参考意义的,因为其属于模型的最后输出判断结果的部分,它的改善在实际情况下会被前面的流程限制。)

如下图,另一个瓶颈分析的例子:人脸识别。

图片OCR(Optical Character Recognition)的更多相关文章

  1. 第 38 章 OCR - Optical Character Recognition

    38.1. Tesseract 查找Tesseract安装包 $ apt-cache search Tesseract ocrodjvu - tool to perform OCR on DjVu d ...

  2. OCR (Optical Character Recognition,光学字符识别)

    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...

  3. csharp:Optical Character Recognition

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  4. OCR(Optical Character Recognition)算法总结

    https://zhuanlan.zhihu.com/p/84815144 最全OCR资料汇总,awesome-OCR

  5. USACO 5.4 Character Recognition

    Character Recognition This problem requires you to write a program that performs character recogniti ...

  6. tf识别非固定长度图片ocr(数字+字母 n位长度可变)- CNN+RNN+CTC

    先安装必须的库 tensorflow_gpu==1.15.0 numpy opencv_python github: https://github.com/bai-shang/crnn_ctc_ocr ...

  7. USACO 5.4 Character Recognition(DP)

    非常恶心的一题,卡了三个月,没什么动力做了,代码直接抄的别人的... 这题主要思路就是预处理出几个数组,再预处理出几个数组,最后DP,输出一下路径... 写起来挺非常麻烦,代码不贴了,丢人... 把U ...

  8. 自己来实现一个简易的OCR

    来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...

  9. selenium使用笔记(二)——Tesseract OCR

    在自动化测试过程中我们经常会遇到需要输入验证码的情况,而现在一般以图片验证码居多.通常我们处理这种情况应该用最简单的方式,让开发给个万能验证码或者直接将验证码这个环节跳过.之前在技术交流群里也跟朋友讨 ...

随机推荐

  1. 压力测试(二)-Jmeter基本介绍

    1.Jmeter基本介绍和使用场景 简介 1.压测不同的协议和应用 1) Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …) 2) SOAP / RES ...

  2. git上传命令步骤

    1.登陆github后,进入Github首页,点击New repository新建一个项目 2. 填写相应信息后点击create repository即可 Repository name: 仓库名称( ...

  3. 第一篇:注册中心Eureka

    1.什么是Eureka,有什么用? Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是spri ...

  4. 002-DOM事件实例-实现一个可以拖拽的登陆窗口

    前言:这是跟着慕课网一个老师的视频做的,这几天在重新的梳理自己,写完这个例子要系统的学一下jQuery,我司现在用的还是比较多,毕竟用了它不用考虑IE兼容性,可以让开发更有效率. 1.项目需求及基本的 ...

  5. emmet快速缩写展开的基本写法与心得

    emmet的基本写法: .ct 点是class <div class="ct"></div> #ct 井号是id <div id="ct&q ...

  6. 前端每日实战:31# 视频演示如何利用 CSS 的动画原理,创作一个乒乓球对打动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rvgLzK 可交互视频教程 此视频 ...

  7. 认识Nginx

    无论你用浏览器还是APP访问多数网站,到达的第一站就是Nginx. 后来者居上的Nginx 千禧年前后,互联网业务迎来了高速发展,老牌的Web服务器都无法满足高性能.高可靠的市场需求. 一个开源的(遵 ...

  8. flask 模型一对多个人理解

    在modle中创建两个模型表 class User(db.Model): id = db.Column(db.Integer,primary_key=True,autoincrement=True) ...

  9. php通过单例模式使一个类只能创建一个对象。

    单例模式也就是一个类只能创建出一个对象 首先你要知道它的基本思想为:三私一公! 何为三私一公?   1(私).防止用户通过构造方法创建对象,因此私有化构造方法. 2(公).创建一个公共静态函数用来进入 ...

  10. Vue2.0 【第三季】第1节 propsData Option 全局扩展的数据传递

    目录 Vue2.0 [第三季]第1节 propsData Option 全局扩展的数据传递 第1节 propsData Option 全局扩展的数据传递 Vue2.0 [第三季]第1节 propsDa ...