Opencv多语言自然场景文本识别系统(源码&教程)

article/2025/11/1 23:04:02

1. 研究背景

人类在自然场景中可以快速定位并识别看到的文字信息,但是想要计算机做到和人类一样是比较困难的。开发人员一直想要让机器也能识别图像中的文字信息。当然,对于自然场景来说,图像中的信息复杂甚至是低效的,文字旁的物体﹑光影,以及字体颜色、大小、书写风格,都会给机器识别带来不同程度的影响。图像文本识别通常被划分为两个部分:文本检测与文本识别。
文本检测是文本识别首先要做的一步,是必不可缺的一步。要让机器识别自然场景中获取的文本信息,要先让机器知道文本信息的位置。现在也有很多文本检测的解决方案,但是在面对复杂的图像时,往往抗干扰能力不尽如人意。而且这些图像通常会有不同字体(例如艺术文字),不同形状,严重影响了文本的检测与识别。

2.多语言选择模块

9.png

3.识别效果展示

4.png

6.png
2.png

3.png

7.png

8.png

4.效果视频演示

Opencv多语言自然场景文本识别系统(源码&教程)_哔哩哔哩_bilibili

5.文本识别算法CRNN

文本识别是把文字图片转换成计算机可读文本的过程,输入是从原图中裁剪出来的候选区域的图片,输出是图片中包含的文字序列。目前的文本识别方法把识别任务看作一种序列识别任务,可以省略字符的分割。和一般图像分类任务不一样,文本识别输出的是文字序列,长度不固定。如图所示,根据序列建模方式的不同 将 目 前 文 本 识 别 方 法 分 为 两 大 类 :
1.基 于 CTC(Connectionist Temporal Classification)的文本识别算法
2.基于注意力机制的文本识别算法
image.png

文本识别的目的是将候选区域中的文本图案识别为标准的文字,由于文本识别算法并不是论文的研究重点,所以本节只介绍文中使用到的CRNN文本识别算法。
CRNN的主要思想就是将文本识别看作是对序列的预测,而不是将文本看作独立的目标,所以采用了RNN网络来预测序列,算法的主要流程可以分为三个部分:通过CNN网络提取图像特征,然后采用BiSTLM(双向长短时记忆)网络来对序列进行预测,最后通过CTC转录层来得到最终的结果。
image.png

代码实现

class CRNN(nn.Module):def __init__(self, characters_classes, hidden=256, pretrain=True):super(CRNN, self).__init__()self.characters_class = characters_classesself.body = VGG()self.stage5 = nn.Conv2d(512, 512, kernel_size=(3, 2), padding=(1, 0))self.hidden = hiddenself.rnn = nn.Sequential(BidirectionalLSTM(512, self.hidden, self.hidden),BidirectionalLSTM(self.hidden, self.hidden, self.characters_class))self.pretrain = pretrainif self.pretrain:import torchvision.models.vgg as vggpre_net = vgg.vgg16(pretrained=True)pretrained_dict = pre_net.state_dict()model_dict = self.body.state_dict()pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict}model_dict.update(pretrained_dict)self.body.load_state_dict(model_dict)for param in self.body.parameters():param.requires_grad = Falsedef forward(self, x):x = self.body(x)x = self.stage5(x)x = x.squeeze(3)x = x.permute(2, 0, 1).contiguous()x = self.rnn(x)x = F.log_softmax(x, dim=2)return x

6.基于改进CTC的方法

参考该博客直接将字符特征序列转化为字符概率,通过CTC损失来得到识别Loss。受到语音识别的启发,CRNN将CTC引入到基于图像的序列识别中,CRNN是一种端到端的文本序列识别系统,包括卷积模块、递归模块和转录模块。为了提取来自相关上下文的信息,用到了一种循环卷积神经网络——LSTM,在LSTM中通过“门”来控制历史信息的遗忘和当先状态的更新。Star-net将空间变换和CRNN相结合,引入空间注意力机制对具有几何畸变的文本图像进行校正,从而实现对具有几何畸变的场景文本的识别。为了避免RNN训练过程中的梯度退化和梯度爆炸。
Gao提出了一种端到端的全卷积文本识别网络,该网络采用CNN捕捉长期依赖关系,并代替RNN生成序列特征,该模型大大提高了识别器的识别速度。文献[1]-[2]同样运用神经网络结合CTC实现了准确鲁棒的识别自然场景中倾斜的文本,如下图所示。

image.png

代码实现

def ctc(img, text_recs, adjust=False):"""加载CTC模型,进行字符识别"""results = {}xDim, yDim = img.shape[1], img.shape[0]for index, rec in enumerate(text_recs):xlength = int((rec[6] - rec[0]) * 0.1)ylength = int((rec[7] - rec[1]) * 0.2)if adjust:pt1 = (max(1, rec[0] - xlength), max(1, rec[1] - ylength))pt2 = (rec[2], rec[3])pt3 = (min(rec[6] + xlength, xDim - 2), min(yDim - 2, rec[7] + ylength))pt4 = (rec[4], rec[5])else:pt1 = (max(1, rec[0]), max(1, rec[1]))pt2 = (rec[2], rec[3])pt3 = (min(rec[6], xDim - 2), min(yDim - 2, rec[7]))pt4 = (rec[4], rec[5])degree = degrees(atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]))  # 图像倾斜角度partImg = dumpRotateImage(img, degree, pt1, pt2, pt3, pt4)# dis(partImg)if partImg.shape[0] < 1 or partImg.shape[1] < 1 or partImg.shape[0] > partImg.shape[1]:  # 过滤异常图片continuetext = recognizer.recognize(partImg)if len(text) > 0:results[index] = [rec]results[index].append(text)  # 识别文字return results

7.系统整合

下图源码&环境部署视频教程&自定义UI界面
1.png

参考文献《Opencv多语言自然场景文本识别系统(源码&教程)》

8.参考文献

[1]韩宇.基于CNN及RPN技术的文字识别应用[J].机电信息.2019,(21).90-91,93.DOI:10.3969/j.issn.1671-0797.2019.21.046.
[2]李颖,刘菊华,易尧华.自然场景图像的字符识别方法[J].包装工程.2018,(5).168-172.
[3]李文轩,孙季丰.基于复合优化的深度玻尔兹曼机的路牌文字图像识别算法[J].计算机工程与科学.2018,(1).79-85.DOI:10.3969/j.issn.1007-130X.2018.01.012.
[4]万萌.基于深度学习的自然场景文字检测与识别方法研究[D].2019
[5]陈桂安.端到端的自然场景文字检测与识别神经网络的研究与实现[D].2019
[6]Baoguang Shi,Xiang Bai,Cong Yao.An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition[J].IEEE Transactions on Pattern Analysis & Machine Intelligence.2017,39(11).2298-2304.


http://chatgpt.dhexx.cn/article/cVBCcfIP.shtml

相关文章

深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)

1:样本获取 **算法论文:** Synthetic Data for Text Localisation in Natural Images Github: https://github.com/ankush-me/SynthText **词库:** https://pan.baidu.com/s/10anmu 英文词汇 经过处理后得到大约500兆 6000万词组 **字体:** ubntu系统下支持中文的字体&…

ctpn、east阅读要点记录

最近要做一些ocr的事情&#xff0c;阅读了文字定位的相关论文&#xff0c;主要是ctpn和east.下面对这两篇论文的药店进行一个记录。 CTPN ctpn结合了卷积神经网络和循环神经网络。卷机神经网络用于提取图片特征&#xff0c;循环神经网络能够帮助提升对文字的定位和分类的准确…

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

文章主要是为了说明在windows平台下调试遇到的问题。 代码地址&#xff1a;https://github.com/Aurora11111/chinese-ocr-pytorch 按照相关说明&#xff0c;安装相关的pytorch和tensorflow&#xff0c;我使用的是python3.7 下载代码后&#xff0c;需要进行修改才能在windows…

OCR文字识别项目(原理)

参考视频&#xff1a; OCR文字识别原理 OCR光学字符识别&#xff1a;提取图像中的文字&#xff0c;并转换为文本形式&#xff0c;供后续NLP使用。 一、CTPN算法&#xff1a;文字检测 二、CRNN算法&#xff1a;文字识别 池化此时为12。才能把特征变为适用于输入到RNN中。

CTPN+CRNN算法端到端实现文字识别的实战开发

本文分享自华为云社区《CTPNCRNN 算法端到端实现文字识别》&#xff0c;作者&#xff1a;HWCloudAI。 OCR介绍 光学字符识别&#xff08;英语&#xff1a;Optical Character Recognition&#xff0c;OCR&#xff09;是指对文本资料的图像文件进行分析识别处理&#xff0c;获取…

OCR入门教程系列(五):OCR实战代码解析

👨‍💻作者简介: CSDN、阿里云人工智能领域博客专家,新星计划计算机视觉导师,百度飞桨PPDE,专注大数据与AI知识分享。✨公众号:GoAI的学习小屋 ,免费分享书籍、简历、导图等,更有交流群分享宝藏资料,关注公众号回复“加群”或➡️链接 加群。 🎉专栏推荐: ➡️ …

制作自己的ctpn数据集

制作自己的ctpn数据集 1、利用label-image标注自己的数据集&#xff0c;保存为.txt文件&#xff0c;结果如下&#xff1a; 上图第一列 0&#xff1a;标签 后面的小数是label—image标注的坐标框位置&#xff08;归一化后的结果&#xff09; 2、ctpn数据集的格式&#xff1a;…

CTPN文本检测与tensorflow实现

1. 引言 近年来&#xff0c;随着人工智能的发展&#xff0c;文本检测在很多任务中都是一项基本任务&#xff0c;比如广告牌中文字识别、智能驾驶路牌的检测、身份证识别、快递地址识别等。这些任务中首先的一项就是文本检测&#xff0c;即检测出文本在图像中的位置&#xff0c;…

制作自己的CTPN训练集

制作自己的CTPN训练集 使用labelimg工具制作YOLO格式再将其转为CTPN中需要的8个坐标 1.标注框 2.代码生成坐标并保存 import cv2 import os def change_labelimage_to_cptn_data(pictures_file_path, txt_file_path, cptn_data_labels_path):list os.listdir(txt_file_pat…

【文本检测与识别-白皮书-3.1】第四节:算法模型 2

CTPN CTPN&#xff0c;全称是“Detecting Text in Natural Image with Connectionist Text Proposal Network”&#xff08;基于连接预选框网络的文本检测&#xff09;。CTPN直接在卷积特征映射中检测一系列精细比例的文本建议中的文本行。CTPN开发了一个垂直锚定机制&#xf…

CPTN代码运行报错

Windows10 系统运行 github上给的是linux操作系统指令 因为我是Windows10 的系统&#xff0c;不能通过setup的指令得到所需文件&#xff0c;后面根据https://github.com/eragonruan/text-detection-ctpn/issues/359的方法到第4步报错 错误1&#xff1a; 找不到cl.exe&#x…

JAVA项目实战开发电商项目案例(十)订单与支付模块

文章目录 1项目架构2项目采用技术3订单与支付模块功能演示4如何开发支付宝的支付模块以及订单模块4.1首先需要编写前端页面以及JS文件4.2其次需要编写JAVA后台接口4.3支付模块分析4.4订单模块分析5代码分析6个人说明7 [我的个人网站](http://www.liph.fun)8获取源码 此次电商系…

Java 项目实战 坦克大战 (0)--前言

做了有一个星期了&#xff0c;java语言太强大了&#xff0c;也算是学得最认真的一门语言了&#xff0c;本次课设花的心思也就比较多了。关键总是追求完美总是想原创&#xff0c;最终做出来效果不错&#xff0c;但感觉代码逻辑很乱&#xff0c;今天开始就好好整理一番&#xff0…

Java项目实战第11天:搜索功能的实现

目录 一、sql语句动态拼接二、前后台代码编写三、搜索框数据回填最后 今天是刘小爱自学Java的第110天。 感谢你的观看&#xff0c;谢谢你。 话不多说&#xff0c;开始今天的学习&#xff1a; 事先说明&#xff1a;关于今天的搜索功能实现。 并没有使用到倒排索引这样的主流搜…

【CSDN最全java项目实战500篇】练手/项目经验/毕设刚需

免费精选&#xff01;强烈建议收藏&#xff01;学完这一套直接进大厂&#xff08;附配套源码&资料&#xff09; C站&#xff08;CSDN&#xff09;软件工程师能力认证&#xff0c;已上线70天&#xff0c;下图300所高校的小伙伴们都已经预约、完成C认证&#xff0c;就等你来啦…

Java项目开发实战入门 PDF 扫描完整版

内容介绍 《Java项目开发实战入门》以一起来画画、通讯录系统、明日彩票预测系统、小小五子棋、企业进销存管理系统、企业QQ&#xff08;局域网版&#xff09;、九宫格记忆网和铭成在线考试系统8个精选项目为案例&#xff0c;从趣味性和实际应用角度出发&#xff0c;采用了当前…

全站最全实战的Java项目(附源码)

嗨喽&#xff0c;大家好&#xff0c;今天又要给大家整一波福利了&#xff01; 不管我们要学习哪种语言都希望能第一时间看到成效&#xff0c;能做出实际的东西来&#xff0c;那么这里所说的实际东西当然就是项目啦&#xff01;不用我说大家也知道&#xff0c;学编程语言不做项…

java项目实战之404错误原因总结

java项目实战之404错误原因总结 第一个原因可能是你的URL写错了&#xff0c;正确的URL应该这么写 localhost:8080/项目名称/对应的目录或者映射 好好检查检查是否是拼写错误&#xff0c;或者多了什么&#xff0c;少了什么 第二个原因可能是你的Spring配置文件写错了 一般都…

最牛逼的 Java 项目实战,没有之一!

想要成长为高级开发&#xff0c;掌握更多层面的技术&#xff0c;兼顾深度和广度是毋庸置疑的。你肯定认为&#xff0c;我要认真努力的学习技术&#xff0c;丰富自己的技术栈&#xff0c;然后就可以成为一个优秀的高级开发了。但当你真正去学习之后就会发现&#xff0c;技术栈异…

史上最全Java项目实战课程(含项目实战+源码)

【此文章转自乐字节】 很多小伙伴学了Java有一段时间了&#xff0c;想找几个项目想练练手&#xff0c;更有助于我们的学习和工作实践&#xff0c;最重要的是提高自己的项目经验&#xff0c;对于找工作而言有着大大的帮助&#xff0c;那今天UP主就来分享一些Java实战项目&#…