目录总览
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. 腐蚀
- 训练集:1000*4900
- 测试集:100*4900