【计算机视觉】文本识别

devtools/2025/2/19 4:31:50/

计算机视觉,广义的文本识别是指对输入的图像进行分析处理,识别出图像中的文字信息,这里的图像可以使传统的文档图像,也可以是现实世界中的场景图像。在这里插入图片描述

简介

无论是传统方法还是基于深度深度学习的方法,完整的文本识别流程都由文本检测和文本识别两个阶段串联组成。文本检测是在图像/视频帧中寻找出文字区域,然后用边界框将单词或文本行标识出来;文本识别则是对此文字区域进行分析,然后获得文字信息。

文本检测

文本检测是计算机视觉与图像处理领域的重要任务之一,其目标是在自然场景图像中定位和标注文本区域。随着技术的进步,文本检测经历了从传统方法到深度学习驱动的现代方法的演变。以下是文本检测的发展历程及主流算法的简要概述:

1. 传统方法阶段(2000年代-2015年左右)

在深度学习兴起之前,文本检测主要依赖手工设计的特征与传统机器学习算法
特点

  • 注重低级视觉特征,如颜色、边缘、纹理等。
  • 偏向于规则文本(如文档或票据)检测。
代表方法
  1. 基于边缘特征的方法
    • 使用图像梯度和边缘信息(如Sobel算子或Canny边缘检测)检测文本边界。
  2. 基于连接组件的方法
    • 例如极大稳定极值区域(MSER),通过寻找图像中的稳定区域来检测可能的字符块。
  3. 基于滑动窗口的方法
    • 滑动窗口逐像素扫描,通过分类器(如SVM)检测文本区域。
2. 深度学习引领阶段(2015年至今)

随着深度学习的爆发性发展,文本检测性能显著提升。深度卷积神经网络(CNN)的引入使得复杂背景中的文本检测成为可能。
特点

  • 自动学习特征,减少了手工设计特征的依赖。
  • 更适应自然场景中的多样化文本。
代表方法

基于目标检测的文本检测框架:

  • CTPN(2016)
    • 基于RNN和CNN联合的自然场景文本检测算法
    • 能检测水平和部分倾斜的文本。
  • EAST(2017)
    • 提供高效且准确的文本检测,通过回归预测文本区域。
    • 能处理水平和任意方向的文本。
  • TextBoxes/TextBoxes++(2017)
    • 改进的SSD结构,适用于检测长条形文本区域。

基于分割的文本检测框架:

  • PSENet(2019)
    • 逐步扩展文本区域的方法,适用于检测不规则文本形状。
  • PAN(2020)
    • 基于邻域传播的方法,显著提升检测速度和对小文本区域的性能。
      基于Transformer的现代方法
  • 近年来,Transformer被引入文本检测任务,如DETR改进版本和自适应分割方法。

文本识别

文本识别包括单字符识别和文本行识别。
文本识别是将检测到的文本区域转化为可编辑文本的过程。基于深度学习的文本识别方法通常采用以下模型:

  • CRNN(Convolutional Recurrent Neural Network)
    结合CNN提取特征、RNN捕获序列信息,以及CTC(Connectionist Temporal Classification)解码。适合处理不规则文本。

  • Attention-based Encoder-Decoder
    使用注意力机制对文本序列进行逐步解码,适合复杂场景下的长文本识别。

  • Transformer-based Models
    利用Transformer架构(如Vision Transformer、Swin Transformer)提取图像序列特征,具有高精度和鲁棒性。

  • SAR(Show, Attend and Read)
    一种专注于场景文本识别的端到端模型,能够处理复杂的字体和背景。

实例-基于PPOCR-V3

import cv2
import os
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr# PaddleOCR目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False)  # need to run only once to download and load model into memory
save_results = []
img_path = 'images/003.jpg'
save_dir = 'ocr_result'
result = ocr.ocr(img_path, cls=True)[0]
# 将结果写入文件
with open(os.path.join(save_dir, "003_result.txt"),'w',encoding='utf-8') as f:for line in result:f.writelines(str(line)+'\n')print(line)# 显示结果
from PIL import Imageimage = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf')
cv2.imwrite(os.path.join(save_dir, "003_result.jpg"), im_show)
plt.figure(figsize=(15, 8))
plt.imshow(im_show)
plt.show()

http://www.ppmy.cn/devtools/159241.html

相关文章

-bash:/usr/bin/rm: Argument list too long 解决办法

问题概述 小文件日志太多导致无法使用rm命令,因为命令行参数列表的长度超过了系统允许的最大值。 需要删除/tmp目录下的所有文件,文件数量比较多。 ls -lt /tmp | wc -l 5682452 解决方法如下: 使用find -exec 遍历,然后执行删…

探索Java中的集合类_特性与使用场景

1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…

公网IP、私网IP、动态IP、静态IP

IP地址这个词我们经常听到,它具体是个什么东西这里就不谈了,建议去看一下本系列文章的《IP地址和MAC地址简介》一文。本文主要来区分一下公网IP、私网IP、动态IP、静态IP这四个概念。 先说公网IP和私网IP。 我们都听过IP地址,但对公网IP和私…

2025 docker可视化管理面板DPanel的安装

1.什么是 DPanel ? DPanel 是一款 Docker 可视化管理面板,旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能,使用户能够更轻松地管理和部署 Docker 环境。 软件特点: 可视化管理:提供直观的用户界面&#…

如何优化React应用的性能?

文章目录 1. 引言2. 渲染优化2.1 使用 React.memo 避免不必要的重新渲染2.2 使用 shouldComponentUpdate 或 PureComponent2.3 使用 useMemo 和 useCallback 3. 异步渲染与懒加载3.1 使用 React.lazy 和 Suspense 实现懒加载3.2 分割代码(Code-Splitting&#xff09…

面试经典150题——堆

文章目录 1、数组中的第K个最大元素1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、IPO2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、查找和最小的 K 对数字3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、数据流的中位数4.1 题目链接4.2 题目描述4.3 解…

【黑马点评优化】1-使用JWT登录认证+redis实现自动续期

1-使用JWT登录认证redis实现自动续期 0 前言1 原先的redis实现登录鉴权2 JWT登录认证Redis自动续期2.1 认证(identification)授权 (authorization)和鉴权(Authorization)2.1.1 认证(identificat…

【Python深入浅出㊵】解锁Python3的requests模块:网络请求的魔法钥匙

目录 一、requests 模块初相识二、requests 模块的基本使用(一)安装 requests 模块(二)发送 GET 请求(三)发送 POST 请求(四)响应内容处理 三、requests 模块的高级应用(…