OCR识别流程详解

news/2024/7/21 4:25:37 标签: 计算机视觉, 图像处理, 人工智能

概括

传统的OCR基于图像处理(二值化、连通域分析、投影分析等)和统计机器学习(Adaboost、SVM),过去20年间在印刷体和扫描文档上取得了不错的效果。传统的印刷体OCR解决方案整体流程如图。

在这里插入图片描述

从输入图像到给出识别结果经历了图像预处理、文字行提取和文字行识别三个阶段。

图像预处理

  • 二值化:由于彩色图像所含信息量过于巨大,在对图像中印刷体字符进行识别处理前,需要对图像进行二值化处理,使图像只包含黑色的前景信息和白色的背景信息,提升识别处理的效率和精确度。

  • 图像降噪:由于待识别图像的品质受限于输入设备、环境、以及文档的印刷质量,在对图像中印刷体字符进行识别处理前,需要根据噪声的特征对待识别图像进行去噪处理,提升识别处理的精确度。

  • 倾斜校正:由于扫描和拍摄过程涉及人工操作,输入计算机的待识别图像或多或少都会存在一些倾斜,在对图像中印刷体字符进行识别处理前,就需要进行图像方向检测,并校正图像方向。

在这里插入图片描述

文字检测

文字检测主要有两条线,两步法和一步法。

  1. 两步法:faster-rcnn.

  2. 一步法:yolo。相比于两步法,一步法速度更快,但是accuracy有损失。

文字检测按照文字的角度分。

  1. 水平文字检测:四个自由度,类似于物体检测。水平文字检测比较好的算法是CTPN。

  2. 倾斜文字检测:文本框是不规则的四边形,八个自由度。倾斜文字检测个人比较喜欢的方法是CVPR的EAST和Seglink。
    在这里插入图片描述

文本识别

在以前的OCR任务中,识别过程分为两步:单字切割和分类任务。

现今基于深度学习的端到端OCR技术有两大主流技术:CRNN OCR和attention OCR。

其实这两大方法主要区别在于最后的输出层(翻译层),即怎么将网络学习到的序列特征信息转化为最终的识别结果。

这两大主流技术在其特征学习阶段都采用了CNN+RNN的网络结构,CRNN OCR在对齐时采取的方式是CTC算法,而attention OCR采取的方式则是attention机制。

在这里插入图片描述
网络结构包含三部分,从下到上依次为:

  1. 卷积层,使用CNN,作用是从输入图像中提取特征序列;
  2. 循环层,使用RNN,作用是预测从卷积层获取的特征序列的标签(真实值)分布;
  3. 转录层,使用CTC,作用是把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果;

在这里插入图片描述


http://www.niftyadmin.cn/n/1821424.html

相关文章

用Pandas读写Excel文件-输出单sheet和多sheet

背景 展示通过Pandas读取Excel,输出Excel的基本用法。 指定sheet,指定需要的column,在读取的同时对column进行重新命名和指定类型使用Spark对数据进行分析处理 (如果是简单的处理,仅使用pandas也是可以的)单…

python之Django学习笔记(一)---搭建Django开发环境和一些基本命令

1、Django下载 官方下载地址:https://www.djangoproject.com/download/ 2、Django安装 linux/windows安装方法相同,具体有以下俩种 pip install Django 或者按照步骤1中下载下来的包安装 python setup.py install 3、创建Django项目 linux下使用如下命令…

RTX 3090 CUDA error: no kernel image is available for execution on the device解决

由于今天升级了显卡后导致项目无法启动,报错如下: no kernel image is available for execution on the device解决方法: pip install torch1.7.0cu110 torchvision0.8.1cu110 torchaudio0.7.0 -f https://download.pytorch.org/whl/torch_…

CUDA的报错解决

RuntimeError: CUDA error: out of memory RuntimeError: CUDA error: invalid device ordinal import os os.environ[CUDA_VISIBLE_DEVICES]0,1,2,3 #4路显卡

1、react-native中expo的真机测试字体不加载的坑

native-base的字体问题Roboto_medium 把native-base中的Fonts文件夹放到项目的根目录. import {Font,AppLoading} from expo; import {Root} from native-base;export default class App extends React.Component {constructor(){super();this.state{loading:true}}async compo…

使用Gunicorn部署项目 自定义 配置文件

使用gunicorn 启动flask项目时可以定义一个文件来定义启动参数: 在项目目录下新建一个文件 xx.py文件 import logging import logging.handlers from logging.handlers import WatchedFileHandler import os import multiprocessing import gevent.monkey gevent.m…

我的日常学习笔记 18.05.14(Vue-API/Vue组件)

再讲一下过渡动画的要点&#xff1a; 想再加在哪个元素上面。动画作用的属性。使用类名的添加删除来过渡属性。 继续看Vue的组件内容 动态组件缓存状态<keep-alive></keep-alive>包裹组件 注意&#xff1a; 当组件在 内被切换&#xff0c;它的 activated 和 deact…

python opencv 实现 图片文本倾斜校正

代码比较简单就不解释了&#xff1a; import numpy as np import cv2image_path "jj.png" image cv2.imread(image_path)gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray cv2.bitwise_not(gray) thresh cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv…