项目总结-网络文本识别

2019.7.7 新总结

1)网络结构:
ResNet提取图像表征 fc
初始化位置特征,p1, p2,… p21, 总共21长度。

2)提取的图像标准fc也是序列特征,数据都是定长的,所以,将序列特征均匀划分到每个位置序列特征,进行拼接。这样,每个位置序列特征上都有对应的字符内容表征。
每个 位置特征上拼接图像标注fc

3)然后,让BiLSTM再去自动根据上下文关系,学习每个位置的字符。

拼接好的位置特征, 经过BiLSTM

每个时刻的输出状态特征,经过 FC + softmax 激活。
FC: 将提取到的特征向量,softmax( W x + b )
W是一个权重矩阵,学习每个类别的权重,然后使用softmax激活,得出每个矩阵的概率。

数据:
给定数据集:10000条数据作为训练集。
涵盖几十种字体,像素大小也各不相同,排版方式复杂,语言也很多种。

原始图片,+ 文本框四个点坐标(里面是标注的文字)最小外接矩形,确定要扣取的文本区域,图片小于45度,转为水平;图片大于45度,转为垂直,最后将垂直的转为水平(倾斜处理)
2. 对文字图片进行角度处理,然后归一化成 同一尺寸。
图片的宽高统计,选取高度,宽度,为啥???

宽高比统计,宽高比为6,覆盖85%左右。
归一化: 宽32, 宽高比:6.

字符串长度统计:模型序列预测长度:21, 覆盖99%的长度,长度超过21的,不到1%左右。

训练集类标统计:中文4085(简体,繁体),英文和数字(半角,全角??需要统计吗??)62全角,62半角,符号220类。统计在训练集中出现的频数。

最终确定,模型序列预测类标: 国标1级简体汉字常用的3500个,1000个繁体汉字,和训练集中出现的所有汉字,26个英文字母,和10个数字,共5302个类别。

数据生成(文字图片合成)
类标太多,平均一个类标就几个学习数据,所以需要合成大量与训练集相似的文字图片,充分发挥模型的潜力,提高模型在测试集上的准确率。

  1. 生成文字序列(比较重要,毕竟文字是核心)
    根据训练集的数据分布情况,控制生成的比例。
    控制比例:1)语种种类比例(纯中文、纯英文(数字)、纯符号、混合型),
    2)每个字的字频,(训练集中字频统计,生成时更新频数,为0就不生成)
    3)字符串长度比例,(21覆盖99%,各个长度比例要控制)
    4)某些字符不能与其他字符在一起。(简体不能和繁体在一起,中文里面是全角符号,英文是半角符号)
  2. 前景渲染
    pillow:设置文字大小、颜色、收集了很多字体(网络图片),文字方向(70%水平,30%垂直),进行适当旋转。
  3. 背景合成

模型构建:
加深的残差网络,比加深的CNN更容易优化。
采用101层的ResNets,学习网络文本图像的特征,
越深的网络提取的特征越抽象,越具有语义信息。
ResNet: 解决退化问题(网络加深,准确率下降),恒等映射,identity mapping和residual mapping, 网络达到最优时,继续加深网络,residual mapping为0. 只剩identity mapping. 网络性能就不会随着深度增加而降低。

y = F(x) + x, (x 指 identity mapping, F(x)指 Residual mapping).

给定一个文字图片,归一化为固定尺寸,输入101层ResNets网络进行特征提取,输出全局特征向量(表示整个文字序列的特征),我们需要识别出每个位置的字符。
全局特征向量与位置序列向量p???结合起来,网络对该位置的字符特征自动学习和选择。 生成合成向量。
合成向量 输入到BiLSTM(全连接层,softmax),得到文本序列每个位置的字符编码,每个类别的概率,确定是哪个字符。

数据合成:编辑距离准确率提升16.5个百分点。
后处理:
编辑距离准确率

训练数据识别出的有用的文本区域143532个,8:1:1进行划分,划分时参照语种比例,序列长度,字频这些,横竖比例。

合成:467552个,

后期分析:
计算各个类别准确率, 纯中文,英文和数字,纯符号,或者混合型的,
发现英文数字的准确率很低。混合型的。
有些过长的,大于21,被砍掉的。能补的补上去。

后处理:加入规则,R 换成? , 网址,taobao, 电话、微信、qq
0.5%提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi ZXing是一款基于ZXing库的开源二维码识别工具。要实现批量识别二维码,我们可以按照以下步骤进行操作: 1. 导入ZXing库:首先,需要下载并导入ZXing库到Delphi中,可以从GitHub或其他资源站点获取。将库文件添加到Delphi项目中。 2. 创建批量识别功能:在Delphi中,我们可以使用循环结构来实现批量处理。例如,可以使用一个循环来遍历包含二维码图片文件名的文件夹。 3. 加载图片并识别二维码:使用ZXing库提供的API,可以加载每个图片文件并进行二维码识别。可以通过将每个图片文件的路径传递给ZXing函数来实现。识别结果可以是文本形式或其他格式,取决于所选择的函数。 4. 处理识别结果:每次识别完成后,可以将结果保存到一个集合或数组中,以便进一步处理或显示。可以根据具体需求选择保存方式。 5. 显示或处理结果:可以根据需要将结果展示在界面上,例如在列表框或字符串列表中。还可以将结果导出到文本文件或数据库中进行进一步处理。 需要注意的是,ZXing库对二维码图片的清晰度和质量有一定要求。为了提高识别准确率,建议使用高分辨率、清晰度较高的图片。 总结来说,使用Delphi ZXing实现批量识别二维码的基本步骤包括导入库、创建批量处理功能、加载和识别图片、处理识别结果以及展示或保存结果。具体实现可以根据项目需求和开发者的经验进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值