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.
Files changed (392) hide show
  1. {openocr_python-0.1.0.dev4/openocr_python.egg-info → openocr_python-0.1.2}/PKG-INFO +2 -2
  2. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/QUICKSTART.md +1 -1
  3. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/__init__.py +1 -1
  4. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/demo_gradio.py +91 -17
  5. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/demo_opendoc.py +25 -19
  6. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/demo_unirec.py +98 -20
  7. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_det.py +46 -16
  8. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_e2e.py +9 -0
  9. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_rec.py +55 -16
  10. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2/openocr_python.egg-info}/PKG-INFO +2 -2
  11. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/SOURCES.txt +0 -1
  12. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/pyproject.toml +1 -1
  13. openocr_python-0.1.0.dev4/openocr/tools/utils/__init__.py +0 -0
  14. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/LICENSE +0 -0
  15. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/MANIFEST.in +0 -0
  16. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/evaluation.yaml +0 -0
  17. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/ltb.yaml +0 -0
  18. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/mjsynth.yaml +0 -0
  19. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/openvino.yaml +0 -0
  20. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/ost.yaml +0 -0
  21. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/synthtext.yaml +0 -0
  22. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/test.yaml +0 -0
  23. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/textocr.yaml +0 -0
  24. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/textocr_horizontal.yaml +0 -0
  25. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/union14m_b.yaml +0 -0
  26. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/dataset/rec/union14m_l_filtered.yaml +0 -0
  27. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/det/dbnet/repvit_db.yml +0 -0
  28. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/resnet45_trans_abinet_lang.yml +0 -0
  29. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/resnet45_trans_abinet_wo_lang.yml +0 -0
  30. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/svtrv2_abinet_lang.yml +0 -0
  31. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/abinet/svtrv2_abinet_wo_lang.yml +0 -0
  32. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/aster/resnet31_lstm_aster_tps_on.yml +0 -0
  33. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/aster/svtrv2_aster.yml +0 -0
  34. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/aster/svtrv2_aster_tps_on.yml +0 -0
  35. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/autostr/autostr_lstm_aster_tps_on.yml +0 -0
  36. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/svtrv2_busnet.yml +0 -0
  37. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/svtrv2_busnet_pretraining.yml +0 -0
  38. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/vit_busnet.yml +0 -0
  39. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/busnet/vit_busnet_pretraining.yml +0 -0
  40. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cam/convnextv2_cam_tps_on.yml +0 -0
  41. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cam/convnextv2_tiny_cam_tps_on.yml +0 -0
  42. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cam/svtrv2_cam_tps_on.yml +0 -0
  43. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cdistnet/resnet45_trans_cdistnet.yml +0 -0
  44. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cdistnet/svtrv2_cdistnet.yml +0 -0
  45. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cmer/cmer.yml +0 -0
  46. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd.yml +0 -0
  47. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd_ch.yml +0 -0
  48. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd_h8.yml +0 -0
  49. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtr_base_cppd_syn.yml +0 -0
  50. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/cppd/svtrv2_cppd.yml +0 -0
  51. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/dan/resnet45_fpn_dan.yml +0 -0
  52. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/dan/svtrv2_dan.yml +0 -0
  53. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/dptr/dptr_parseq_pretrain.yml +0 -0
  54. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/focalsvtr/focalsvtr_ctc.yml +0 -0
  55. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_nrtr_gtc.yml +0 -0
  56. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_smtr_gtc_long_infer.yml +0 -0
  57. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_smtr_gtc_smtr_long.yml +0 -0
  58. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/gtc/svtrv2_lnconv_smtr_gtc_stream.yml +0 -0
  59. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/igtr/svtr_base_ds_igtr.yml +0 -0
  60. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lister/focalsvtr_lister_wo_fem_maxratio12.yml +0 -0
  61. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lister/svtrv2_lister_wo_fem_maxratio12.yml +0 -0
  62. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtr_base_lpv.yml +0 -0
  63. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtr_base_lpv_wo_glrm.yml +0 -0
  64. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtrv2_lpv.yml +0 -0
  65. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/lpv/svtrv2_lpv_wo_glrm.yml +0 -0
  66. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/maerec/vit_nrtr.yml +0 -0
  67. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/matrn/resnet45_trans_matrn.yml +0 -0
  68. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/matrn/svtrv2_matrn.yml +0 -0
  69. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mdiff4str/svtrv2_mdiffdecoder_base.yml +0 -0
  70. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mdiff4str/svtrv2_mdiffdecoder_small.yml +0 -0
  71. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/svtrv2_mgpstr_only_char.yml +0 -0
  72. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_base_mgpstr_only_char.yml +0 -0
  73. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_large_mgpstr_only_char.yml +0 -0
  74. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_mgpstr.yml +0 -0
  75. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/mgpstr/vit_mgpstr_only_char.yml +0 -0
  76. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/moran/resnet31_lstm_moran.yml +0 -0
  77. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/focalsvtr_nrtr_maxraio12.yml +0 -0
  78. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/nrtr.yml +0 -0
  79. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/svtr_base_nrtr.yml +0 -0
  80. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/svtr_base_nrtr_syn.yml +0 -0
  81. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/nrtr/svtrv2_nrtr.yml +0 -0
  82. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/ote/svtr_base_h8_ote.yml +0 -0
  83. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/ote/svtr_base_ote.yml +0 -0
  84. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/parseq/focalsvtr_parseq_maxratio12.yml +0 -0
  85. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/parseq/svrtv2_parseq.yml +0 -0
  86. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/parseq/vit_parseq.yml +0 -0
  87. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/robustscanner/resnet31_robustscanner.yml +0 -0
  88. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/robustscanner/svtrv2_robustscanner.yml +0 -0
  89. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/sar/resnet31_lstm_sar.yml +0 -0
  90. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/sar/svtrv2_sar.yml +0 -0
  91. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/seed/resnet31_lstm_seed_tps_on.yml +0 -0
  92. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/focalsvtr_smtr.yml +0 -0
  93. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/focalsvtr_smtr_long.yml +0 -0
  94. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/svtrv2_smtr.yml +0 -0
  95. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/smtr/svtrv2_smtr_bi.yml +0 -0
  96. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/srn/resnet50_fpn_srn.yml +0 -0
  97. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/srn/svtrv2_srn.yml +0 -0
  98. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_ctc.yml +0 -0
  99. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_h8_ctc.yml +0 -0
  100. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_h8_rctc.yml +0 -0
  101. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_rctc.yml +0 -0
  102. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_tiny_h8_ctc.yml +0 -0
  103. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/convnextv2_tiny_h8_rctc.yml +0 -0
  104. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/crnn_ctc.yml +0 -0
  105. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/crnn_ctc_long.yml +0 -0
  106. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalnet_base_ctc.yml +0 -0
  107. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalnet_base_rctc.yml +0 -0
  108. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalsvtr_ctc.yml +0 -0
  109. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/focalsvtr_rctc.yml +0 -0
  110. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/resnet45_trans_ctc.yml +0 -0
  111. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/resnet45_trans_rctc.yml +0 -0
  112. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/svtr_base_ctc.yml +0 -0
  113. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/svtr_base_rctc.yml +0 -0
  114. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/svtrnet_ctc_syn.yml +0 -0
  115. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/vit_ctc.yml +0 -0
  116. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrs/vit_rctc.yml +0 -0
  117. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/repsvtr_ch.yml +0 -0
  118. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_ch.yml +0 -0
  119. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_ctc.yml +0 -0
  120. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_rctc.yml +0 -0
  121. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_small_rctc.yml +0 -0
  122. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_smtr_gtc_rctc.yml +0 -0
  123. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_smtr_gtc_rctc_ch.yml +0 -0
  124. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_smtr_gtc_rctc_infer.yml +0 -0
  125. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/svtrv2/svtrv2_tiny_rctc.yml +0 -0
  126. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/unirec/focalsvtr_ardecoder_unirec.yml +0 -0
  127. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/unirec/opendoc_pipeline.yml +0 -0
  128. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/resnet45_trans_visionlan_LA.yml +0 -0
  129. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/resnet45_trans_visionlan_LF_1.yml +0 -0
  130. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/resnet45_trans_visionlan_LF_2.yml +0 -0
  131. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/svtrv2_visionlan_LA.yml +0 -0
  132. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/svtrv2_visionlan_LF_1.yml +0 -0
  133. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/configs/rec/visionlan/svtrv2_visionlan_LF_2.yml +0 -0
  134. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/losses/__init__.py +0 -0
  135. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/losses/db_loss.py +0 -0
  136. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/losses/det_basic_loss.py +0 -0
  137. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/metrics/__init__.py +0 -0
  138. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/metrics/det_metric.py +0 -0
  139. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/metrics/eval_det_iou.py +0 -0
  140. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/__init__.py +0 -0
  141. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/backbones/__init__.py +0 -0
  142. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/backbones/repvit.py +0 -0
  143. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/base_detector.py +0 -0
  144. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/heads/__init__.py +0 -0
  145. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/heads/db_head.py +0 -0
  146. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/necks/__init__.py +0 -0
  147. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/modeling/necks/db_fpn.py +0 -0
  148. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/postprocess/__init__.py +0 -0
  149. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/postprocess/db_postprocess.py +0 -0
  150. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/__init__.py +0 -0
  151. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/crop_paste.py +0 -0
  152. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/crop_resize.py +0 -0
  153. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/db_label_encode.py +0 -0
  154. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/db_resize_for_test.py +0 -0
  155. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/opendet/preprocess/iaa_augment.py +0 -0
  156. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openocr.py +0 -0
  157. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/__init__.py +0 -0
  158. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/abinet_loss.py +0 -0
  159. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/ar_loss.py +0 -0
  160. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cam_loss.py +0 -0
  161. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cdistnet_loss.py +0 -0
  162. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/ce_loss.py +0 -0
  163. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cmer_loss.py +0 -0
  164. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/cppd_loss.py +0 -0
  165. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/ctc_loss.py +0 -0
  166. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/igtr_loss.py +0 -0
  167. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/lister_loss.py +0 -0
  168. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/lpv_loss.py +0 -0
  169. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/mdiff_loss.py +0 -0
  170. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/mgp_loss.py +0 -0
  171. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/parseq_loss.py +0 -0
  172. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/robustscanner_loss.py +0 -0
  173. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/seed_loss.py +0 -0
  174. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/smtr_loss.py +0 -0
  175. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/srn_loss.py +0 -0
  176. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/unirec_loss.py +0 -0
  177. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/losses/visionlan_loss.py +0 -0
  178. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/__init__.py +0 -0
  179. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric.py +0 -0
  180. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_cmer.py +0 -0
  181. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_gtc.py +0 -0
  182. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_long.py +0 -0
  183. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/metrics/rec_metric_mgp.py +0 -0
  184. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/__init__.py +0 -0
  185. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/base_recognizer.py +0 -0
  186. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/cmer_modeling/modeling_cmer.py +0 -0
  187. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/common.py +0 -0
  188. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/__init__.py +0 -0
  189. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/abinet_decoder.py +0 -0
  190. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/aster_decoder.py +0 -0
  191. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/bus_decoder.py +0 -0
  192. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/cam_decoder.py +0 -0
  193. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/cdistnet_decoder.py +0 -0
  194. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/cppd_decoder.py +0 -0
  195. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/ctc_decoder.py +0 -0
  196. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/dan_decoder.py +0 -0
  197. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/dptr_parseq_clip_b_decoder.py +0 -0
  198. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/igtr_decoder.py +0 -0
  199. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/lister_decoder.py +0 -0
  200. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/lpv_decoder.py +0 -0
  201. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/matrn_decoder.py +0 -0
  202. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/mdiff_decoder.py +0 -0
  203. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/mgp_decoder.py +0 -0
  204. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/nrtr_decoder.py +0 -0
  205. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/ote_decoder.py +0 -0
  206. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/parseq_decoder.py +0 -0
  207. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/rctc_decoder.py +0 -0
  208. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/robustscanner_decoder.py +0 -0
  209. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/sar_decoder.py +0 -0
  210. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/smtr_decoder.py +0 -0
  211. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/smtr_decoder_nattn.py +0 -0
  212. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/srn_decoder.py +0 -0
  213. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/decoders/visionlan_decoder.py +0 -0
  214. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/__init__.py +0 -0
  215. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/autostr_encoder.py +0 -0
  216. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/cam_encoder.py +0 -0
  217. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/convnextv2.py +0 -0
  218. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/focalsvtr.py +0 -0
  219. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/nrtr_encoder.py +0 -0
  220. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_hgnet.py +0 -0
  221. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_lcnetv3.py +0 -0
  222. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_mobilenet_v3.py +0 -0
  223. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_mv1_enhance.py +0 -0
  224. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_nrtr_mtb.py +0 -0
  225. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_31.py +0 -0
  226. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_45.py +0 -0
  227. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_fpn.py +0 -0
  228. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/rec_resnet_vd.py +0 -0
  229. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/repvit.py +0 -0
  230. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/resnet31_rnn.py +0 -0
  231. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrnet.py +0 -0
  232. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrnet2dpos.py +0 -0
  233. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrv2.py +0 -0
  234. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrv2_lnconv.py +0 -0
  235. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/svtrv2_lnconv_two33.py +0 -0
  236. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/encoders/vit.py +0 -0
  237. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/__init__.py +0 -0
  238. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/aster_tps.py +0 -0
  239. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/moran.py +0 -0
  240. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/transforms/tps.py +0 -0
  241. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/unirec_modeling/configuration_unirec.py +0 -0
  242. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/modeling/unirec_modeling/modeling_unirec.py +0 -0
  243. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/optimizer/__init__.py +0 -0
  244. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/optimizer/lr.py +0 -0
  245. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/__init__.py +0 -0
  246. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/abinet_postprocess.py +0 -0
  247. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/ar_postprocess.py +0 -0
  248. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/ce_postprocess.py +0 -0
  249. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/char_postprocess.py +0 -0
  250. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/cmer_postprocess.py +0 -0
  251. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/cppd_postprocess.py +0 -0
  252. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/ctc_postprocess.py +0 -0
  253. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/igtr_postprocess.py +0 -0
  254. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/lister_postprocess.py +0 -0
  255. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/mgp_postprocess.py +0 -0
  256. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/nrtr_postprocess.py +0 -0
  257. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/smtr_postprocess.py +0 -0
  258. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/srn_postprocess.py +0 -0
  259. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/unirec_postprocess.py +0 -0
  260. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/postprocess/visionlan_postprocess.py +0 -0
  261. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/__init__.py +0 -0
  262. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/abinet_aug.py +0 -0
  263. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/abinet_label_encode.py +0 -0
  264. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ar_label_encode.py +0 -0
  265. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/auto_augment.py +0 -0
  266. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/cam_label_encode.py +0 -0
  267. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ce_label_encode.py +0 -0
  268. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/char_label_encode.py +0 -0
  269. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/cmer_label_encode.py +0 -0
  270. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/cppd_label_encode.py +0 -0
  271. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ctc_label_encode.py +0 -0
  272. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/dptr_label_encode.py +0 -0
  273. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/ep_label_encode.py +0 -0
  274. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/igtr_label_encode.py +0 -0
  275. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/mdiff_label_encode.py +0 -0
  276. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/mgp_label_encode.py +0 -0
  277. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/parseq_aug.py +0 -0
  278. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/rec_aug.py +0 -0
  279. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/resize.py +0 -0
  280. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/smtr_label_encode.py +0 -0
  281. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/srn_label_encode.py +0 -0
  282. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/unirec_label_encode.py +0 -0
  283. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/openrec/preprocess/visionlan_label_encode.py +0 -0
  284. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/create_lmdb_dataset.py +0 -0
  285. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/__init__.py +0 -0
  286. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/cmer_web_dataset.py +0 -0
  287. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/collate_fn.py +0 -0
  288. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/lmdb_dataset.py +0 -0
  289. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/lmdb_dataset_test.py +0 -0
  290. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/multi_scale_sampler.py +0 -0
  291. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/native_size_dataset.py +0 -0
  292. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/native_size_sampler.py +0 -0
  293. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset.py +0 -0
  294. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset_test.py +0 -0
  295. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset_tvresize.py +0 -0
  296. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_dataset_tvresize_test.py +0 -0
  297. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/ratio_sampler.py +0 -0
  298. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/simple_dataset.py +0 -0
  299. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/strlmdb_dataset.py +0 -0
  300. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/data/text_lmdb_dataset.py +0 -0
  301. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/download/download_dataset.py +0 -0
  302. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/download/utils.py +0 -0
  303. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/download_example_images.py +0 -0
  304. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/engine/config.py +0 -0
  305. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/engine/trainer.py +0 -0
  306. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_det.py +0 -0
  307. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec.py +0 -0
  308. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_ch.py +0 -0
  309. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_en.py +0 -0
  310. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_long.py +0 -0
  311. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/eval_rec_all_long_simple.py +0 -0
  312. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/export_rec.py +0 -0
  313. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer/onnx_engine.py +0 -0
  314. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer/predict_rec.py +0 -0
  315. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer/utility.py +0 -0
  316. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_doc.py +0 -0
  317. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_doc_onnx.py +0 -0
  318. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_e2e_parallel.py +0 -0
  319. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/infer_unirec_onnx.py +0 -0
  320. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/to_markdown.py +0 -0
  321. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/toonnx.py +0 -0
  322. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/train_det.py +0 -0
  323. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/train_rec.py +0 -0
  324. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utility.py +0 -0
  325. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/EN_symbol_dict.txt +0 -0
  326. {openocr_python-0.1.0.dev4/openocr/tools → openocr_python-0.1.2/openocr/tools/utils}/__init__.py +0 -0
  327. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/ckpt.py +0 -0
  328. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ar_dict.txt +0 -0
  329. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/arabic_dict.txt +0 -0
  330. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/be_dict.txt +0 -0
  331. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/bg_dict.txt +0 -0
  332. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/chinese_cht_dict.txt +0 -0
  333. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/cyrillic_dict.txt +0 -0
  334. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/devanagari_dict.txt +0 -0
  335. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/en_dict.txt +0 -0
  336. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/fa_dict.txt +0 -0
  337. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/french_dict.txt +0 -0
  338. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/german_dict.txt +0 -0
  339. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/hi_dict.txt +0 -0
  340. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/it_dict.txt +0 -0
  341. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/japan_dict.txt +0 -0
  342. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ka_dict.txt +0 -0
  343. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/kie_dict/xfund_class_list.txt +0 -0
  344. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/korean_dict.txt +0 -0
  345. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/latex_symbol_dict.txt +0 -0
  346. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/latin_dict.txt +0 -0
  347. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/layout_dict/layout_cdla_dict.txt +0 -0
  348. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/layout_dict/layout_publaynet_dict.txt +0 -0
  349. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/layout_dict/layout_table_dict.txt +0 -0
  350. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/mr_dict.txt +0 -0
  351. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ne_dict.txt +0 -0
  352. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/oc_dict.txt +0 -0
  353. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/pu_dict.txt +0 -0
  354. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/rs_dict.txt +0 -0
  355. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/rsc_dict.txt +0 -0
  356. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ru_dict.txt +0 -0
  357. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/spin_dict.txt +0 -0
  358. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ta_dict.txt +0 -0
  359. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_dict.txt +0 -0
  360. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_master_structure_dict.txt +0 -0
  361. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_structure_dict.txt +0 -0
  362. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/table_structure_dict_ch.txt +0 -0
  363. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/te_dict.txt +0 -0
  364. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ug_dict.txt +0 -0
  365. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/uk_dict.txt +0 -0
  366. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/ur_dict.txt +0 -0
  367. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict/xi_dict.txt +0 -0
  368. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/dict90.txt +0 -0
  369. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_metric/Deteval.py +0 -0
  370. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_metric/polygon_fast.py +0 -0
  371. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/extract_batchsize.py +0 -0
  372. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  373. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  374. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  375. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/e2e_utils/visual.py +0 -0
  376. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/en_dict.txt +0 -0
  377. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/gen_label.py +0 -0
  378. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/ic15_dict.txt +0 -0
  379. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/logging.py +0 -0
  380. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/opendoc_onnx_utils/utils.py +0 -0
  381. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/poly_nms.py +0 -0
  382. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/ppocr_keys_v1.txt +0 -0
  383. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/stats.py +0 -0
  384. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/utility.py +0 -0
  385. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr/tools/utils/visual.py +0 -0
  386. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/dependency_links.txt +0 -0
  387. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/entry_points.txt +0 -0
  388. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/not-zip-safe +0 -0
  389. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/requires.txt +0 -0
  390. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/openocr_python.egg-info/top_level.txt +0 -0
  391. {openocr_python-0.1.0.dev4 → openocr_python-0.1.2}/setup.cfg +0 -0
  392. {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.0.dev4
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.0.dev4
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
@@ -18,7 +18,7 @@ Visit: https://github.com/Topdu/OpenOCR
18
18
 
19
19
  ```bash
20
20
  # Install from PyPI (recommended)
21
- pip install openocr-python==0.1.0.dev4
21
+ pip install openocr-python==0.1.2
22
22
 
23
23
  # Or install from source
24
24
  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.0.dev4'
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
- css = '.image-container img { width: 100%; max-height: 320px;}'
131
-
132
- with gr.Blocks(css=css, theme=gr.themes.Soft()) as demo:
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
- <h1 style='text-align: center;'><a href="https://github.com/Topdu/OpenOCR">OpenOCR</a></h1>
135
- <p style='text-align: center;'>准确高效的通用 OCR 系统 (由<a href="https://fvl.fudan.edu.cn">FVL实验室</a> <a href="https://github.com/Topdu/OpenOCR">OCR Team</a> 创建) <a href="https://github.com/Topdu/OpenOCR/tree/main?tab=readme-ov-file#quick-start">[本地快速部署]</a></p>"""
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('🚀 运行识别', variant='primary')
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
- info='检测网络输入尺寸的最长边,默认为960')
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
- info=
159
- '文本框的置信度计算模式,默认为 slow。slow 模式计算速度较慢,但准确度较高。fast 模式计算速度较快,但准确度较低。'
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
- info='识别置信度阈值,默认值为0.4。低于该阈值的识别结果和对应的文本框被丢弃。')
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
- info='Mask 阈值,用于二值化 mask,默认值为0.3。如果存在文本截断时,请调低该值。')
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
- info='文本框置信度阈值,默认值为0.6。如果存在文本被漏检时,请调低该值。')
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
- info='文本框解析时的膨胀系数,默认值为1.5。值越大文本框越大。')
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='选择 OCR 模型类型:高效率模型mobile,高精度模型server')
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 sys
12
- sys.path.append(os.path.dirname(os.path.abspath(__file__)))
13
- from .tools.infer_doc_onnx import OpenDocONNX
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
- """获取或初始化OpenDocONNX流水线
29
+ """Get or initialize OpenDocONNX pipeline.
32
30
 
33
31
  Args:
34
- layout_model_path: 版面检测ONNX模型路径
35
- unirec_encoder_path: UniRec编码器ONNX模型路径
36
- unirec_decoder_path: UniRec解码器ONNX模型路径
37
- tokenizer_mapping_path: Tokenizer映射文件路径
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: 初始化好的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
- """处理图片并进行OCR识别
64
+ """Process image and perform OCR recognition.
67
65
 
68
66
  Args:
69
- image_path: 图片文件路径,None表示无图片
67
+ image_path: Image file path, None if no image.
70
68
 
71
69
  Returns:
72
- tuple: (可视化图片, Markdown内容(base64图片), JSON内容, ZIP文件路径, 原始Markdown, Markdown内容(base64图片))
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
- """创建Gradio演示界面
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
- height=400)
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
- # 创建全局 markdown_converter 实例
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
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
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
- <h1 style='text-align: center;'><a href="https://github.com/Topdu/OpenOCR">UniRec-0.1B: Unified Text and Formula Recognition with 0.1B Parameters</a></h1>
198
- <p style='text-align: center;'>0.1B超轻量模型统一文本与公式识别(由<a href="https://fvl.fudan.edu.cn">FVL实验室</a> <a href="https://github.com/Topdu/OpenOCR">OCR Team</a> 创建)</p>
199
- <p style='text-align: center;'><a href="https://github.com/Topdu/OpenOCR/blob/main/docs/unirec.md">[本地GPU部署]</a>获取快速识别体验</p>"""
200
- )
201
- gr.Markdown('上传一张图片,点击"运行识别"按钮进行文本和公式识别。')
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='上传图片 or 粘贴截图', type='pil')
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
- label='📚 示例图片'
289
+ label='📚 Example Images'
212
290
  )
213
291
 
214
292
  with gr.Row():
215
- run_button = gr.Button('🚀 运行识别', variant='primary')
216
- clear_button = gr.Button('🗑️ 清空', variant='secondary')
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
- 检查预训练模型是否存在,若不存在则从指定 URL 下载到固定缓存目录。
38
+ 检查预训练模型是否存在,若不存在则从 ModelScope 或 HuggingFace 下载到固定缓存目录。
39
+ 优先从 ModelScope 下载,失败后回退到 HuggingFace。
39
40
 
40
41
  Args:
41
- model_name (str): 模型文件的名称,例如 "model.pt"
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 urllib.request
68
- with urllib.request.urlopen(url) as response, open(model_path,
69
- 'wb') as out_file:
70
- out_file.write(response.read())
71
- logger.info(f'Model downloaded and saved at: {model_path}')
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'Error downloading the model: {e}')
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 the following URL:\n{url}\n'
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. Please download it manually from {url} '
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: