小白综述:深度学习 OCR 图片文字识别

文章目录

  • 1. OCR 算法流程
    • 1.1 传统 OCR 方法
    • 1.2 深度学习 OCR 方法
      • 1.2.1 two-stage方法:文字检测+识别
      • 1.2.2 端到端方法
  • 2. 文本检测算法
  • 3. 文本识别算法
    • 3.1 基于分割的单字符识别方法
    • 3.2 基于序列标注的文本行识别方法

1. OCR 算法流程

OCR (Optical Character Recognition,光学字符识别) 是指提取图像中的文字信息。

1.1 传统 OCR 方法

传统 OCR 方法一般包含预处理、版面处理、字符切分、字符识别、后处理等五个步骤:

在这里插入图片描述
传统 ORC 方法的缺点有:

  • 预处理和版面分析都是基于传统图像处理方法以及人工定义的规则,通常是基于固定场景开发的,无法迁移到其它场景中,应用范围有限。
  • 字符识别方法基于人工特征,鲁棒性不足,在字体变化或者背景干扰情况下,分类器的识别效果会大打折扣。
  • 流程繁杂,各个模块互相独立,导致难以整体调优,同时各个模块串联也会导致误差传递,造成整体识别精度不高。

总体来讲,受传统算法的局限性,传统 OCR 仅在比较规整的印刷文档上表现比较好,但在复杂场景(图像模糊、低分辨率、干扰信息)中,文字检测和识别性能都不够理想。

1.2 深度学习 OCR 方法

深度学习时代的 OCR 算法更为简洁,主要可以分为两种思路:

  • two-stage方法:文字检测+文字识别,分别由检测网络和识别网络来完成。
  • 端到端方法:直接输出识别后的文本,由一个大网络来完成。

在这里插入图片描述

1.2.1 two-stage方法:文字检测+识别

二阶段 OCR 是目前主流的,也是效果较好的方法,一般包括文字检测和文字识别两部分:

  • 文字检测:将图片中的文字区域位置检测出来
  • 文字识别:对文字区域中的文字进行识别

这篇博客主要研究 two-stage 方法。

1.2.2 端到端方法

近几年也有统一了文字检测检测和识别的端到端的 OCR 方法,如 STN-COR,FOTS 和 ABCNet。

STN-COR 由定位网络和识别网络两部分组成。定位网络的输入是场景文本图片,输出是N个变换矩阵,每个矩阵经网格后形成一个采样网格,每个采样网格代表一个文本区域。识别网络是单字符识别网络的改进,可以识别多个字符。

但端到端的模型仍有几个问题等待解决:

  • 特征共享问题:
    文字检测和识别需要的特征的粒度不同,文本检测只需要区分出当前区域是否包含文本即可,使用粗粒度的特征即可满足要求。但识别需要区分不同文字的差别,需要细粒度的特征。检测和识别分支的特征如何有效共享是个仍待解决的问题。
  • 模型训练的问题:
    识别分支的收敛速度远慢于检测分支,需要的数据量远大于检测分支。因此端到端训练时数据量和收敛速度问题如何平衡仍需关注。

本节参考硕士论文:苗文强. 基于深度学习的文本识别算法研究与实现[D].北京邮电大学,2022.DOI:10.26969/d.cnki.gbydu.2022.002445.

2. 文本检测算法

文本检测算法可以分为两大类:基于回归和基于分割

  • 基于回归的方法:借鉴目标检测算法,采用预测图片边界框的方法实现对文本的定位,典型的模型有 CTPR 和 RRD
  • 基于分割的方法:将文本检测问题看成一个二分类任务,判断每个像素是否是文本,之后再聚合像素组成文本行,典型的网络有 PSENet 和 DBNet

3. 文本识别算法

文本识别算法可分为两类:基于分割的单字符识别方法,基于序列标注的文本行识别方法。

  • 基于分割的单字符识别方法:通常包含字符分割和字符识别两个步骤。首先从输入文本实例图像中定位每个字符的位置,该过程通常使用分割网络如 FCN 实现;然后将分割后的字符输入字符分类器进行分类;最后再组合字符得到字符串作为最终识别结果。
  • 基于序列标注的文本行识别方法:通过 Encoder-Decoder 框架将整个文本行图片直接映射为目标字符串序列,从而避免了字符分割带来的误差。

其中基于序列标注的文本行识别方法是目前的主流方法。

3.1 基于分割的单字符识别方法

基于分割的单字符识别方法通常包含字符分割和字符识别两个步骤。该方法尝试从输入文本实例图像中定位每个字符的位置,该过程通常使用分割网络如 FCN 实现,然后将分割后的字符输入字符分类器进行分类,最后再组合字符得到字符串作为最终识别结果。

因为这种方法已经取得了重大进展,但仍然存在一些明显的缺陷:

  1. 场景文本中字符分割的难度极大,而字符分割不准确会影响后续的字符分类。
  2. 该方法串联了一个分割子网络和一个字符识别子网络,导致误差累积,造成整体识别效果不佳。
  3. 该方法无法结合字符的上下文信息辅助识别当前字符,导致识别难度增大。如小写字母 “l” 和 数字 “1” 难以区分,如果有前后文信息,比如字符前后都是数字,那么是 数字 “1” 的可能性更大。

3.2 基于序列标注的文本行识别方法

基于序列标注的文本行识别方法通过 Encoder-Decoder 框架将整个文本行图片直接映射为目标字符串序列,从而避免了字符分割带来的误差。这种方法包括四个流程:预处理、视觉特征提取、序列建模、解码预测。

在这里插入图片描述

  • 预处理:预处理包括图片背景擦除,清晰化(超分辨率)和图像矫正等操作,这会给整个识别流程增加额外的时间消耗,考虑到速度与准确率的平衡,预处理操作不是必须的。
  • 视觉特征提取:通常使用 CNN 来提取特征,如 VGG 和 ResNet
  • 序列建模:通过使用双向 RNN,如双向 LSTM 和 Transformer
  • 解码预测:OCR 主流的三大解码算法是 CTC、Attention、ACE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/325170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七牛云cdn图片加载错误:net::ERR_HTTP2_PROTOCOL_ERROR与HTTP2 检测工具

一、问题描述 今天运营的小伙伴提了个问题,她在后台上传图片的时候有时会遇到上传成功了,但实际回显图片却是一张“破图”: 二、原因调查 先了解一下ERR_HTTP2_PROTOCOL_ERROR是什么意思: ERR_HTTP2_PROTOCOL_ERROR是由HTTP/2协…

Kubernetes二进制部署 单节点

一、环境准备 k8s集群master1:192.168.229.90 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群node1: 192.168.229.80 kubelet kube-proxy docker flannel k8s集群node2: 192.168.229.70 kubelet kube-proxy docker flannel 至少2C2G 常见的k…

面试算法98:路径的数目

题目 一个机器人从mn的格子的左上角出发,它每步要么向下要么向右,直到抵达格子的右下角。请计算机器人从左上角到达右下角的路径的数目。例如,如果格子的大小是33,那么机器人从左上角到达右下角有6条符合条件的不同路径。 分析…

Element ui 改变el-transfer 穿梭框的大小

修改el-transfer 左右两个穿梭框的高度和宽度,具体效果如下正常大小的穿梭框修改之后的,主要在style中加上如下样式即可 /deep/ .el-transfer-panel{ width: 470px; /* 左右两个穿梭框的高度和宽度 */ height: 450px; } /deep/ .el-transfer-panel__li…

Netplan介绍

1 介绍 1.1 简介 Netplan是一个抽象网络配置描述器。通过netplan命令,你只需用一个 YAML文件描述每个网络接口所需配置。netplan并不关系底层管理工具是NetworkManager还是networkd。 它是一个在 Linux 系统上进行网络配置的实用程序。您创建所需接口的描述并定义…

频率域滤波图像复原之带阻滤波器的python实现——数字图像处理

原理: 带阻滤波器(Band-Stop Filter)是一种在信号处理领域常用的滤波器,它的主要功能是去除(或减弱)信号中特定频率范围内的成分,同时允许其他频率范围的信号通过。这种滤波器在多种应用中都非…

Simply简洁博客主题源码 | EmlogPro主题模版

Simply是一款简约风格的Emlog博客模板,响应式布局、界面简单大方,实用性强! 支持夜间模式,采用localStorage存储配置。IOS系统下支持随系统自动切换浅/深色模式。 文章页支持显示文章字数及阅读时间。 支持http/https 响应式主…

UICollection Compositional Layout全详解

本文字数:8325字 预计阅读时间:45分钟 01 Collection View Layout全详解 UICollectionView在iOS中是构建复杂布局的强大工具。iOS13中引入的 UICollectionViewCompositionalLayout为创建自定义布局提供了全新的可能性。本文将深入探讨Compositional Lay…

04、Kafka ------ CMAK 各个功能的作用解释(Cluster、集群、Broker、位移主题、复制因子、领导者副本、主题)

目录 启动命令:CMAK的用法★ 在CMAK中添加 Cluster★ 在CMAK中查看指定集群★ 在CMAK中查看 Broker★ 位移主题★ 复制因子★ 领导者副本和追随者副本★ 查看主题 启动命令: 1、启动 zookeeper 服务器端 小黑窗输入命令: zkServer 2、启动 …

Python基础知识总结2——python中的字符串

python字符串 字符串基本特点空字符串和len()函数转义字符字符串拼接字符串复制不换行打印从控制台读取字符串replace() 实现字符串替换str()实现数字转型字符串使用[]提取字符字符串切片slice操作split()分割和join()合并字符串驻留机制和字符串比较字符串比较和同一性成员操作…

Redis:原理速成+项目实战——初识Redis、Redis的安装及启动、Redis客户端

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:首期文章 📚订阅专栏:Redis速成 希望文章对你们有所帮助 在此之前,我做过的项目里面也用到了…

Spring Boot依赖版本声明

链接 官网 Spring Boot文档官网:​​​​​​https://docs.spring.io/spring-boot/docs/https://docs.spring.io/spring-boot/docs/ Spring Boot 2.0.7.RELEASE Spring Boot 2.0.7.RELEASE reference相关:https://docs.spring.io/spring-boot/docs/2.…