一、OCR是什么?

光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。

亦即将图像中的文字进行识别,并以文本的形式返回。

二、OCR的基本流程

1. 图像输入、预处理:

  不同的图像格式有不同的存储、压缩方式,目前有OpenCV、CxImage等。

2. 二值化:

  如今数码摄像头拍摄的图片大多是彩色图像,彩色图像所含信息量巨大,不适用于OCR技术。为了让计算机更快的、更好地进行OCR相关计算,

  我们需要先对彩色图进行处理,使图片只剩下前景信息与背景信息。二值化也可以简单地将其理解为“黑白化”。

3. 图像降噪:

  对于不同的图像根据噪点的特征进行去噪的过程称为降噪。

4. 倾斜校正:

  由于一般用户,在拍照文档时,难以拍摄得完全符合水平平齐与竖直平齐(我本人就经常拍的歪歪扭扭),

  因此拍照出来的图片不可避免的产生倾斜,这就需要图像处理软件进行校正。

5. 版面分析:

  将文档图片分段落,分行的过程称为版面分析。

6. 字符切割:

  由于拍照、书写条件的限制,经常造成字符粘连、断笔,直接使用此类图像进行OCR分析将会极大限制OCR性能。

  因此需要进行字符切割,即:将不同字符之间分割开。

7. 字符识别:

  早期以模板匹配为主,后期以结合深度网络的特征提取为主。版面还原:将识别后的文字像原始文档图片那样排列,

  段落、位置、顺序不变地输出到Word文档、PDF文档等,这一过程称为版面还原。

8. 后期处理:根据特定的语言上下文的关系,对识别结果进行校正。

9. 输出:将识别出的字符以某一格式的文本输出。

三、OCR的使用现状

ocr的发展已经有了非常多的积累,一般人或者企业使用, 都是直接使用第三方的服务,目前提供第三方服务的大企业也非常多,百度,阿里云,腾讯等等,都提供了非常方便的api接口,可以进行调用,识别的速度、精确度和效果也都是非常不错的。唯一的缺点就是api的调用是需要收费的,对于调用频次不高的个人和企业,这个费用还是非常低的。

1,为什么企业要使用开源的而不是直接使用api服务?

目前因为公司的现状,使用开源的有几个目的

  1. 每天调用的频次比较高 , 以后可能越来越高, 所以基于费用的考虑是最主要的。
  2. 目前ocr的算法研究基本趋于成熟,并且目前对识别的精度要求不是太高,目前开源项目基本能够满足。
  3. 对于cv和深度学习进行一定程度的积累和了解,为后续工作做一些铺垫。
  4. 学习开源ocr的模型构建,方便后续对于模型的更新。

2,目前常用的几个OCR开源的项目

目前针对ocr的相关开源项目还是很多的,做了一些简单的调研和试用,在这里进行记录。对于调研不准确的希望大家指出。

第一名:PaddleOCR

PaddleOCR 是百度开源的中文识别的ocr开源软件,PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。

支持多种OCR相关前沿算法,在此基础上打造产业级特色模型PP-OCR和PP-Structure,并打通数据生产、模型训练、压缩、预测部署全流程。

开源地址: https://github.com/PaddlePaddle/PaddleOCR.git

官网地址: https://www.paddlepaddle.org.cn/

优势

  1. github上面star非常多,项目非常活跃
  2. 模型只针对中文进行训练
  3. 后面做背书的公司非常强(baidu)
  4. 相关的中文文档非常齐全
  5. 识别的精确度比较高
  6. 安装和教程详细
  7. 支持前沿算法和标注工具

劣势

  1. 目前使用的训练模型是基于百度公司自己的PaddlePaddle框架,对于小公司来说并不主流(对比于ts或者pytorch),所使用深度学习框架为后续其他深度学习无法做很好的铺垫
  2. 项目整体比较复杂,学习成本较高

所以根据自己实际情况,我最终选择了这个百度飞浆OCR开源项目学习。

第二名:Tesseract

Tesseract 一款由HP实验室开发由Google维护的开源OCR引擎,支持多语言,多平台,使用python开发。

开源地址: https://github.com/tesseract-ocr/tesseract.git

优势

  1. github上面star非常多,项目非常活跃
  2. 识别的语言和文字非常多
  3. 后面做背书的公司非常强(google)

劣势

  1. 不是专门针对中文场景
  2. 相关文档主要是英文,对于阅读和理解起来有一定困难
  3. 学习成本比较高
  4. 源码较多,并且部分源码是c++,学习起来难度比较大

所以根据自己实际情况放弃了这个项目的学习。

 

第三名:EasyOCR

EasyOCR是用Python编写基于Tesseract的OCR识别库,用于图像识别输出文本,目前支持80多种语言。

开源地址: https://github.com/JaidedAI/EasyOCR.git

优势

  1. github上面的star也是比较多,但是最近不是特别活跃
  2. 支持的语言也是非常多的,多达80多种
  3. 识别的精确度尚可

劣势

  1. 从官方的页面体验来说识别的速度较慢
  2. 识别的文字种类多,学习难度较高
  3. 相关的官方文档是基于英文的,学习难度较高,对于新手不太友好

所以根据自己实际情况放弃了这个项目的学习。

搭建自己的OCR服务,第一步:选择合适的开源OCR项目的更多相关文章

  1. 从零开始搭建GitHub个人博客--第一步

    最近一段时间工作不是很忙,便开始着手整理博客并梳理自己的简历 可是,打开cnblog后第一眼我便开始了纠结~ 原起: 一直在cnblog写博客,看博客,突然发现这种在线纯文档记录的方式俨然跟不上时代的 ...

  2. java搭建web从0-1(第一步:创建web工程)

    intellij idea版本:2017 1.新建一个web工程 使用工具intellij ideal,注意:只有Ultimate版本的可以新建web工程,社区版本的不支持新建web工程   File ...

  3. 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)

    前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...

  4. Qt 第一步,环境搭建与测试

    晚上离散数学课下课后就开始安装Qt. 最先安装的是5.2版本的,这个最新的版本集成了所有必须的工具,不需要配置,直接就可以运行的. 但是,看书和社区教程以及参考资料时候,发现大多是4.8版本的.于是, ...

  5. vue.js 踩坑第一步 利用vue-cli vue-router搭建一个带有底部导航栏移动前端项目

    vue.js学习 踩坑第一步 1.首先安装vue-cli脚手架 不多赘述,主要参考WiseWrong 的 Vue 爬坑之路(一)-- 使用 vue-cli 搭建项目 2.项目呈现效果 项目呈现网址:w ...

  6. 零代码第一步,做个添加数据的服务先。node.js + mysql

    node.js + mysql 实现数据添加的功能.万事基于服务! 增删改查之添加数据. 优点:只需要设置一个json文件,就可以实现基本的添加功能,可以视为是零代码. 添加数据的服务实现的功能: 1 ...

  7. Java环境搭建与HelloWprld—改变世界的第一步

    1. JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页. 在下载页面,点击Java. 选择Java (JDK) f ...

  8. hadoop集群搭建--CentOS部署Hadoop服务

    在了解了Hadoop的相关知识后,接下来就是Hadoop环境的搭建,搭建Hadoop环境是正式学习大数据的开始,接下来就开始搭建环境!我们用到环境为:VMware 12+CentOS6.4 hadoo ...

  9. 使用 SpringBoot+Dubbo 搭建一个简单分布式服务

    实战之前,先来看几个重要的概念 开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo.RPC.分布式.由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以 ...

  10. Mosquitto搭建Android推送服务(三)Mosquitto集群搭建

    文章钢要: 1.进行双服务器搭建 2.进行多服务器搭建 一.Mosquitto的分布式集群部署 如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简 ...

随机推荐

  1. 利用idea开发环境进行Spring Boot开发时maven同步更新jar依赖包时提示:sync:Cannot resolve xxx 的解决方案

    idea maven sync Cannot resolve xxx 的解决方案 经常会出现这种奇葩情况,提示找不到包 其实是因为网络波动或者突然断掉,导致包更新出现问题 直接去maven的仓库目录 ...

  2. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v8.0版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持 UDP .TCP .WebSocket 三种协议,支持 iOS ...

  3. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.2版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  4. Solution Set - “说选个晴日,露能滴出彩虹”

    目录 0.「BZOJ #3457」Ring 1.「CF 1824C」LuoTianyi and XOR-Tree 2.「CF 1824D」LuoTianyi and the Function 3.「C ...

  5. Solution -「AGC 039F」Min Product Sum

    \(\mathscr{Description}\)   Link.   对于所有 \(n\times m\) 的矩阵 \(A\), \(a_{ij}\in[1,k]\cap\mathbb N\), 求 ...

  6. Kotlin:【数字类型】安全转换函数

  7. 面向对象-下(复习:关键字static、单例模式、main()的使用说明、类的结构代码块、属性的赋值顺序、关键字final)

    一.关键字:static static:静态的1.可以用来修饰的结构:主要用来修饰类的内部结构属性.方法.代码块.内部类2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用stati ...

  8. dart子类的继承

    1 Dart中类的继承 1.子类使用extends关键字来继承父类 2.子类会继承父类里面可见的属性和方法,但是不会继承构造函数 3. 子类能够复写父类的方法 getter和setter方法 2Dar ...

  9. C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  10. 亮相2024 DPU&AI Networking创新大会,天翼云斩获两项大奖!

    近日,以"智驱网络 芯动未来"为主题的2024 DPU&AI Networking创新大会在北京举办.大会表彰了在DPU与AI网络技术创新及实践应用中取得卓越成就的单位与项 ...