OCR项目说明

目录总览

configs

infer.yaml:预测时候的配置文件

punctuation_letter_digit.yaml:标点符号,数字,字母的配置文件

single_char.yaml:字的训练模型

models

相关模型

processing

rectification.py:模型的纠正

single_char_processing.py:整个文件数据的处理

  • 初始化-加载模型

    调用load函数,需要输入模型的宽w,高h,类书num_class,ckpt_dir:训练好的checkpoint

    def __init__(self, charmap_path, aliasmap_path, ckpt_dir, h, w, num_class, batch_size):
        self.main = Main().load(w, h, num_class=num_class, ckpt_dir=ckpt_dir)
        self.data = SingleCharData(h, w).load_char_map(charmap_path).load_alias_map(aliasmap_path)
        self.batch_size = batch_size
  • 图片二值化
auxiliary_img:辅助图片

  • 图片旋转矫正

  • 水平投影 ——》 垂直投影切分

  • 数据进行预测

# 数据进行第一次的预测
# 将预测好的数据再放入data中
self.data.set_images(page.make_infer_input_1()).init_indices()
        results = self.main.infer(infer_data=self.data, batch_size=self.batch_size)
  • 对于结果进行一个阈值判断,是否是半个字的,合并为一起
page.set_result_1(results)
        page.filter_by_p(p_thresh=p_thresh)
        for line in page.get_lines(ignore_empty=True):
            line.mark_half()
            # line.calculate_meanline_regression()
            line.merge_components()
  • 合并之后的文字进行,第二次预测
 self.data.set_images(page.make_infer_input_2()).init_indices()
        results2 = self.main.infer(infer_data=self.data, batch_size=self.batch_size)
        page.set_result_2(results2)
        page.mark_char_location()

        rct.rectify_by_location(page.iterate(1))
        rct.rectify_5(page.iterate(5))
		
        if auxiliary_img is not None:
            # auxiliary_img: 作为路径; page.drawing_copy:要保存的图片
            uimg.save(auxiliary_img, page.drawing_copy)
  • 获得预测结果json文件
    # 对于输出的结果,进行一个格式化
    def get_json_result(self, page_path: str, p_thresh: float, auxiliary_img: str):
        page = self._process(page_path, p_thresh, auxiliary_img)
        return page.format_json(p_thresh=p_thresh)
  • 获得预测结果txt文件
    def get_text_result(self, page_path: str, p_thresh: float, auxiliary_img: str):
        page = self._process(page_path, p_thresh, auxiliary_img)
        return page.format_result(p_thresh=p_thresh)

main调用

path = "doc_imgs/2015南立刑初字第0001号_枉法裁判罪84页.pdf/img-0228.jpg"

    proc = Processor("/usr/local/src/data/stage2/all_4190/all_4190.json",
                     "/usr/local/src/data/stage2/all_4190/aliasmap.json",
                     '/usr/local/src/data/stage2/all_4190/ckpts',
                     64, 64, 4190, 64)
    res = proc.get_text_result(path, 0.9, '/usr/local/src/data/results/auxiliary.png')
    print(res)

static/lib

前端?

templates

页面?

test

测试文件

test_char:在验证集上进行一个预测

utils

orientation.py: 旋转矫正

projection.py:图片投影直方图

uchar.py:读取数据

uimg.py:图片的相关操作

utable.py:表格的相关操作

utext.py:文字后期的一些矫正处理

app.py

flask框架,开服务

如果需要使用网页版的预测图片,需要python app.py

args.py

读取配置文件

data.py

读取数据

main.py

模型的训练需要使用这个

使用

方法一

使用wget

  • 命令行方式使用wget,下载服务器上的图片
  • 前提要求:1)图片必须在服务器上, 2)linux系统
  • 举例如下:
wget “http://192.168.68.38:5678/?path=/usr/local/src/data/doc_imgs/2014东刑初字第0100号_诈骗罪208页.pdf/img-0008.jpg” -O test.json
或者
wget "http://nju-vm:5678/?path=/usr/local/src/data/doc_imgs/2014%E4%B8%9C%E5%88%91%E5%88%9D%E5%AD%97%E7%AC%AC0100%E5%8F%B7_%E8%AF%88%E9%AA%97%E7%BD%AA208%E9%A1%B5.pdf/img-0008.jpg" -O test.json

说明

-O test.json: 指定输出的文件名称,默认在当前路径下

  • test.json,文件如下:

  • 命令行示例如下:

方法二

浏览器直接访问

  • 在浏览器搜索框中,输入要访问的地址
  • 前提要求:1)图片必须在服务器上, 2)linux系统
  • 示例如下(nju-vm=192.168.68.38)
http://nju-vm:5678/?path=/usr/local/src/data/doc_imgs/2014%E4%B8%9C%E5%88%91%E5%88%9D%E5%AD%97%E7%AC%AC0100%E5%8F%B7_%E8%AF%88%E9%AA%97%E7%BD%AA208%E9%A1%B5.pdf/img-0008.jpg

http://192.168.68.38:5678/?path=/usr/local/src/data/doc_imgs/2014东刑初字第0100号_诈骗罪208页.pdf/img-0008.jpg
  • 演示结果如下

方法三

代码调用

  • 环境及编译器

    pycharm:pycharm2017.1

    python:python3.6.2

    tensorflow:tensorflow1.11.0

  • 代码入口

    找到single_char_processing.py:

    main文件数入口

    path:指定要测试的图片的路径

    Processor:传入相应的字的map, 标点符号的map,以及checkpoint, 还有字的大小,

    get_text_result: 返回要测试的文件,其中含有辅助标记

    • 选了几个测试图片

方法四

调用docker

存放位置

ssh root@nju-vm

/usr/local/src/ocr-service.tar

docker配置

 OCR-NJU:
1.SSH登录,密码123

ssh –p 233 root@nju-vm

(此处nju-vm就是之前小组备忘录里面配好的192.168.68.38,如果没配,可以直接替换nju-vm为ip地址

然后开了两个空闲端口555,666`
  • 将项目的文件夹git clone了一下
  • 改了app.py的端口为555
  • 将checkpoint等文件存放了进去
  • 选了几张测试图片放了进去
  • 上传到微云

  • 具体部署见下图

具体内容

项目摘要

  • 提出了一种数据生成的方法

  • 又分为汉字,数字字母,标点符号

    1. 生成64*64的画布
    2. 字体大小:[20, 48]
    3. 高斯模糊
    4. 平移
    5. 噪点(黑噪点,白噪点)
    6. 缩放
    7. 边缘补齐
    8. 随机旋转
    9. 淡化
    10. 笔画粗细
    11. 二值化
    12. 腐蚀
    

image-20200313102935189

  • 训练集:1000*4900
  • 测试集:100*4900

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦