当前位置: 首页 > news >正文

浙江省建设厅干部学校网站主流网站 技术

浙江省建设厅干部学校网站,主流网站 技术,企业网站建设的目的,长安网站建设软件文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 #x1f525; 优质竞赛项目系列#xff0c;今天要分享的是 #x1f6a9; **基于深度学习OCR中文识别系统 ** 该项目较为新颖#xff0c;适合作为竞赛课题方向#xff0c;… 文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 优质竞赛项目系列今天要分享的是 **基于深度学习OCR中文识别系统 ** 该项目较为新颖适合作为竞赛课题方向学长非常推荐 学长这里给一个题目综合评分(每项满分5分) 难度系数3分工作量3分创新点4分 更多资料, 项目分享 https://gitee.com/dancheng-senior/postgraduate 1 课题背景 在日常生产生活中有大量的文档资料以图片、PDF的方式留存随着时间推移 往往难以检索和归类 文字识别Optical Character RecognitionOCR 是将图片、文档影像上的文字内容快速识别成为可编辑的文本的技术。 高性能文档OCR识别系统是基于深度学习技术综合运用Tensorflow、CNN、Caffe 等多种深度学习训练框架基于千万级大规模文字样本集训练完成的OCR引擎与传统的模式识别的技术相比深度学习技术支持更低质量的分辨率、抗干扰能力更强、适用的场景更复杂文字的识别率更高。 本项目基于Tensorflow、keras/pytorch实现对自然场景的文字检测及OCR中文文字识别。 2 实现效果 公式检测 纯文字识别 3 文本区域检测网络-CTPN 对于复杂场景的文字识别首先要定位文字的位置即文字检测。 简介 CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与LSTM深度网络能有效的检测出复杂场景的横向分布的文字效果如图1是目前比较好的文字检测算法。由于CTPN是从Faster RCNN改进而来本文默认读者熟悉CNN原理和Faster RCNN网络结构。 相关代码 ​ def main(argv):pycaffe_dir os.path.dirname(__file__)parser argparse.ArgumentParser()# Required arguments: input and output.parser.add_argument(input_file,helpInput txt/csv filename. If .txt, must be list of filenames.\If .csv, must be comma-separated file with header\filename, xmin, ymin, xmax, ymax)parser.add_argument(output_file,helpOutput h5/csv filename. Format depends on extension.)# Optional arguments.parser.add_argument(--model_def,defaultos.path.join(pycaffe_dir,../models/bvlc_reference_caffenet/deploy.prototxt.prototxt),helpModel definition file.)parser.add_argument(--pretrained_model,defaultos.path.join(pycaffe_dir,../models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel),helpTrained model weights file.)parser.add_argument(--crop_mode,defaultselective_search,choicesCROP_MODES,helpHow to generate windows for detection.)parser.add_argument(--gpu,actionstore_true,helpSwitch for gpu computation.)parser.add_argument(--mean_file,defaultos.path.join(pycaffe_dir,caffe/imagenet/ilsvrc_2012_mean.npy),helpData set image mean of H x W x K dimensions (numpy array). Set to for no mean subtraction.)parser.add_argument(--input_scale,typefloat,helpMultiply input features by this scale to finish preprocessing.)parser.add_argument(--raw_scale,typefloat,default255.0,helpMultiply raw input by this scale before preprocessing.)parser.add_argument(--channel_swap,default2,1,0,helpOrder to permute input channels. The default converts RGB - BGR since BGR is the Caffe default by way of OpenCV.)parser.add_argument(--context_pad,typeint,default16,helpAmount of surrounding context to collect in input window.)args parser.parse_args()mean, channel_swap None, Noneif args.mean_file:mean np.load(args.mean_file)if mean.shape[1:] ! (1, 1):mean mean.mean(1).mean(1)if args.channel_swap:channel_swap [int(s) for s in args.channel_swap.split(,)]if args.gpu:caffe.set_mode_gpu()print(GPU mode)else:caffe.set_mode_cpu()print(CPU mode)# Make detector.detector caffe.Detector(args.model_def, args.pretrained_model, meanmean,input_scaleargs.input_scale, raw_scaleargs.raw_scale,channel_swapchannel_swap,context_padargs.context_pad)# Load input.t time.time()print(Loading input...)if args.input_file.lower().endswith(txt):with open(args.input_file) as f:inputs [_.strip() for _ in f.readlines()]elif args.input_file.lower().endswith(csv):inputs pd.read_csv(args.input_file, sep,, dtype{filename: str})inputs.set_index(filename, inplaceTrue)else:raise Exception(Unknown input file type: not in txt or csv.)# Detect.if args.crop_mode list:# Unpack sequence of (image filename, windows).images_windows [(ix, inputs.iloc[np.where(inputs.index ix)][COORD_COLS].values)for ix in inputs.index.unique()]detections detector.detect_windows(images_windows)else:detections detector.detect_selective_search(inputs)print(Processed {} windows in {:.3f} s..format(len(detections),time.time() - t))# Collect into dataframe with labeled fields.df pd.DataFrame(detections)df.set_index(filename, inplaceTrue)df[COORD_COLS] pd.DataFrame(datanp.vstack(df[window]), indexdf.index, columnsCOORD_COLS)del(df[window])# Save results.t time.time()if args.output_file.lower().endswith(csv):# csv# Enumerate the class probabilities.class_cols [class{}.format(x) for x in range(NUM_OUTPUT)]df[class_cols] pd.DataFrame(datanp.vstack(df[feat]), indexdf.index, columnsclass_cols)df.to_csv(args.output_file, colsCOORD_COLS class_cols)else:# h5df.to_hdf(args.output_file, df, modew)print(Saved to {} in {:.3f} s..format(args.output_file,time.time() - t))CTPN网络结构 4 文本识别网络-CRNN CRNN 介绍 CRNN 全称为 Convolutional Recurrent Neural Network主要用于端到端地对不定长的文本序列进行识别不用 整个CRNN网络结构包含三部分从下到上依次为 CNN卷积层使用深度CNN对输入图像提取特征得到特征图RNN循环层使用双向RNNBLSTM对特征序列进行预测对序列中的每个特征向量进行学习并输出预测标签真实值分布CTC loss转录层使用 CTC 损失把从循环层获取的一系列标签分布转换成最终的标签序列。 CNN 卷积层的结构图 这里有一个很精彩的改动一共有四个最大池化层但是最后两个池化层的窗口尺寸由 2x2 改为 1x2也就是图片的高度减半了四次除以 2^4 而宽度则只减半了两次除以2^2这是因为文本图像多数都是高较小而宽较长所以其feature map也是这种高小宽长的矩形形状如果使用1×2的池化窗口可以尽量保证不丢失在宽度方向的信息更适合英文字母识别比如区分i和l。 CRNN 还引入了BatchNormalization模块加速模型收敛缩短训练过程。 输入图像为灰度图像单通道高度为32这是固定的图片通过 CNN 后高度就变为1这点很重要宽度为160宽度也可以为其他的值但需要统一所以输入CNN的数据尺寸为 (channel, height, width)(1, 32, 160)。 CNN的输出尺寸为 (512, 1, 40)。即 CNN 最后得到512个特征图每个特征图的高度为1宽度为40。 Map-to-Sequence 我们是不能直接把 CNN 得到的特征图送入 RNN 进行训练的需要进行一些调整根据特征图提取 RNN 需要的特征向量序列。 现在需要从 CNN 模型产生的特征图中提取特征向量序列每一个特征向量如上图中的一个红色框在特征图上按列从左到右生成每一列包含512维特征这意味着第 i 个特征向量是所有的特征图第 i 列像素的连接这些特征向量就构成一个序列。 由于卷积层最大池化层和激活函数在局部区域上执行因此它们是平移不变的。因此特征图的每列即一个特征向量对应于原始图像的一个矩形区域称为感受野并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。特征序列中的每个向量关联一个感受野。 如下图所示 这些特征向量序列就作为循环层的输入每个特征向量作为 RNN 在一个时间步time step的输入。 RNN 因为 RNN 有梯度消失的问题不能获取更多上下文信息所以 CRNN 中使用的是 LSTMLSTM 的特殊设计允许它捕获长距离依赖不了解的话可以看一下这篇文章 对RNN和LSTM的理解。 LSTM 是单向的它只使用过去的信息。然而在基于图像的序列中两个方向的上下文是相互有用且互补的。将两个LSTM一个向前和一个向后组合到一个双向LSTM中。此外可以堆叠多层双向LSTM深层结构允许比浅层抽象更高层次的抽象。 这里采用的是两层各256单元的双向 LSTM 网络 通过上面一步我们得到了40个特征向量每个特征向量长度为512在 LSTM 中一个时间步就传入一个特征向量进行分 我们知道一个特征向量就相当于原图中的一个小矩形区域RNN 的目标就是预测这个矩形区域为哪个字符即根据输入的特征向量进行预测得到所有字符的softmax概率分布这是一个长度为字符类别数的向量作为CTC层的输入。 因为每个时间步都会有一个输入特征向量 x^T 输出一个所有字符的概率分布 y^T 所以输出为 40 个长度为字符类别数的向量构成的后验概率矩阵。 如下图所示 然后将这个后验概率矩阵传入转录层。 CTC loss 这算是 CRNN 最难的地方这一层为转录层转录是将 RNN 对每个特征向量所做的预测转换成标签序列的过程。数学上转录是根据每帧预测找到具有最高概率组合的标签序列。 端到端OCR识别的难点在于怎么处理不定长序列对齐的问题OCR可建模为时序依赖的文本图像问题然后使用CTCConnectionist Temporal Classification, CTC的损失函数来对 CNN 和 RNN 进行端到端的联合训练。 相关代码 ​ def inference(self, inputdata, name, reuseFalse):Main routine to construct the network:param inputdata::param name::param reuse::return:with tf.variable_scope(name_or_scopename, reusereuse):# centerlized datainputdata tf.divide(inputdata, 255.0)#1.特征提取阶段# first apply the cnn feature extraction stagecnn_out self._feature_sequence_extraction(inputdatainputdata, namefeature_extraction_module)#2.第二步 batch*1*25*512 变成 batch * 25 * 512# second apply the map to sequence stagesequence self._map_to_sequence(inputdatacnn_out, namemap_to_sequence_module)#第三步应用序列标签阶段# third apply the sequence label stage# net_out width, batch, n_classes# raw_pred width, batch, 1net_out, raw_pred self._sequence_label(inputdatasequence, namesequence_rnn_module)return net_out​ 5 最后 更多资料, 项目分享 https://gitee.com/dancheng-senior/postgraduate
http://www.tj-hxxt.cn/news/132683.html

相关文章:

  • php 网站模板网站总体规划
  • 基于网站开发小程序建立百度网站
  • 建设电子商务系统网站汽车网址
  • 男女做暧暧视频免费网站网站建设业务员招聘
  • 怎么做企业网站原型网站界面设计修改要多少钱
  • 社群网站建设赣州网上房地产
  • 南宁定制建站网络公司给我做网站我有没有源代码版权吗
  • 重庆制作网站公司哪家好在厦门做网站找谁
  • 网站建设制作设计公司长春营销型网站设计
  • 怎么做网站图片做餐饮要看的网站
  • 如何查看网站域名wordpress主题去版权乱码
  • WordPress网站动漫你在wordpress菜单参数设置
  • 如何在外管局网站上做a合同襄阳做网站哪家好
  • 网站建设公司的成本有哪些方面长沙个人做网站
  • 类型: 营销型网站建设wordpress 4.4.7
  • 专业的会议网站建设香蜜湖附近网站建设
  • 有做数学题的网站吗北仑宁波有没有做网站
  • 双流规划建设管理局网站沧州高端网站建设公司
  • 河北手机网站制作多少钱网站开发 工资高吗
  • 紫色网站网站搭建框架是什么
  • 类似中企动力的做网站的临沂网络网站建设
  • 网站是用虚拟机做还是服务器苏州个人网站建设
  • 长春网站制作设计网站开发 不好 怎么说
  • 烟台网站建设方案图片在线设计平台
  • 阿里云网站托管成都网站优化多少钱
  • 南宁企业建站程序网站建设网页设计师
  • 怎么建网站教程视频appcdn加速国外服务器
  • 网站开发demo最新新闻热点事件摘抄2022年5月
  • 湛江做网站带数据库的网站模板下载
  • 苏州营销网站建设杭州比较好的代运营公司