PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
44.39k stars 7.83k forks source link

文本检测 + 文本识别 + 语义实体识别(SER)。这三部可以一次完成吗?还是要先文本检测 + 文本识别的到结果文件。再传给ser预测呢? #9238

Closed rexzhengzhihong closed 1 year ago

rexzhengzhihong commented 1 year ago

请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_zzszyfp_zh.yml -o \
Architecture.Backbone.checkpoints=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/ser/output/ser_vi_layoutxlm_zzszyfp_zh/best_accuracy \
Global.infer_img=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/det_dec_imgsresult/system_results.json \
Global.infer_mode=False
Traceback (most recent call last):
  File "/home/DiskA/PycharmProjects/PaddleOCR-release-2.6/tools/infer_kie_token_ser.py", line 147, in <module>
    result, _ = ser_engine(data)
  File "/home/DiskA/PycharmProjects/PaddleOCR-release-2.6/tools/infer_kie_token_ser.py", line 106, in __call__
    batch = transform(data, self.ops)
  File "/home/DiskA/PycharmProjects/PaddleOCR-release-2.6/ppocr/data/imaug/__init__.py", line 56, in transform
    data = op(data)
  File "/home/DiskA/PycharmProjects/PaddleOCR-release-2.6/ppocr/data/imaug/label_ops.py", line 1092, in __call__
    label = info['label']
KeyError: 'label'
python-BaseException

system_results.json 中确实没有label字段。这个文件是通过文本检测 + 文本识别 生成的。需要怎么处理呢??? 如果要 文本检测 + 文本识别 + 语义实体识别(SER) 可以一次性预测吗???

andyjiang1116 commented 1 year ago

可以继续端到端预测 参考文档 https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/ppstructure/kie/README_ch.md#422-%E5%9F%BA%E4%BA%8E%E5%8A%A8%E6%80%81%E5%9B%BE%E7%9A%84%E9%A2%84%E6%B5%8B

rexzhengzhihong commented 1 year ago

这个吗?这个我再2.6分支的文档里没找到,paddleocr需要切换到最新分支吗? image

andyjiang1116 commented 1 year ago

2.6分支也有的

# 仅预测SER模型
python3 tools/infer_kie_token_ser.py \
  -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \
  -o Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy \
  Global.infer_img=./ppstructure/docs/kie/input/zh_val_42.jpg
rexzhengzhihong commented 1 year ago

结果有点问题。标注结果差的有点多,怎么查看是在哪里出的问题?文字检测+识别 这步测试没问题

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_zzszyfp_zh.yml  -o \
Architecture.Backbone.checkpoints=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/ser/output/ser_vi_layoutxlm_zzszyfp_zh/best_accuracy \
Global.infer_img=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/uie_imgs/zzszyfp.jpg \
Global.infer_mode=True \
Global.kie_rec_model_dir=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/rec/inference/ch_PP-OCRv3_rec_infer \
Global.kie_det_model_dir=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/det/inference/det_db_inference_dml_dml_1000/Student

image

rexzhengzhihong commented 1 year ago

这是我测试文本检车+识别的。得到的txt文件的准确率还是蛮高的

python3 tools/infer/predict_system.py \
--image_dir="/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/det_dec_imgs/zzszyfp.jpg" \
--det_model_dir="/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/det/inference/det_db_inference_dml_dml_1000/Student/" \
--det_limit_side_len=736 \
--det_limit_type="min" \
--rec_model_dir="/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/rec/inference/ch_PP-OCRv3_rec_infer/" \
--rec_image_shape="3,48,320" \
--rec_char_dict_path="ppocr/utils/ppocr_keys_v1.txt" \
--draw_img_save_dir="/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/det_dec_imgsresult/" \
--use_space_char=True \
--use_angle_cls=False
rexzhengzhihong commented 1 year ago

@andyjpaddle

rexzhengzhihong commented 1 year ago

通过文本检测+识别 预测得到的system_results.txt文件。传到到ser模型里预测。得到的效果也没问题的。

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_zzszyfp_zh.yml -o \
Architecture.Backbone.checkpoints=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/ser/output/ser_vi_layoutxlm_zzszyfp_zh/best_accuracy \
Global.infer_img=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/det_dec_imgsresult/system_results.txt \
Global.infer_mode=False
rexzhengzhihong commented 1 year ago

为什么端到端的会有问题呢

andyjiang1116 commented 1 year ago

可以debug看下端到端测试中的检测和识别结果和单独检测识别有啥出入

rexzhengzhihong commented 1 year ago

端到端 的怎么看每一步的结果?

rexzhengzhihong commented 1 year ago

debug看不到 端到端测试中的检测和识别结果。麻烦指导下,感谢 @andyjpaddle

rexzhengzhihong commented 1 year ago

image 找到了,怎么看原因呢?

rexzhengzhihong commented 1 year ago

txt_detector 中没有可以设置--det_limit_side_len=736 --det_limit_type="min" 值的地方吗?猜测是不是文字检测出了问题 image

tink2123 commented 1 year ago

检测模型是自己训练的吗? 看命令在推理时需要修改参数:--det_limit_side_len=736 --det_limit_type="min" , 使用ser端到端推理时,检测参数是默认的 --det_limit_side_len=960 --det_limit_type='max',肯定会影响检测效果。

目前这个接口没有在命令行暴露出来,可以从源码中修改后处理参数值,https://github.com/PaddlePaddle/PaddleOCR/blob/b2781efacd5587025fb1168ed2b2df1d9d0d6e9d/tools/infer_kie_token_ser.py#L75

rexzhengzhihong commented 1 year ago

模型是自己训练的。参数改了是变了。但是检测效果还是一样的,看不出什么原因 image

image

rexzhengzhihong commented 1 year ago

text_detector下是不是得有一个det_limit_side_len才有用?现在是在text_detector.args下有改 image

rexzhengzhihong commented 1 year ago

@tink2123

rexzhengzhihong commented 1 year ago

我把det步骤的参数都贴出来。不一样的有 image image image image

tink2123 commented 1 year ago

去掉clas模型试试

rexzhengzhihong commented 1 year ago

好像去掉了 image

rexzhengzhihong commented 1 year ago

好像设置关闭没效果?

rexzhengzhihong commented 1 year ago

@tink2123

rexzhengzhihong commented 1 year ago

dir好像都改不了。 image

rexzhengzhihong commented 1 year ago

好像自己训练的模型不能用在端对端。我把默认改成ch_PP-OCRv3 默认的。都能识别出一些东西

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_zzszyfp_zh.yml  -o \
Architecture.Backbone.checkpoints=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/ser/output/ser_vi_layoutxlm_zzszyfp_zh/best_accuracy \
Global.infer_img=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/uie_imgs/zzszyfp.jpg \
Global.infer_mode=True \
Global.kie_rec_model_dir=/home/onez/.paddleocr/whl/rec/ch/ch_PP-OCRv3_rec_infer \
Global.kie_det_model_dir=/home/onez/.paddleocr/whl/det/ch/ch_PP-OCRv3_det_infer
rexzhengzhihong commented 1 year ago

@tink2123 @andyjpaddle

rexzhengzhihong commented 1 year ago

你好。端到端的这种怎么服务部署呢?

rexzhengzhihong commented 1 year ago

有文档参考吗

cola2023 commented 1 year ago

好像自己训练的模型不能用在端对端。我把默认改成ch_PP-OCRv3 默认的。都能识别出一些东西

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_zzszyfp_zh.yml  -o \
Architecture.Backbone.checkpoints=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/model/ser/output/ser_vi_layoutxlm_zzszyfp_zh/best_accuracy \
Global.infer_img=/home/DiskA/zncsPython/picture_ocr/zzszyfp_v1/test/uie_imgs/zzszyfp.jpg \
Global.infer_mode=True \
Global.kie_rec_model_dir=/home/onez/.paddleocr/whl/rec/ch/ch_PP-OCRv3_rec_infer \
Global.kie_det_model_dir=/home/onez/.paddleocr/whl/det/ch/ch_PP-OCRv3_det_infer

KeyError: 'label'

您好,您这个 KeyError: 'label'是怎么解决的,是改的代码吗?

cola2023 commented 1 year ago

端到端是可以使用自己训练的det模型的,我自己训练的DB算法的是可以正常使用,但是我训练的DB++的就完全使用不了的,就算指定了感觉差不多的参数也不可以使用。您现在是这些问题都解决了吗?可否给些指导。

rexzhengzhihong commented 1 year ago

kie_rec_model_dir

我是用DB

cola2023 commented 1 year ago

kie_rec_model_dir

我是用DB

是增加这个参数就可以解决 KeyError: 'label'的问题吗?

Johann356 commented 1 year ago

为什么端到端的会有问题呢

paddleocr.py中484行左右的几个maybedownload注释掉就好了