openocr-python 0.1.0.dev4__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openocr_python-0.1.0.dev4/openocr_python.egg-info → openocr_python-0.1.2}/PKG-INFO +2 -2
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/QUICKSTART.md +1 -1
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/__init__.py +1 -1
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/demo_gradio.py +91 -17
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/demo_opendoc.py +25 -19
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/demo_unirec.py +98 -20
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_det.py +46 -16
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_e2e.py +9 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_rec.py +55 -16
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2/openocr_python.egg-info}/PKG-INFO +2 -2
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/SOURCES.txt +0 -1
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/pyproject.toml +1 -1
- openocr_python-0.1.0.dev4/openocr/tools/utils/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/LICENSE +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/MANIFEST.in +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/evaluation.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/ltb.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/mjsynth.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/openvino.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/ost.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/synthtext.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/test.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/textocr.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/textocr_horizontal.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/union14m_b.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/union14m_l_filtered.yaml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/det/dbnet/repvit_db.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/resnet45_trans_abinet_lang.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/resnet45_trans_abinet_wo_lang.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/svtrv2_abinet_lang.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/svtrv2_abinet_wo_lang.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/aster/resnet31_lstm_aster_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/aster/svtrv2_aster.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/aster/svtrv2_aster_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/autostr/autostr_lstm_aster_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/svtrv2_busnet.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/svtrv2_busnet_pretraining.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/vit_busnet.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/vit_busnet_pretraining.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cam/convnextv2_cam_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cam/convnextv2_tiny_cam_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cam/svtrv2_cam_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cdistnet/resnet45_trans_cdistnet.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cdistnet/svtrv2_cdistnet.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cmer/cmer.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd_ch.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd_h8.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd_syn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtrv2_cppd.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/dan/resnet45_fpn_dan.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/dan/svtrv2_dan.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/dptr/dptr_parseq_pretrain.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/focalsvtr/focalsvtr_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_nrtr_gtc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_smtr_gtc_long_infer.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_smtr_gtc_smtr_long.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_smtr_gtc_stream.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/igtr/svtr_base_ds_igtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lister/focalsvtr_lister_wo_fem_maxratio12.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lister/svtrv2_lister_wo_fem_maxratio12.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtr_base_lpv.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtr_base_lpv_wo_glrm.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtrv2_lpv.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtrv2_lpv_wo_glrm.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/maerec/vit_nrtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/matrn/resnet45_trans_matrn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/matrn/svtrv2_matrn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mdiff4str/svtrv2_mdiffdecoder_base.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mdiff4str/svtrv2_mdiffdecoder_small.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/svtrv2_mgpstr_only_char.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_base_mgpstr_only_char.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_large_mgpstr_only_char.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_mgpstr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_mgpstr_only_char.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/moran/resnet31_lstm_moran.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/focalsvtr_nrtr_maxraio12.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/nrtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/svtr_base_nrtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/svtr_base_nrtr_syn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/svtrv2_nrtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/ote/svtr_base_h8_ote.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/ote/svtr_base_ote.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/parseq/focalsvtr_parseq_maxratio12.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/parseq/svrtv2_parseq.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/parseq/vit_parseq.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/robustscanner/resnet31_robustscanner.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/robustscanner/svtrv2_robustscanner.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/sar/resnet31_lstm_sar.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/sar/svtrv2_sar.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/seed/resnet31_lstm_seed_tps_on.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/focalsvtr_smtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/focalsvtr_smtr_long.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/svtrv2_smtr.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/svtrv2_smtr_bi.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/srn/resnet50_fpn_srn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/srn/svtrv2_srn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_h8_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_h8_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_tiny_h8_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_tiny_h8_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/crnn_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/crnn_ctc_long.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalnet_base_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalnet_base_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalsvtr_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalsvtr_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/resnet45_trans_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/resnet45_trans_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/svtr_base_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/svtr_base_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/svtrnet_ctc_syn.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/vit_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/vit_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/repsvtr_ch.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_ch.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_ctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_small_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_smtr_gtc_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_smtr_gtc_rctc_ch.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_smtr_gtc_rctc_infer.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_tiny_rctc.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/unirec/focalsvtr_ardecoder_unirec.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/unirec/opendoc_pipeline.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/resnet45_trans_visionlan_LA.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/resnet45_trans_visionlan_LF_1.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/resnet45_trans_visionlan_LF_2.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/svtrv2_visionlan_LA.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/svtrv2_visionlan_LF_1.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/svtrv2_visionlan_LF_2.yml +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/losses/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/losses/db_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/losses/det_basic_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/metrics/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/metrics/det_metric.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/metrics/eval_det_iou.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/backbones/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/backbones/repvit.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/base_detector.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/heads/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/heads/db_head.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/necks/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/necks/db_fpn.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/postprocess/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/postprocess/db_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/crop_paste.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/crop_resize.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/db_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/db_resize_for_test.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/iaa_augment.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openocr.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/abinet_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/ar_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cam_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cdistnet_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/ce_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cmer_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cppd_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/ctc_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/igtr_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/lister_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/lpv_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/mdiff_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/mgp_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/parseq_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/robustscanner_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/seed_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/smtr_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/srn_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/unirec_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/visionlan_loss.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_cmer.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_gtc.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_long.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_mgp.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/base_recognizer.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/cmer_modeling/modeling_cmer.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/common.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/abinet_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/aster_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/bus_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/cam_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/cdistnet_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/cppd_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/ctc_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/dan_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/dptr_parseq_clip_b_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/igtr_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/lister_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/lpv_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/matrn_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/mdiff_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/mgp_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/nrtr_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/ote_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/parseq_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/rctc_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/robustscanner_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/sar_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/smtr_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/smtr_decoder_nattn.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/srn_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/visionlan_decoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/autostr_encoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/cam_encoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/convnextv2.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/focalsvtr.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/nrtr_encoder.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_hgnet.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_lcnetv3.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_mobilenet_v3.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_mv1_enhance.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_nrtr_mtb.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_31.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_45.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_fpn.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_vd.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/repvit.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/resnet31_rnn.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrnet.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrnet2dpos.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrv2.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrv2_lnconv.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrv2_lnconv_two33.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/vit.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/aster_tps.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/moran.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/tps.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/unirec_modeling/configuration_unirec.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/unirec_modeling/modeling_unirec.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/optimizer/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/optimizer/lr.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/abinet_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/ar_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/ce_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/char_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/cmer_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/cppd_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/ctc_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/igtr_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/lister_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/mgp_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/nrtr_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/smtr_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/srn_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/unirec_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/visionlan_postprocess.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/abinet_aug.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/abinet_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ar_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/auto_augment.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/cam_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ce_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/char_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/cmer_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/cppd_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ctc_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/dptr_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ep_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/igtr_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/mdiff_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/mgp_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/parseq_aug.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/rec_aug.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/resize.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/smtr_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/srn_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/unirec_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/visionlan_label_encode.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/create_lmdb_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/cmer_web_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/collate_fn.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/lmdb_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/lmdb_dataset_test.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/multi_scale_sampler.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/native_size_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/native_size_sampler.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset_test.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset_tvresize.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset_tvresize_test.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_sampler.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/simple_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/strlmdb_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/text_lmdb_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/download/download_dataset.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/download/utils.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/download_example_images.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/engine/config.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/engine/trainer.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_det.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_ch.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_en.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_long.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_long_simple.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/export_rec.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer/onnx_engine.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer/predict_rec.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer/utility.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_doc.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_doc_onnx.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_e2e_parallel.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_unirec_onnx.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/to_markdown.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/toonnx.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/train_det.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/train_rec.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utility.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/EN_symbol_dict.txt +0 -0
- {openocr_python-0.1.0.dev4/openocr/tools → openocr_python-0.1.2/openocr/tools/utils}/__init__.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/ckpt.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ar_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/arabic_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/be_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/bg_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/chinese_cht_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/cyrillic_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/devanagari_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/en_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/fa_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/french_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/german_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/hi_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/it_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/japan_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ka_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/kie_dict/xfund_class_list.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/korean_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/latex_symbol_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/latin_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/layout_dict/layout_cdla_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/layout_dict/layout_publaynet_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/layout_dict/layout_table_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/mr_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ne_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/oc_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/pu_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/rs_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/rsc_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ru_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/spin_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ta_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_master_structure_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_structure_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_structure_dict_ch.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/te_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ug_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/uk_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ur_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/xi_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict90.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_metric/Deteval.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_metric/polygon_fast.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/extract_batchsize.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/visual.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/en_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/gen_label.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/ic15_dict.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/logging.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/opendoc_onnx_utils/utils.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/poly_nms.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/ppocr_keys_v1.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/stats.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/utility.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/visual.py +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/dependency_links.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/entry_points.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/not-zip-safe +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/requires.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/top_level.txt +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/setup.cfg +0 -0
- {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openocr-python
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Accurate and Efficient General OCR System
|
|
5
5
|
Home-page: https://github.com/Topdu/OpenOCR
|
|
6
6
|
Author: OCR Team, FVL Lab
|
|
@@ -75,7 +75,7 @@ Visit: https://github.com/Topdu/OpenOCR
|
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
77
|
# Install from PyPI (recommended)
|
|
78
|
-
pip install openocr-python==0.1.
|
|
78
|
+
pip install openocr-python==0.1.2
|
|
79
79
|
|
|
80
80
|
# Or install from source
|
|
81
81
|
git clone https://github.com/Topdu/OpenOCR.git
|
|
@@ -13,7 +13,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(__dir__, '..')))
|
|
|
13
13
|
# from .tools.infer_doc_onnx import OpenDocONNX
|
|
14
14
|
from .openocr import OpenOCR, main
|
|
15
15
|
|
|
16
|
-
__version__ = '0.1.
|
|
16
|
+
__version__ = '0.1.1'
|
|
17
17
|
|
|
18
18
|
# Lazy import for demo interfaces to avoid initialization on import
|
|
19
19
|
def launch_openocr_demo(*args, **kwargs):
|
|
@@ -127,13 +127,88 @@ def launch_demo(share=False, server_port=7860, server_name='0.0.0.0'):
|
|
|
127
127
|
Returns:
|
|
128
128
|
gr.Blocks: Gradio demo instance
|
|
129
129
|
"""
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
custom_css = """
|
|
131
|
+
body, .gradio-container {
|
|
132
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
|
|
133
|
+
}
|
|
134
|
+
.app-header {
|
|
135
|
+
text-align: center;
|
|
136
|
+
max-width: 1200px;
|
|
137
|
+
margin: 20px auto !important;
|
|
138
|
+
padding: 20px;
|
|
139
|
+
}
|
|
140
|
+
.app-header h1 {
|
|
141
|
+
font-size: 2.5em;
|
|
142
|
+
font-weight: 700;
|
|
143
|
+
margin-bottom: 10px;
|
|
144
|
+
}
|
|
145
|
+
.app-header p {
|
|
146
|
+
font-size: 1.1em;
|
|
147
|
+
opacity: 0.7;
|
|
148
|
+
line-height: 1.6;
|
|
149
|
+
}
|
|
150
|
+
.quick-links {
|
|
151
|
+
text-align: center;
|
|
152
|
+
padding: 12px 0;
|
|
153
|
+
border: 1px solid var(--border-color-primary);
|
|
154
|
+
border-radius: 12px;
|
|
155
|
+
margin: 16px auto;
|
|
156
|
+
max-width: 1200px;
|
|
157
|
+
background: var(--background-fill-secondary);
|
|
158
|
+
}
|
|
159
|
+
.quick-links a {
|
|
160
|
+
margin: 0 16px;
|
|
161
|
+
font-size: 15px;
|
|
162
|
+
font-weight: 600;
|
|
163
|
+
color: var(--link-text-color);
|
|
164
|
+
text-decoration: none;
|
|
165
|
+
transition: all 0.3s ease;
|
|
166
|
+
}
|
|
167
|
+
.quick-links a:hover {
|
|
168
|
+
opacity: 0.8;
|
|
169
|
+
text-decoration: underline;
|
|
170
|
+
}
|
|
171
|
+
.image-container img {
|
|
172
|
+
max-width: 100%;
|
|
173
|
+
max-height: 480px;
|
|
174
|
+
width: auto;
|
|
175
|
+
height: auto;
|
|
176
|
+
object-fit: contain;
|
|
177
|
+
display: block;
|
|
178
|
+
margin: 0 auto;
|
|
179
|
+
}
|
|
180
|
+
.upload-section {
|
|
181
|
+
border: 2px dashed var(--border-color-primary);
|
|
182
|
+
border-radius: 12px;
|
|
183
|
+
padding: 20px;
|
|
184
|
+
background: var(--background-fill-secondary);
|
|
185
|
+
transition: all 0.3s ease;
|
|
186
|
+
}
|
|
187
|
+
.upload-section:hover {
|
|
188
|
+
border-color: var(--color-accent);
|
|
189
|
+
background: var(--background-fill-primary);
|
|
190
|
+
}
|
|
191
|
+
.gradio-button-primary {
|
|
192
|
+
font-weight: 600 !important;
|
|
193
|
+
transition: all 0.3s ease !important;
|
|
194
|
+
}
|
|
195
|
+
.gradio-button-primary:hover {
|
|
196
|
+
transform: translateY(-2px);
|
|
197
|
+
box-shadow: var(--shadow-drop-lg) !important;
|
|
198
|
+
}
|
|
199
|
+
"""
|
|
200
|
+
|
|
201
|
+
with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
|
|
133
202
|
gr.HTML("""
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
203
|
+
<div class="app-header">
|
|
204
|
+
<h1><a href="https://github.com/Topdu/OpenOCR">OpenOCR</a></h1>
|
|
205
|
+
<p>Accurate and Efficient General OCR System (built by <a href="https://fvl.fudan.edu.cn">FVL Lab</a> <a href="https://github.com/Topdu/OpenOCR">OCR Team</a>)</p>
|
|
206
|
+
</div>
|
|
207
|
+
<div class="quick-links">
|
|
208
|
+
<a href="https://github.com/Topdu/OpenOCR" target="_blank">📖 GitHub</a>
|
|
209
|
+
<a href="https://github.com/Topdu/OpenOCR/tree/main?tab=readme-ov-file#quick-start" target="_blank">🚀 Quick Start</a>
|
|
210
|
+
</div>
|
|
211
|
+
""")
|
|
137
212
|
with gr.Row():
|
|
138
213
|
with gr.Column(scale=1):
|
|
139
214
|
input_image = gr.Image(label='Input image',
|
|
@@ -142,21 +217,21 @@ def launch_demo(share=False, server_port=7860, server_name='0.0.0.0'):
|
|
|
142
217
|
examples = gr.Examples(examples=e2e_img_example,
|
|
143
218
|
inputs=input_image,
|
|
144
219
|
label='Examples')
|
|
145
|
-
downstream = gr.Button('🚀
|
|
220
|
+
downstream = gr.Button('🚀 Run Recognition', variant='primary')
|
|
146
221
|
|
|
147
|
-
#
|
|
222
|
+
# Parameter adjustment components
|
|
148
223
|
with gr.Column():
|
|
149
224
|
with gr.Row():
|
|
150
225
|
det_input_size_textbox = gr.Number(
|
|
151
226
|
label='Detection Input Size',
|
|
152
227
|
value=960,
|
|
153
|
-
|
|
228
|
+
info='Max side length of detection input, default 960.')
|
|
154
229
|
det_score_mode_dropdown = gr.Dropdown(
|
|
155
230
|
['slow', 'fast'],
|
|
156
231
|
value='slow',
|
|
157
232
|
label='Detection Score Mode',
|
|
158
|
-
|
|
159
|
-
'
|
|
233
|
+
info=
|
|
234
|
+
'Confidence score mode for text boxes, default slow. Slow mode is more accurate but slower. Fast mode is faster but less accurate.'
|
|
160
235
|
)
|
|
161
236
|
with gr.Row():
|
|
162
237
|
rec_drop_score_slider = gr.Slider(
|
|
@@ -165,14 +240,14 @@ def launch_demo(share=False, server_port=7860, server_name='0.0.0.0'):
|
|
|
165
240
|
value=0.4,
|
|
166
241
|
step=0.01,
|
|
167
242
|
label='Recognition Drop Score',
|
|
168
|
-
|
|
243
|
+
info='Recognition confidence threshold, default 0.4. Results below this threshold will be discarded.')
|
|
169
244
|
mask_thresh_slider = gr.Slider(
|
|
170
245
|
0.0,
|
|
171
246
|
1.0,
|
|
172
247
|
value=0.3,
|
|
173
248
|
step=0.01,
|
|
174
249
|
label='Mask Threshold',
|
|
175
|
-
|
|
250
|
+
info='Mask threshold for binarization, default 0.3. Lower this value if text is truncated.')
|
|
176
251
|
with gr.Row():
|
|
177
252
|
box_thresh_slider = gr.Slider(
|
|
178
253
|
0.0,
|
|
@@ -180,21 +255,20 @@ def launch_demo(share=False, server_port=7860, server_name='0.0.0.0'):
|
|
|
180
255
|
value=0.6,
|
|
181
256
|
step=0.01,
|
|
182
257
|
label='Box Threshold',
|
|
183
|
-
|
|
258
|
+
info='Text box confidence threshold, default 0.6. Lower this value if text boxes are missed.')
|
|
184
259
|
unclip_ratio_slider = gr.Slider(
|
|
185
260
|
1.5,
|
|
186
261
|
2.0,
|
|
187
262
|
value=1.5,
|
|
188
263
|
step=0.05,
|
|
189
264
|
label='Unclip Ratio',
|
|
190
|
-
|
|
265
|
+
info='Expansion ratio for text box parsing, default 1.5. Larger values produce larger text boxes.')
|
|
191
266
|
|
|
192
|
-
# 模型选择组件
|
|
193
267
|
model_type_dropdown = gr.Dropdown(
|
|
194
268
|
['mobile', 'server'],
|
|
195
269
|
value='mobile',
|
|
196
270
|
label='Model Type',
|
|
197
|
-
info='
|
|
271
|
+
info='Select OCR model type: mobile for efficiency, server for accuracy.')
|
|
198
272
|
|
|
199
273
|
with gr.Column(scale=1):
|
|
200
274
|
img_mask = gr.Image(label='mask',
|
|
@@ -8,11 +8,9 @@ import gradio as gr
|
|
|
8
8
|
from PIL import Image
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
|
|
11
|
-
import
|
|
12
|
-
|
|
13
|
-
from
|
|
14
|
-
from .tools.utils.logging import get_logger
|
|
15
|
-
from .tools.download_example_images import get_example_images_path
|
|
11
|
+
from tools.infer_doc_onnx import OpenDocONNX
|
|
12
|
+
from tools.utils.logging import get_logger
|
|
13
|
+
from tools.download_example_images import get_example_images_path
|
|
16
14
|
|
|
17
15
|
logger = get_logger(name='opendoc_gradio')
|
|
18
16
|
|
|
@@ -28,18 +26,18 @@ def get_pipeline(
|
|
|
28
26
|
use_gpu=None,
|
|
29
27
|
auto_download=True
|
|
30
28
|
) -> OpenDocONNX:
|
|
31
|
-
"""
|
|
29
|
+
"""Get or initialize OpenDocONNX pipeline.
|
|
32
30
|
|
|
33
31
|
Args:
|
|
34
|
-
layout_model_path:
|
|
35
|
-
unirec_encoder_path: UniRec
|
|
36
|
-
unirec_decoder_path: UniRec
|
|
37
|
-
tokenizer_mapping_path:
|
|
32
|
+
layout_model_path: Path to layout detection ONNX model.
|
|
33
|
+
unirec_encoder_path: Path to UniRec encoder ONNX model.
|
|
34
|
+
unirec_decoder_path: Path to UniRec decoder ONNX model.
|
|
35
|
+
tokenizer_mapping_path: Path to tokenizer mapping file.
|
|
38
36
|
use_gpu: Whether to use GPU. If None, auto-detect.
|
|
39
|
-
auto_download: If True, automatically download missing models
|
|
37
|
+
auto_download: If True, automatically download missing models.
|
|
40
38
|
|
|
41
39
|
Returns:
|
|
42
|
-
OpenDocONNX:
|
|
40
|
+
OpenDocONNX: Initialized OpenDocONNX instance.
|
|
43
41
|
"""
|
|
44
42
|
global pipeline
|
|
45
43
|
if pipeline is None:
|
|
@@ -63,13 +61,13 @@ current_pipeline = None
|
|
|
63
61
|
def process_image(
|
|
64
62
|
image_path: str | None
|
|
65
63
|
) -> tuple[Image.Image | None, str, str, str | None, str, str]:
|
|
66
|
-
"""
|
|
64
|
+
"""Process image and perform OCR recognition.
|
|
67
65
|
|
|
68
66
|
Args:
|
|
69
|
-
image_path:
|
|
67
|
+
image_path: Image file path, None if no image.
|
|
70
68
|
|
|
71
69
|
Returns:
|
|
72
|
-
tuple: (
|
|
70
|
+
tuple: (visualization image, Markdown content with base64 images, JSON content, ZIP file path, raw Markdown)
|
|
73
71
|
"""
|
|
74
72
|
global current_pipeline
|
|
75
73
|
|
|
@@ -271,10 +269,18 @@ body, .gradio-container {
|
|
|
271
269
|
background: var(--background-fill-primary);
|
|
272
270
|
}
|
|
273
271
|
#vis_output {
|
|
274
|
-
min-height: 400px;
|
|
275
272
|
border-radius: 12px;
|
|
276
273
|
overflow: hidden;
|
|
277
274
|
}
|
|
275
|
+
.image-container img, #vis_output img {
|
|
276
|
+
max-width: 100%;
|
|
277
|
+
max-height: 480px;
|
|
278
|
+
width: auto;
|
|
279
|
+
height: auto;
|
|
280
|
+
object-fit: contain;
|
|
281
|
+
display: block;
|
|
282
|
+
margin: 0 auto;
|
|
283
|
+
}
|
|
278
284
|
#md_preview {
|
|
279
285
|
max-height: 600px;
|
|
280
286
|
min-height: 200px;
|
|
@@ -349,10 +355,10 @@ LATEX_DELIMS = [
|
|
|
349
355
|
|
|
350
356
|
# Define the Gradio Interface
|
|
351
357
|
def create_demo() -> gr.Blocks:
|
|
352
|
-
"""
|
|
358
|
+
"""Create Gradio demo interface.
|
|
353
359
|
|
|
354
360
|
Returns:
|
|
355
|
-
gr.Blocks: Gradio Blocks
|
|
361
|
+
gr.Blocks: Gradio Blocks application instance.
|
|
356
362
|
"""
|
|
357
363
|
# Get example images path and download if necessary
|
|
358
364
|
example_img_dir = get_example_images_path(demo_type='doc')
|
|
@@ -388,7 +394,7 @@ def create_demo() -> gr.Blocks:
|
|
|
388
394
|
with gr.Column(scale=4, elem_classes=['upload-section']):
|
|
389
395
|
input_img = gr.Image(type='filepath',
|
|
390
396
|
label='📤 Upload Document Image',
|
|
391
|
-
|
|
397
|
+
elem_classes=['image-container'])
|
|
392
398
|
|
|
393
399
|
# Add examples if available
|
|
394
400
|
if example_images:
|
|
@@ -12,7 +12,7 @@ from tools.infer_unirec_onnx import UniRecONNX, clean_special_tokens
|
|
|
12
12
|
from tools.download_example_images import get_example_images_path
|
|
13
13
|
from tools.to_markdown import MarkdownConverter
|
|
14
14
|
|
|
15
|
-
#
|
|
15
|
+
# Create global markdown_converter instance
|
|
16
16
|
markdown_converter = MarkdownConverter()
|
|
17
17
|
|
|
18
18
|
# LaTeX delimiters for formula rendering
|
|
@@ -81,7 +81,7 @@ def stream_recognize_image(input_image, max_length=2048):
|
|
|
81
81
|
max_length: Maximum generation length
|
|
82
82
|
"""
|
|
83
83
|
if input_image is None:
|
|
84
|
-
yield '
|
|
84
|
+
yield 'Please upload an image first.', '**Please upload an image first.**'
|
|
85
85
|
return
|
|
86
86
|
|
|
87
87
|
# Convert to PIL Image if needed
|
|
@@ -138,7 +138,7 @@ def stream_recognize_image(input_image, max_length=2048):
|
|
|
138
138
|
current_text = model.tokenizer.decode(generated_ids[-1:], skip_special_tokens=False)
|
|
139
139
|
cleaned_text += clean_special_tokens(current_text)
|
|
140
140
|
|
|
141
|
-
yield cleaned_text, '_
|
|
141
|
+
yield cleaned_text, '_Recognizing, please wait..._'
|
|
142
142
|
|
|
143
143
|
# Check for EOS
|
|
144
144
|
if next_token_id == eos_token_id:
|
|
@@ -149,7 +149,7 @@ def stream_recognize_image(input_image, max_length=2048):
|
|
|
149
149
|
formatted_result = format_markdown_output(cleaned_text)
|
|
150
150
|
yield formatted_result, formatted_result
|
|
151
151
|
else:
|
|
152
|
-
yield '
|
|
152
|
+
yield 'Recognition failed, please try again.', '**Recognition failed, please try again.**'
|
|
153
153
|
|
|
154
154
|
|
|
155
155
|
def format_markdown_output(markdown_text):
|
|
@@ -161,7 +161,7 @@ def format_markdown_output(markdown_text):
|
|
|
161
161
|
- Basic markdown formatting
|
|
162
162
|
"""
|
|
163
163
|
if not markdown_text:
|
|
164
|
-
return '_
|
|
164
|
+
return '_Waiting for recognition results..._'
|
|
165
165
|
if '<table>' in markdown_text:
|
|
166
166
|
markdown_text = markdown_converter._handle_table(markdown_text)
|
|
167
167
|
if '\\(' in markdown_text or '\\[' in markdown_text:
|
|
@@ -192,28 +192,106 @@ def create_demo() -> gr.Blocks:
|
|
|
192
192
|
example_images.append(os.path.join(example_img_dir, file))
|
|
193
193
|
example_images = sorted(example_images)
|
|
194
194
|
|
|
195
|
-
|
|
195
|
+
custom_css = """
|
|
196
|
+
body, .gradio-container {
|
|
197
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
|
|
198
|
+
}
|
|
199
|
+
.app-header {
|
|
200
|
+
text-align: center;
|
|
201
|
+
max-width: 1200px;
|
|
202
|
+
margin: 20px auto !important;
|
|
203
|
+
padding: 20px;
|
|
204
|
+
}
|
|
205
|
+
.app-header h1 {
|
|
206
|
+
font-size: 2.5em;
|
|
207
|
+
font-weight: 700;
|
|
208
|
+
margin-bottom: 10px;
|
|
209
|
+
}
|
|
210
|
+
.app-header p {
|
|
211
|
+
font-size: 1.1em;
|
|
212
|
+
opacity: 0.7;
|
|
213
|
+
line-height: 1.6;
|
|
214
|
+
}
|
|
215
|
+
.quick-links {
|
|
216
|
+
text-align: center;
|
|
217
|
+
padding: 12px 0;
|
|
218
|
+
border: 1px solid var(--border-color-primary);
|
|
219
|
+
border-radius: 12px;
|
|
220
|
+
margin: 16px auto;
|
|
221
|
+
max-width: 1200px;
|
|
222
|
+
background: var(--background-fill-secondary);
|
|
223
|
+
}
|
|
224
|
+
.quick-links a {
|
|
225
|
+
margin: 0 16px;
|
|
226
|
+
font-size: 15px;
|
|
227
|
+
font-weight: 600;
|
|
228
|
+
color: var(--link-text-color);
|
|
229
|
+
text-decoration: none;
|
|
230
|
+
transition: all 0.3s ease;
|
|
231
|
+
}
|
|
232
|
+
.quick-links a:hover {
|
|
233
|
+
opacity: 0.8;
|
|
234
|
+
text-decoration: underline;
|
|
235
|
+
}
|
|
236
|
+
.upload-section {
|
|
237
|
+
border: 2px dashed var(--border-color-primary);
|
|
238
|
+
border-radius: 12px;
|
|
239
|
+
padding: 20px;
|
|
240
|
+
background: var(--background-fill-secondary);
|
|
241
|
+
transition: all 0.3s ease;
|
|
242
|
+
}
|
|
243
|
+
.upload-section:hover {
|
|
244
|
+
border-color: var(--color-accent);
|
|
245
|
+
background: var(--background-fill-primary);
|
|
246
|
+
}
|
|
247
|
+
.image-container img {
|
|
248
|
+
max-width: 100%;
|
|
249
|
+
max-height: 480px;
|
|
250
|
+
width: auto;
|
|
251
|
+
height: auto;
|
|
252
|
+
object-fit: contain;
|
|
253
|
+
display: block;
|
|
254
|
+
margin: 0 auto;
|
|
255
|
+
}
|
|
256
|
+
.gradio-button-primary {
|
|
257
|
+
font-weight: 600 !important;
|
|
258
|
+
transition: all 0.3s ease !important;
|
|
259
|
+
}
|
|
260
|
+
.gradio-button-primary:hover {
|
|
261
|
+
transform: translateY(-2px);
|
|
262
|
+
box-shadow: var(--shadow-drop-lg) !important;
|
|
263
|
+
}
|
|
264
|
+
"""
|
|
265
|
+
|
|
266
|
+
with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
|
|
196
267
|
gr.HTML("""
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
268
|
+
<div class="app-header">
|
|
269
|
+
<h1><a href="https://github.com/Topdu/OpenOCR">UniRec-0.1B</a></h1>
|
|
270
|
+
<p>Unified Text and Formula Recognition with 0.1B Parameters (built by <a href="https://fvl.fudan.edu.cn">FVL Lab</a> <a href="https://github.com/Topdu/OpenOCR">OCR Team</a>)</p>
|
|
271
|
+
</div>
|
|
272
|
+
<div class="quick-links">
|
|
273
|
+
<a href="https://github.com/Topdu/OpenOCR" target="_blank">📖 GitHub</a>
|
|
274
|
+
<a href="https://arxiv.org/pdf/2512.21095" target="_blank">📄 Paper</a>
|
|
275
|
+
<a href="https://huggingface.co/topdu/unirec-0.1b" target="_blank">🤗 Model</a>
|
|
276
|
+
<a href="https://github.com/Topdu/OpenOCR/blob/main/docs/unirec.md" target="_blank">🚀 Local GPU Deployment</a>
|
|
277
|
+
</div>
|
|
278
|
+
""")
|
|
279
|
+
gr.Markdown('Upload an image and click the "Run Recognition" button to recognize text and formulas.')
|
|
202
280
|
with gr.Row():
|
|
203
|
-
with gr.Column(scale=4): #
|
|
204
|
-
image_input = gr.Image(label='
|
|
281
|
+
with gr.Column(scale=4, elem_classes=['upload-section']): # Left column: image + buttons
|
|
282
|
+
image_input = gr.Image(label='Upload Image or Paste Screenshot', type='pil', elem_classes=['image-container'])
|
|
205
283
|
|
|
206
284
|
# Add examples if available
|
|
207
285
|
if example_images:
|
|
208
286
|
gr.Examples(
|
|
209
287
|
examples=example_images,
|
|
210
288
|
inputs=image_input,
|
|
211
|
-
|
|
289
|
+
label='📚 Example Images'
|
|
212
290
|
)
|
|
213
291
|
|
|
214
292
|
with gr.Row():
|
|
215
|
-
run_button = gr.Button('🚀
|
|
216
|
-
clear_button = gr.Button('🗑️
|
|
293
|
+
run_button = gr.Button('🚀 Run Recognition', variant='primary')
|
|
294
|
+
clear_button = gr.Button('🗑️ Clear', variant='secondary')
|
|
217
295
|
|
|
218
296
|
with gr.Column(scale=6):
|
|
219
297
|
with gr.Tabs():
|
|
@@ -223,20 +301,20 @@ def create_demo() -> gr.Blocks:
|
|
|
223
301
|
lines=20)
|
|
224
302
|
with gr.Tab('📝 Markdown Preview'):
|
|
225
303
|
markdown_render = gr.Markdown(
|
|
226
|
-
value='_
|
|
304
|
+
value='_Rendered tables/formulas will be displayed here..._',
|
|
227
305
|
latex_delimiters=LATEX_DELIMS,
|
|
228
306
|
elem_id='md_preview')
|
|
229
307
|
|
|
230
|
-
#
|
|
308
|
+
# Trigger recognition on button click
|
|
231
309
|
run_button.click(
|
|
232
310
|
stream_recognize_image,
|
|
233
311
|
inputs=[image_input],
|
|
234
312
|
outputs=[markdown_output, markdown_render]
|
|
235
313
|
)
|
|
236
314
|
|
|
237
|
-
#
|
|
315
|
+
# Clear button: reset image and output
|
|
238
316
|
def clear_all():
|
|
239
|
-
return None, '', '_
|
|
317
|
+
return None, '', '_Rendered tables/formulas will be displayed here..._'
|
|
240
318
|
|
|
241
319
|
clear_button.click(
|
|
242
320
|
clear_all,
|
|
@@ -35,11 +35,12 @@ DOWNLOAD_URL_DET_ONNX = 'https://github.com/Topdu/OpenOCR/releases/download/deve
|
|
|
35
35
|
|
|
36
36
|
def check_and_download_model(model_name: str, url: str):
|
|
37
37
|
"""
|
|
38
|
-
|
|
38
|
+
检查预训练模型是否存在,若不存在则从 ModelScope 或 HuggingFace 下载到固定缓存目录。
|
|
39
|
+
优先从 ModelScope 下载,失败后回退到 HuggingFace。
|
|
39
40
|
|
|
40
41
|
Args:
|
|
41
|
-
model_name (str): 模型文件的名称,例如 "
|
|
42
|
-
url (str):
|
|
42
|
+
model_name (str): 模型文件的名称,例如 "openocr_det_repvit_ch.pth"
|
|
43
|
+
url (str): 模型文件的下载地址(用于兼容,实际使用 ModelScope 和 HuggingFace)
|
|
43
44
|
|
|
44
45
|
Returns:
|
|
45
46
|
str: 模型文件的完整路径
|
|
@@ -56,31 +57,60 @@ def check_and_download_model(model_name: str, url: str):
|
|
|
56
57
|
logger.info(f'Model already exists at: {model_path}')
|
|
57
58
|
return str(model_path)
|
|
58
59
|
|
|
59
|
-
# 如果文件不存在,下载模型
|
|
60
|
-
logger.info(f'Model not found. Downloading from {url}...')
|
|
61
|
-
|
|
62
60
|
# 创建缓存目录(如果不存在)
|
|
63
61
|
cache_dir.mkdir(parents=True, exist_ok=True)
|
|
64
62
|
|
|
63
|
+
# 定义下载源
|
|
64
|
+
modelscope_repo = 'topdktu/OpenOCR'
|
|
65
|
+
huggingface_repo = 'topdu/OpenOCR'
|
|
66
|
+
|
|
67
|
+
# 尝试从 ModelScope 下载
|
|
68
|
+
logger.info(f'Model not found. Attempting to download from ModelScope...')
|
|
65
69
|
try:
|
|
66
|
-
|
|
67
|
-
import
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
from modelscope.hub.file_download import model_file_download
|
|
71
|
+
import shutil
|
|
72
|
+
downloaded_path = model_file_download(
|
|
73
|
+
model_id=modelscope_repo,
|
|
74
|
+
file_path=model_name,
|
|
75
|
+
cache_dir=str(cache_dir.parent)
|
|
76
|
+
)
|
|
77
|
+
# 复制文件到目标位置(处理符号链接)
|
|
78
|
+
if downloaded_path != str(model_path):
|
|
79
|
+
# 使用 copy2 而不是 move,确保复制实际文件内容
|
|
80
|
+
shutil.copy2(downloaded_path, str(model_path))
|
|
81
|
+
logger.info(f'Model downloaded from ModelScope and saved at: {model_path}')
|
|
72
82
|
return str(model_path)
|
|
83
|
+
except Exception as e:
|
|
84
|
+
logger.warning(f'Failed to download from ModelScope: {e}')
|
|
85
|
+
logger.info('Falling back to HuggingFace...')
|
|
73
86
|
|
|
87
|
+
# 回退到 HuggingFace
|
|
88
|
+
try:
|
|
89
|
+
from huggingface_hub import hf_hub_download
|
|
90
|
+
import shutil
|
|
91
|
+
downloaded_path = hf_hub_download(
|
|
92
|
+
repo_id=huggingface_repo,
|
|
93
|
+
filename=model_name,
|
|
94
|
+
cache_dir=str(cache_dir.parent)
|
|
95
|
+
)
|
|
96
|
+
# 复制文件到目标位置(HuggingFace 返回的可能是符号链接)
|
|
97
|
+
if downloaded_path != str(model_path):
|
|
98
|
+
# 使用 copy2 而不是 move,确保复制实际文件内容而不是符号链接
|
|
99
|
+
shutil.copy2(downloaded_path, str(model_path))
|
|
100
|
+
logger.info(f'Model downloaded from HuggingFace and saved at: {model_path}')
|
|
101
|
+
return str(model_path)
|
|
74
102
|
except Exception as e:
|
|
75
|
-
logger.error(f'
|
|
103
|
+
logger.error(f'Failed to download from HuggingFace: {e}')
|
|
76
104
|
# 提示用户手动下载
|
|
77
105
|
logger.error(
|
|
78
106
|
f'Unable to download the model automatically. '
|
|
79
|
-
f'Please download the model manually from
|
|
107
|
+
f'Please download the model manually from:\n'
|
|
108
|
+
f' ModelScope: https://modelscope.cn/models/{modelscope_repo}\n'
|
|
109
|
+
f' HuggingFace: https://huggingface.co/{huggingface_repo}\n'
|
|
80
110
|
f'and save it to: {model_name} or {model_path}')
|
|
81
111
|
raise RuntimeError(
|
|
82
|
-
f'Failed to download the model
|
|
83
|
-
f'and save it to {model_path}') from e
|
|
112
|
+
f'Failed to download the model from both ModelScope and HuggingFace. '
|
|
113
|
+
f'Please download it manually and save it to {model_path}') from e
|
|
84
114
|
|
|
85
115
|
|
|
86
116
|
def replace_batchnorm(net):
|
|
@@ -98,6 +98,15 @@ class OpenOCRE2E(object):
|
|
|
98
98
|
无返回值。
|
|
99
99
|
|
|
100
100
|
"""
|
|
101
|
+
# Auto-switch backend for server mode
|
|
102
|
+
if mode == 'server' and backend != 'torch':
|
|
103
|
+
logger.warning(
|
|
104
|
+
f"Server mode only supports 'torch' backend, got '{backend}'. "
|
|
105
|
+
f"Automatically switching to 'torch' backend. "
|
|
106
|
+
f"Please make sure 'torch' and 'torchvision' are installed: "
|
|
107
|
+
f"pip install torch torchvision")
|
|
108
|
+
backend = 'torch'
|
|
109
|
+
|
|
101
110
|
# Parse use_gpu parameter
|
|
102
111
|
if use_gpu == 'auto':
|
|
103
112
|
try:
|