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. ckeditor 捕获键代码

    <!--<script type="text/javascript"> var ctrlKey = false; var shiftKey = false; if ...

  2. 迈克尔·乔丹:几百年内AI不会觉醒

    ​​ 此乔丹非飞人乔丹.他是研究统计学和计算机科学家,目前研究的领域正是普通人所说的人工智能.权威的学术搜索引擎Semantic Scholar在2105年做了一项排名,关于计算机科学领域谁最具影响力 ...

  3. 用pyqt5简单实现Mqtt调试助手-初学python

    最近在学习pyqt5,因为我们是做远程物联网设备的,所以就做个mqtt调试助手来练手.第一次做这种程序,没有加异常处理,会有很多不足,欢迎留言拍砖,直接上代码了 这个是程序入口, # 使用前先安装py ...

  4. 大厂面试官问你META-INF/spring.factories要怎么实现自动扫描、自动装配?

    大厂面试官问你META-INF/spring.factories要怎么实现自动扫描.自动装配?   很多程序员想面试进互联网大厂,但是也有很多人不知道进入大厂需要具备哪些条件,以及面试官会问哪些问题, ...

  5. c语言之单向链表

    0x00 什么是链表 链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础.链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相邻,但是在物理上并不一定相邻.在维护一组数 ...

  6. 用canvas实现简单的下雪效果

    首先新建一个html文件,将body的背景设置为天空的那种深蓝色,并创建一个canvas,canvas的操作逻辑都放在snow.js中: <!DOCTYPE html> <head& ...

  7. SAP CRM Transaction处理中的权限控制

    当试图打开一个Opportunity时, 系统会进行如下一系列的权限检查: 1. 检查Authorization object CRM_ORD_OP: 此处会检查当前user的partner func ...

  8. SpringBoot1.5.10.RELEASE整合druid

    1.先在pom文件中导入druid的jar包 <dependency> <groupId>com.alibaba</groupId> <artifactId& ...

  9. 最新IntelliJ IDEA 2019.3版本永久激活,一步到位!

    简单介绍一下什么是IDEA? IDEA全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手.代码自动提示.重构. ...

  10. 汇编语言-[bx]和loop指令和多个段

    5.1 [BX]和内存单元的描述 要完成描述一个内存单元,需要两种信息: 内存单元的地址: 可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中: 同样也可以用 [bx] ...