项目目标:

从一张图片中的8个手写汉字中,找到两个一样的汉字,并给出位置

图片示例:

python手写中文识别库_数据

数据存储

为了更好的对数据进行保存,将数据统一存放在baidu网盘上,Projects/captcha下

工程实现

整体思路

针对此类数据,采用传统方法分割,再分类的方法去识别

详细介绍

• Code 
  
• ModelTf
 基于tensorflow1.14,实现的单字分类算法 
    • backbone 
      
• resnet.py
 基于tensorflow的slim实现了resnet网络,
 为了适配onnx格式(tensorflow的pad默认是最优最少的pad,
 如3*3 stride=2的话右下pad就行,而pytorch和onnx都是
 四周padding),对stride=2的卷积进行了拆分,先pad再卷积• losses 
      
• loss.py
 loss文件• cfg.py
 配置文件,如字典、训练数据地址、验证数据地址等• classify.py
 分类模型实现• data_generator.py
 训练过程中的数据生成,实现了一个迭代器,不断生成训练数据,以及一个多进程的数据生成• train.py
 模型训练脚本,实现了模型搭建、优化器配置、训练、验证• ckpt_slim.py
 训练保存的模型ckpt文件存在优化器的信息,比较大,这边处理后得到的只有模型结构和权重• ModelPaddle 
    
• 基于paddlepaddle实现了整个工程,并完成了onnx转换及trt动态输入和推理的过程,复现了2019年tf1的结果
• DataGenerator
 此项目只提供几百张测试图片,未提供训练图片,所有都需要自己去生成,因为是手写体,
 常规字体不能使用,爬虫了部分手写字体
 生成过程: 
    1. python image_generator.py --data_path=/data/yujiangyong/Projects/products/rec_data1
 –font_path=/data/yujiangyong/baiduocr/ocr_font12. python image_generator.py --data_path=/data/yujiangyong/Projects/products/rec_data2 --font_path=/data/yujiangyong/mathocr/mathhaoweilai/shou_font3
• util 
      
• font_util.py
 字体文件解析,得到每个字体文件包含的文字数• gen_text_util.py
 根据文字生成图片• transform_util.py
 图像变换脚本• image_generator.py
 生成文字脚本• jian_cha_dict.pkl
 字符字典• PreviewsDemo
 2019年交付的模型demo,熟悉一下之前怎么做的,效果如何 
    • models
 训练好的模型文件• demo.py
 使用的demo脚本,效果是直接识别出两个相同的字的精度是67.2%,使用余弦相似度来进行相同字的比较,精度是96.5%,但是里面求余弦距离好像存在问题,
 当时是这么做的,8_c的特征,进行点成,变成8 _8 *c的特征,然后取max,可以得到那两个特征在那个字符上的概率最大,而且差不多• demo_advance.py
 demo.py计算距离的时候,范数计算是有问题的,直接计算的是8*c的范数,并不是8个c的范数,这个demo脚本测试范数单独计算时的精度,此时的精度是95.99%• demo_debug.py
 采用正常的余弦相似度的计算方法来计算余弦距离,再进行精度统计,采用的softmax之后的特征来做的余弦距离计算,然后取max,此时的精度是95.8%,
 比上一种方法低• server.py
 在demo的基础上做了一些策略,当识别出两个一样的字的时候采用识别结果,当识别不出的时候采用余弦距离• read_ckpt_value.py
 读取ckpt里面的key和value,加载meta,再加载data,再打印variable• ckpt_show.py
 读取meta,然后写入log,tf.train.import_meta_graph()读取meta,tf.summary.FileWriter()写入log• cpkt_to_pb.py
 将ckpt模型转换为pb,由于模型既用了keras又用了tf,导致无法导出pb• images