ASTER文字识别

2024-09-05 10:28
文章标签 文字 识别 aster

本文主要是介绍ASTER文字识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文:ASTER文字识别 - 知乎 (zhihu.com)

论文:

https://ieeexplore.ieee.org/document/8395027​ieeexplore.ieee.org/document/8395027

code:

https://github.com/ayumiymk/aster.pytorch​github.com/ayumiymk/aster.pytorch

弯曲文字在自然场景中很常见,很难识别,对于弯曲文字的识别一般是先进行文字区域检测,然后再进行文本图片矫正、识别。ASTER提出显式图像矫正机制,可以在无额外标注的情况下显著地提升识别网络的识别效果。

一、ASTER的网络结构

ASTER的网络结构由一个矫正网络和一个识别网络组成。

class ModelBuilder(nn.Module):"""This is the integrated model."""def __init__(self, arch, rec_num_classes, sDim, attDim, max_len_labels, eos, STN_ON=False):super(ModelBuilder, self).__init__()self.arch = archself.rec_num_classes = rec_num_classesself.sDim = sDimself.attDim = attDimself.max_len_labels = max_len_labelsself.eos = eosself.STN_ON = STN_ONself.tps_inputsize = global_args.tps_inputsizeself.encoder = create(self.arch,with_lstm=global_args.with_lstm,n_group=global_args.n_group)encoder_out_planes = self.encoder.out_planesself.decoder = AttentionRecognitionHead(num_classes=rec_num_classes,in_planes=encoder_out_planes,sDim=sDim,attDim=attDim,max_len_labels=max_len_labels)self.rec_crit = SequenceCrossEntropyLoss()if self.STN_ON:self.tps = TPSSpatialTransformer(output_image_size=tuple(global_args.tps_outputsize),num_control_points=global_args.num_control_points,margins=tuple(global_args.tps_margins))self.stn_head = STNHead(in_planes=3,num_ctrlpoints=global_args.num_control_points,activation=global_args.stn_activation)def forward(self, input_dict):return_dict = {}return_dict['losses'] = {}return_dict['output'] = {}x, rec_targets, rec_lengths = input_dict['images'], \input_dict['rec_targets'], \input_dict['rec_lengths']# rectificationif self.STN_ON:# input images are downsampled before being fed into stn_head.stn_input = F.interpolate(x, self.tps_inputsize, mode='bilinear', align_corners=True)stn_img_feat, ctrl_points = self.stn_head(stn_input)x, _ = self.tps(x, ctrl_points)if not self.training:# save for visualizationreturn_dict['output']['ctrl_points'] = ctrl_pointsreturn_dict['output']['rectified_images'] = xencoder_feats = self.encoder(x)encoder_feats = encoder_feats.contiguous()if self.training:rec_pred = self.decoder([encoder_feats, rec_targets, rec_lengths])loss_rec = self.rec_crit(rec_pred, rec_targets, rec_lengths)return_dict['losses']['loss_rec'] = loss_recelse:rec_pred, rec_pred_scores = self.decoder.beam_search(encoder_feats, global_args.beam_width, self.eos)# rec_pred, rec_pred_scores = self.decoder.sample([encoder_feats, rec_targets, rec_lengths])rec_pred_ = self.decoder([encoder_feats, rec_targets, rec_lengths])loss_rec = self.rec_crit(rec_pred_, rec_targets, rec_lengths)return_dict['losses']['loss_rec'] = loss_recreturn_dict['output']['pred_rec'] = rec_predreturn_dict['output']['pred_rec_score'] = rec_pred_scores# pytorch0.4 bug on gathering scalar(0-dim) tensorsfor k, v in return_dict['losses'].items():return_dict['losses'][k] = v.unsqueeze(0)return return_dict

二、矫正网络

矫正网络自适应地将输入图像中的文本进行矫正并转换成一个新的图像。

STN网络的核心是将图片空间矫正过程构建成可学习模型,流程如图所示:

先将输入图片downsample到Id,定位网络与格点生成器生成TPS变换的参数,再通过采样器(sampler)生成矫正后的图片Ir 。

TPS(Thin Plate Spline)可对图片进行柔性变换,对于透视和弯曲这两种典型的不规则文字的矫正效果很好。

2.1、定位网络

定位网络分别由2个含有K个基准点的坐标集合组成。K个基准点的坐标用C表示,C =[c1,… ,cK]∈R2xK。预测出的坐标用C'表示,C' =[c'1,… ,c'K]∈R2xK。

定位网络由一个CNN网络预测出控制点坐标,并且在训练过程中无需任何坐标标注,只依赖识别网络的文本gt,完全由反向传播的梯度监督。

from __future__ import absolute_importimport math
import numpy as np
import sysimport torch
from torch import nn
from torch.nn import functional as F
from torch.nn import initdef conv3x3_block(in_planes, out_planes, stride=1):"""3x3 convolution with padding"""conv_layer = nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=1, padding=1)block = nn.Sequential(conv_layer,nn.BatchNorm2d(out_planes),nn.ReLU(inplace=True),)return blockclass STNHead(nn.Module):def __init__(self, in_planes, num_ctrlpoints, activation='none'):super(STNHead, self).__init__()self.in

这篇关于ASTER文字识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138700

相关文章

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图