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. sycPHPCMS v1.6 cookie sqlinjection

    ./user/index.php include "../include/conn.php"; include "../include/function.php" ...

  2. STM32F103驱动ADS1118

    ADS1118 作为常用温度测量芯片被越来越多的开发者熟知,TI官方给出的是基于 MSP430 的驱动测试程序,由于 STM32 的普及,闲暇中移植了 MSP430 的 ADS1118 驱动程序到 S ...

  3. 达拉草201771010105《面向对象程序设计(java)》第十周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十周学习总结 实验十  泛型程序设计技术 实验时间 2018-11-1 第一部分:理论知识        泛型:也称参数化类 ...

  4. SDWebImage -- 封装 (网络状态检测,是否打开手机网络下下载高清图设置)

    对SDWebImage 进行封装,为了更好的节省用户手机流量,并保证在移动网络下也展示高清图,对使用SDWebImage 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...

  5. Samtec大数据技术解决方案

    序言:众所周知,大数据将在AI时代扮演重要角色,拥有海量数据的公司已在多个领域尝试对掌握的数据进行利用,大数据意识和能力进步飞快,体系和工具日趋成熟. Samtec和Molex 是获得许可从而提供 M ...

  6. MVC06

    1.校验机制 我们可以在Model中使用属性进行校验 using System; using System.ComponentModel.DataAnnotations; using System.D ...

  7. 阿里云ECS开放批量创建实例接口,实现弹性资源的创建

    摘要: 为了更方便的实现弹性的资源创建,方便用户一次运行多台ECS按量实例来完成应用的开发和部署,阿里云开放了ECS的批量创建实例接口RunInstances,可以单次最多创建100台实例,避免重复调 ...

  8. [LeetCode] 面试题59 - II. 队列的最大值

    题目: 分析: 本题要求三个方法的时间复杂度都是O(1),对于push_back和pop_front都是好实现的 但是对于max_value,正常情况下要进行遍历才能获得最大值,那么如何才能在O(1) ...

  9. uWSGI, send_file and Python 3.5

    当你的Flask项目通过Nginx+uWSGI成功部署的时候,当你很高兴你Flask里面的接口成功跑通的时候,你会发现真高兴!好牛逼! 然后当你写了其他几个接口的时候,在启动uWSGI服务的时候,死活 ...

  10. day05基本运算符,格式化输出,垃圾回收机制

    内容大纲:1.垃圾回收机制详解(了解) 引用计数 标记清除 分代回收 2.与用户交互 接收用户输入 # python3中 input # python2.7(了解) input raw_input 格 ...