fix(rapidocr): fixed issue #394 (#411)

* chore(rapidocr): add model SHA256

* chore(rapidocr): add model SHA256

* docs: update online demo link

* chore: update model path

* chore: update files

* chore: update files

* chore: update files

* fix(rapidocr): fixed paramter of DownloadFile
This commit is contained in:
SWHL authored and GitHub committed 2025-04-25 20:39:38 +08:00
1 parent 6fce7c841c
commit fbaaaba486
13 files changed
+505 -223

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@
# @Contact: liekkaskono@163.com
from rapidocr import RapidOCR
engine = RapidOCR()
engine = RapidOCR(params={"Global.with_torch": True})
img_url = "https://img1.baidu.com/it/u=3619974146,1266987475&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=516"
result = engine(img_url)
+15 -6
View File
@@ -21,18 +21,20 @@ import numpy as np
from rapidocr.inference_engine.base import get_engine
from ..utils import Logger, download_file
from ..utils import Logger
from ..utils.download_file import DownloadFile, DownloadFileInput
from .utils import CTCLabelDecode, TextRecInput, TextRecOutput
DEFAULT_DICT_PATH = Path(__file__).parent.parent / "models" / "ppocr_keys_v1.txt"
DEFAULT_DICT_URL = "https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt"
DEFAULT_MODE_PATH = Path(__file__).parent.parent / "models"
DEFAULT_DICT_URL = "https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt"
DEFAULT_MODEL_PATH = Path(__file__).parent.parent / "models"
class TextRecognizer:
def __init__(self, config: Dict[str, Any]):
self.session = get_engine(config.engine_name)(config, mode="rec")
self.session = get_engine(config.engine_name)(config)
self.logger = Logger(logger_name=__name__).get_log()
# onnx has inner character, other engine get or download character_dict_path
character, character_dict_path = self.get_character_dict(config)
@@ -60,9 +62,16 @@ class TextRecognizer:
dict_download_url = (
dict_download_url if dict_download_url is not None else DEFAULT_DICT_URL
)
dict_path = DEFAULT_MODE_PATH / Path(dict_download_url).name
dict_path = DEFAULT_MODEL_PATH / Path(dict_download_url).name
if not Path(dict_path).exists():
download_file(dict_download_url, dict_path, self.logger)
DownloadFile.run(
DownloadFileInput(
file_url=dict_download_url,
sha256=None,
save_path=dict_path,
logger=self.logger,
)
)
return character, dict_path
+288 -123
View File
@@ -1,187 +1,352 @@
onnxruntime:
PP-OCRv4:
det:
ch_PP-OCRv4_det_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_infer.onnx
ch_PP-OCRv4_det_server_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer.onnx
en_PP-OCRv3_det_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/en_PP-OCRv3_det_infer.onnx
multi_PP-OCRv3_det_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer.onnx
ch_PP-OCRv4_det_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_infer.onnx
SHA256: d2a7720d45a54257208b1e13e36a8479894cb74155a5efe29462512d42f49da9
ch_PP-OCRv4_det_server_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer.onnx
SHA256: cfa39a3f298f6d3fc71789834d15da36d11a6c59b489fc16ea4733728012f786
en_PP-OCRv3_det_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/en_PP-OCRv3_det_infer.onnx
SHA256: ea07c15d38ac40cd69da3c493444ec75b44ff23840553ff8ba102c1219ed39c2
multi_PP-OCRv3_det_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer.onnx
SHA256: 5475c6c7f4d84a6c4f32241b487435d59f126a40c023387af99732258844cdc3
rec:
arabic_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer.onnx
ch_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer.onnx
ch_PP-OCRv4_rec_server_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer.onnx
chinese_cht_PP-OCRv3_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer.onnx
cyrillic_PP-OCRv3_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer.onnx
devanagari_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer.onnx
en_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/en_PP-OCRv4_rec_infer.onnx
japan_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer.onnx
ka_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ka_PP-OCRv4_rec_infer.onnx
korean_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer.onnx
latin_PP-OCRv3_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer.onnx
ta_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer.onnx
te_PP-OCRv4_rec_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/te_PP-OCRv4_rec_infer.onnx
arabic_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer.onnx
SHA256: 4a9011bef71687bb84288dc86ad2471bd5d37b717ddf672dd156f9e7a5601bac
ch_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer.onnx
SHA256: 48fc40f24f6d2a207a2b1091d3437eb3cc3eb6b676dc3ef9c37384005483683b
ch_PP-OCRv4_rec_server_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer.onnx
SHA256: 6a2676219be9907c7fc9cf61ebaa843bf2898777def567925b78886fcd90c07a
chinese_cht_PP-OCRv3_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer.onnx
SHA256: 779656d044ce388045e02ea9244724616194e63928606436cdfc6dc3c9528cc6
cyrillic_PP-OCRv3_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer.onnx
SHA256: 1efb65bdc460af1c0e8733d005b20952b17ca5aac10ddb56c968333791c5eaa3
devanagari_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer.onnx
SHA256: a62b6148303187907aa0b0d3a0125bdc62557d07966468cab9056949e36035e8
en_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/en_PP-OCRv4_rec_infer.onnx
SHA256: e8770c967605983d1570cdf5352041dfb68fa0c21664f49f47b155abd3e0e318
japan_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer.onnx
SHA256: e1075a67dba758ecfc7ebc78a10ae61c95ac8fb66a9c86fab5541e33f085cb7a
ka_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ka_PP-OCRv4_rec_infer.onnx
SHA256: 9c1e186ea1d13cf6c853e57b42d382c3961fdd6acc2409e0d0dc44defc9f152b
korean_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer.onnx
SHA256: ab151ba9065eccd98f884cf4d927db091be86137276392072edd4f9d43ad7426
latin_PP-OCRv3_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer.onnx
SHA256: e9d7a33667e8aaa702862975186adf2012e3f390cc0f9422865957125f8071cf
ta_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer.onnx
SHA256: f78d752148873c5fa6e4294002bfd162dbba54236e406a39665ebbda766161b5
te_PP-OCRv4_rec_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/te_PP-OCRv4_rec_infer.onnx
SHA256: e608c3be00c8a9ea2f5c667d90f379403e2568bd5c8183308a49ca093def8eff
cls:
ch_ppocr_mobile_v2.0_cls_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/cls/ch_ppocr_mobile_v2.0_cls_infer.onnx
ch_ppocr_mobile_v2.0_cls_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/cls/ch_ppocr_mobile_v2.0_cls_infer.onnx
SHA256: e47acedf663230f8863ff1ab0e64dd2d82b838fceb5957146dab185a89d6215c
openvino:
PP-OCRv4:
det:
ch_PP-OCRv4_det_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_infer.onnx
ch_PP-OCRv4_det_server_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer.onnx
en_PP-OCRv3_det_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/en_PP-OCRv3_det_infer.onnx
multi_PP-OCRv3_det_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer.onnx
ch_PP-OCRv4_det_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_infer.onnx
SHA256: d2a7720d45a54257208b1e13e36a8479894cb74155a5efe29462512d42f49da9
ch_PP-OCRv4_det_server_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer.onnx
SHA256: cfa39a3f298f6d3fc71789834d15da36d11a6c59b489fc16ea4733728012f786
en_PP-OCRv3_det_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/en_PP-OCRv3_det_infer.onnx
SHA256: ea07c15d38ac40cd69da3c493444ec75b44ff23840553ff8ba102c1219ed39c2
multi_PP-OCRv3_det_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer.onnx
SHA256: 5475c6c7f4d84a6c4f32241b487435d59f126a40c023387af99732258844cdc3
rec:
arabic_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer/arabic_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer/arabic_dict.txt
SHA256: 4a9011bef71687bb84288dc86ad2471bd5d37b717ddf672dd156f9e7a5601bac
ch_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
SHA256: 48fc40f24f6d2a207a2b1091d3437eb3cc3eb6b676dc3ef9c37384005483683b
ch_PP-OCRv4_rec_server_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
SHA256: 6a2676219be9907c7fc9cf61ebaa843bf2898777def567925b78886fcd90c07a
chinese_cht_PP-OCRv3_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer/chinese_cht_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer/chinese_cht_dict.txt
SHA256: 779656d044ce388045e02ea9244724616194e63928606436cdfc6dc3c9528cc6
cyrillic_PP-OCRv3_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer/cyrillic_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer/cyrillic_dict.txt
SHA256: 1efb65bdc460af1c0e8733d005b20952b17ca5aac10ddb56c968333791c5eaa3
devanagari_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer/devanagari_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer/devanagari_dict.txt
SHA256: a62b6148303187907aa0b0d3a0125bdc62557d07966468cab9056949e36035e8
en_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/en_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer/en_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/en_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer/en_dict.txt
SHA256: e8770c967605983d1570cdf5352041dfb68fa0c21664f49f47b155abd3e0e318
japan_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer/japan_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer/japan_dict.txt
SHA256: e1075a67dba758ecfc7ebc78a10ae61c95ac8fb66a9c86fab5541e33f085cb7a
ka_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ka_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer/ka_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ka_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer/ka_dict.txt
SHA256: 9c1e186ea1d13cf6c853e57b42d382c3961fdd6acc2409e0d0dc44defc9f152b
korean_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer/korean_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer/korean_dict.txt
SHA256: ab151ba9065eccd98f884cf4d927db091be86137276392072edd4f9d43ad7426
latin_PP-OCRv3_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer/latin_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer/latin_dict.txt
SHA256: e9d7a33667e8aaa702862975186adf2012e3f390cc0f9422865957125f8071cf
ta_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer/ta_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer/ta_dict.txt
SHA256: f78d752148873c5fa6e4294002bfd162dbba54236e406a39665ebbda766161b5
te_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/rec/te_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer/te_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/rec/te_PP-OCRv4_rec_infer.onnx
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer/te_dict.txt
SHA256: e608c3be00c8a9ea2f5c667d90f379403e2568bd5c8183308a49ca093def8eff
cls:
ch_ppocr_mobile_v2.0_cls_infer.onnx: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/onnx/PP-OCRv4/cls/ch_ppocr_mobile_v2.0_cls_infer.onnx
ch_ppocr_mobile_v2.0_cls_infer.onnx:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/onnx/PP-OCRv4/cls/ch_ppocr_mobile_v2.0_cls_infer.onnx
SHA256: e47acedf663230f8863ff1ab0e64dd2d82b838fceb5957146dab185a89d6215c
paddle:
PP-OCRv4:
det:
ch_PP-OCRv4_det_infer: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/det/ch_PP-OCRv4_det_infer
ch_PP-OCRv4_det_server_infer: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer
en_PP-OCRv3_det_infer: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/det/en_PP-OCRv3_det_infer
multi_PP-OCRv3_det_infer: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer
ch_PP-OCRv4_det_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/det/ch_PP-OCRv4_det_infer
inference.pdiparams: 49ee815e30cff43cb1057d33bf0d94193e4d4f1ae28451cad15b40be830df915
inference.pdiparams.info: 4e0f29e5fa476126f9efe0dc69f7ca7be960705ad549385d30c9604193463e69
inference.pdmodel: 2ad68ed2768fe6c41166a5bc64680cc9f445390acb6528da449a4db2f7b90e14
ch_PP-OCRv4_det_server_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer
inference.pdiparams: 48cecf9e30e9261a634126bc5211a2736508ae89d2d6199ef2ede06cdebe678f
inference.pdiparams.info: 231d32f0fc329cffcd3f756ef6ab6899663222a6b655b577400a2dd9cb8d2ac8
inference.pdmodel: fec18291e9994c66a8c6877c7194c094071f115f7fd9f48b4da40e966749b03agit
en_PP-OCRv3_det_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/det/en_PP-OCRv3_det_infer
inference.pdiparams: 83676ec730627ab4502f401410a4b6a3ce1c0bb98fa249b71db055b6bddae051
inference.pdiparams.info: 2fe414d9eadf914bf44e3f9ba212988a6f26f364e4f87c6d0af57438ffffc0c4
inference.pdmodel: c4bfb1b05d9d1d5a760801eaf6d20180ef7e47bcc675fb17d1f3a89da5fef427
multi_PP-OCRv3_det_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer
inference.pdiparams: a6119e639cade15873ac32eb4bee121b63c811c4d007d9f618baf680aef8b857
inference.pdiparams.info: 2fe414d9eadf914bf44e3f9ba212988a6f26f364e4f87c6d0af57438ffffc0c4
inference.pdmodel: c49f664c75549678deedcaff8d11f8f2b9f1303ef6c72deccdb98a5ea2104381
rec:
arabic_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer/arabic_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer/arabic_dict.txt
inference.pdiparams: b388bf744151963a21b9ee9c60b4624ba90976ae5f1f1b023e594032b16ce40f
inference.pdiparams.info: 710d9f3d7c503067ae708f4bc3adc6973c0d6391adb7a1470c36eb70da6b5b83
inference.pdmodel: c9a2f2e222937a934c5c23fd95dbba5b62a3f6d822a14f86cf8b3e9b93632c64
ch_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
inference.pdiparams: a6dbfa63e7ee161688523c954e9e293f77dc24044db81e836ff9c7f103fd191a
inference.pdiparams.info: 0706cc669bdce382f582c139906076b170b112c51bf32573fe43438025777f12
inference.pdmodel: bf78f3898a004615e69c676259d8171bd7ae99000653b41fd72aaa36ae8bd304
ch_PP-OCRv4_rec_server_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
inference.pdiparams: 0319d16cb29b01788757164083da6512a5defb9bccdff5148a929bd43b2cd58f
inference.pdiparams.info: 3aad501d0aa2bb2785b90e184c8c5d21718a72c5b896e4493856eb8936ab8455
inference.pdmodel: d3cbe31c26670a275c74bba052a49925e24452243f6f646a9ef92c4f5acffd37
chinese_cht_PP-OCRv3_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer/chinese_cht_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer/chinese_cht_dict.txt
inference.pdiparams: 53cdd14ef365d43a3de5357dea00935c56ae6d8f0f7d464b8aee187df8bdea47
inference.pdiparams.info: cf79f0b9689b4d6b8094d8bfe2481dc4b4d1699adb622568384695b5f56dc600
inference.pdmodel: 343da1722eae396309e365f9a98bca53f55ca71cf757743abaf83dce9d805bc0
cyrillic_PP-OCRv3_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer/cyrillic_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer/cyrillic_dict.txt
inference.pdiparams: 2ef815afbb8970610618561946ce86faf60745ada64cd316ed34bfe34bdbf46f
inference.pdiparams.info: cf79f0b9689b4d6b8094d8bfe2481dc4b4d1699adb622568384695b5f56dc600
inference.pdmodel: 377bee205d0ba2d401cb463c300366ab87b2373b45dd9c8e3b560166b064beee
devanagari_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer/devanagari_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer/devanagari_dict.txt
inference.pdiparams: 3effa6613d040b79aac36699a3c97fe835fc91791db2010d614cc9ffb08ee415
inference.pdiparams.info: 710d9f3d7c503067ae708f4bc3adc6973c0d6391adb7a1470c36eb70da6b5b83
inference.pdmodel: 854c6d41d186be07588f3cd4ced044270ad96afd7f31ee4f63a70e1d3714a9d1
en_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer/en_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer/en_dict.txt
inference.pdiparams: 75f64a1ffb70c56b7a25655963ca16f5bf3286202e3f52ac972bee05cdee2f56
inference.pdiparams.info: 710d9f3d7c503067ae708f4bc3adc6973c0d6391adb7a1470c36eb70da6b5b83
inference.pdmodel: 85b952f05f709af259cfe4254012aa7208bef0998f71f57a15495446f25ccd43
japan_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer/japan_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer/japan_dict.txt
inference.pdiparams: e6e9b7395bb8476e85a15776aa09445c483778c06a512921cbc9ba81c6a2719a
inference.pdiparams.info: 710d9f3d7c503067ae708f4bc3adc6973c0d6391adb7a1470c36eb70da6b5b83
inference.pdmodel: d3339a79fa88863f639a00cd57e973cc278fa46c3eb369b88cb24bb06c96b89d
ka_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer/ka_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer/ka_dict.txt
inference.pdiparams: 580fe5bc0a45956569bc63bda99b27f33505f20e519fa43517d1d5b9bcbb029b
inference.pdiparams.info: 710d9f3d7c503067ae708f4bc3adc6973c0d6391adb7a1470c36eb70da6b5b83
inference.pdmodel: bb23a7045f9f03c414f727c75752660d51760f02da2023e258bcc014f585f8e8
korean_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer/korean_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer/korean_dict.txt
inference.pdiparams: ea4f4762582336e9b85653b016c5b1091223c947fafd282161fa3145ecb72d1d
inference.pdiparams.info: 533380ead7fe161fc32ac0bdc966e65c18c0d9d1a16088736c4aa3c628701374
inference.pdmodel: 992eed58af98ed6125065027e52fbc69b570e6c2e74610ec240e8a2436151ada
latin_PP-OCRv3_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer/latin_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer/latin_dict.txt
inference.pdiparams: fa6f22a8b2a669c7d5b4dfd2607491abd4cd2467adf7077c9cc70ce8c47b61d9
inference.pdiparams.info: cf79f0b9689b4d6b8094d8bfe2481dc4b4d1699adb622568384695b5f56dc600
inference.pdmodel: 23e11a537d8cd7ebab669a9e48fb12f49c295ca9ecde398c6b5460830bd174b8
ta_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer/ta_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer/ta_dict.txt
inference.pdiparams: b0ae170098a2f706de3c60496f5730b5ea4afe1d6e679a67ab6f89aa1018ffde
inference.pdiparams.info: 533380ead7fe161fc32ac0bdc966e65c18c0d9d1a16088736c4aa3c628701374
inference.pdmodel: 42ddd121b43ab9ef399e59705bcde6c56891a531c6df87a467aa99c5db54926f
te_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer/te_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer/te_dict.txt
inference.pdiparams: 6efc7c74d4ff86b4187ece2f3b4f6ecd775c3a780b82d27d39a9c506d6e9eb42
inference.pdiparams.info: 533380ead7fe161fc32ac0bdc966e65c18c0d9d1a16088736c4aa3c628701374
inference.pdmodel: f07501e6a3e96aa065ed5a656c8aee5bff9694ac8cb51826178dd4f34e884333
cls:
ch_ppocr_mobile_v2.0_cls_infer: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/cls/ch_ppocr_mobile_v2_cls_infer
ch_ppocr_mobile_v2.0_cls_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/cls/ch_ppocr_mobile_v2_cls_infer
inference.pdiparams: d1efda1b80e174b4fcb168a035ac96c1af4938892bd86a55f300a6027105d08c
inference.pdiparams.info: ee0c2eaa4c09814802bf520c01dfdbc1345dc2879dc9e67424d32c7b0ee88e59
inference.pdmodel: 3c4337ec61722a20b1dca2e5bfaffc313c0592bc89ad6e0d45168224186f6683
torch:
PP-OCRv4:
det:
ch_PP-OCRv4_det_infer.pth: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/ch_PP-OCRv4_det_infer.pth
ch_PP-OCRv4_det_server_infer.pth: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/ch_PP-OCRv4_det_server_infer.pth
en_PP-OCRv3_det_infer.pth: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/en_PP-OCRv3_det_infer.pth
multi_PP-OCRv3_det_infer.pth: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/Multilingual_PP-OCRv3_det_infer.pth
ch_PP-OCRv4_det_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/det/ch_PP-OCRv4_det_infer.pth
SHA256: 89622c3f3e76b3ac7d10d9434c1f117a7471dba44723885cc04b49932a740d5b
ch_PP-OCRv4_det_server_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/det/ch_PP-OCRv4_det_server_infer.pth
SHA256: 2ccb02359eb1e56c72ba3cc21d166ed32a517863554f19fc6ec1b663fe4a6652
en_PP-OCRv3_det_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/det/en_PP-OCRv3_det_infer.pth
SHA256: 62aba369c8245f131bb08348a7d9c3135234d5c139ec92b34c8ac7b9ba7c2846
multi_PP-OCRv3_det_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/det/Multilingual_PP-OCRv3_det_infer.pth
SHA256: 05eb1c89030b269b830ba7f2d424a4ac80c7593ea1795fef9777fedbc18e383f
rec:
arabic_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/arabic_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer/arabic_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/arabic_PP-OCRv4_rec_infer/arabic_dict.txt
SHA256: 4dced07241dba41911aca9b5b2c3505e4c041d836d7225700007981375d4f387
ch_PP-OCRv4_rec_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/ch_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
SHA256: cb4265bb4300a2487e93e82ccfa1924bf9cd1194c1a202ab17a96b4911c27e0b
ch_PP-OCRv4_rec_server_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/ch_PP-OCRv4_rec_server_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/ch_PP-OCRv4_rec_server_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ch_PP-OCRv4_rec_infer/ppocr_keys_v1.txt
SHA256: 2c0c9f5180ae3e4d8ea9d3830116ac49900abbb2af3985db02c2bbf484bb0bf9
chinese_cht_PP-OCRv3_rec_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/chinese_cht_PP-OCRv3_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer/chinese_cht_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/chinese_cht_PP-OCRv3_rec_infer/chinese_cht_dict.txt
SHA256: e1a636246ca348d481161fb4e2d3dc4aea4223e71fc50b0e72984ebaa322cbb4
cyrillic_PP-OCRv3_rec_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/cyrillic_PP-OCRv3_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer/cyrillic_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/cyrillic_PP-OCRv3_rec_infer/cyrillic_dict.txt
SHA256: 77d16690e6b3f16c2c907a7dcfe1c3722169fd22913fcfe84ee54069b8e5798d
devanagari_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/devanagari_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer/devanagari_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/devanagari_PP-OCRv4_rec_infer/devanagari_dict.txt
SHA256: 423c6d25e3c0db42192fdb2e87af37fed3e772f2433fefad0e13572b87788ad7
en_PP-OCRv4_rec_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/en_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer/en_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/en_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/en_PP-OCRv4_rec_infer/en_dict.txt
SHA256: f9723c94847de59df9b059faaed041fbb35f014ea973da40290b1e97004e1d4e
japan_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/japan_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer/japan_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/japan_PP-OCRv4_rec_infer/japan_dict.txt
SHA256: de4549a131821f7456a16175e6aea85c4fda5a6cec10b119c3c2d54c02ceb06f
ka_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/ka_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer/ka_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/ka_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/kannada_PP-OCRv4_rec_infer/ka_dict.txt
SHA256: 4a537f8aa90afb4f3bb63d0950c2d408b18d586509956b4f56652ef0829764f3
korean_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/korean_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer/korean_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/korean_PP-OCRv4_rec_infer/korean_dict.txt
SHA256: f50614ab06416037454ac2cc6ade9a758f0222f518254fd57dd65f428f763a01
latin_PP-OCRv3_rec_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/latin_PP-OCRv3_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer/latin_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/latin_PP-OCRv3_rec_infer/latin_dict.txt
SHA256: caf8e0f2572a7dea2d901c7f50bd78fc310a4246a655d062b69f30258c15bf90
ta_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer/ta_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/ta_PP-OCRv4_rec_infer/ta_dict.txt
SHA256: 16f42da51ddbad9acbb2a0372ddc2432c49ba3d1ccabc98acec55a4684b6a644
te_PP-OCRv4_rec_infer:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/te_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer/te_dict.txt
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/rec/te_PP-OCRv4_rec_infer.pth
dict_url: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/paddle/PP-OCRv4/rec/te_PP-OCRv4_rec_infer/te_dict.txt
SHA256: 0597e97b27be9298d703267ed28227abfa6c0a60c07817575b5fa7d2124e7dbc
cls:
ch_ptocr_mobile_v2.0_cls_infer.pth: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/torch/ch_ptocr_mobile_v2.0_cls_infer.pth
ch_ptocr_mobile_v2.0_cls_infer.pth:
model_dir: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/torch/PP-OCRv4/cls/ch_ptocr_mobile_v2.0_cls_infer.pth
SHA256: bfe13860824b3365c0c7f7ccfcddc8ff11645c60051739ff18bc9913f60c98e1
fonts:
ch: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/FZYTK.TTF
en: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/FZYTK.TTF
japan: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/japan.ttc
arabic: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/arabic.ttf
chinese_cht: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/chinese_cht.ttf
cyrillic: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/cyrillic.ttf
devanagari: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/devanagari_Martel-Regular.ttf
korean: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/korean.ttf
ka: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/kannada.ttf
latin: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/latin.ttf
ta: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/tamil.ttf
te: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/master/resources/fonts/telugu.ttf
ch:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/FZYTK.TTF
SHA256: 4065a23df6823c8e2b69a0e76d02f02a6470b8774a5e91086609701ad95cc33f
en:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/FZYTK.TTF
SHA256: 4065a23df6823c8e2b69a0e76d02f02a6470b8774a5e91086609701ad95cc33f
japan:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/japan.ttc
SHA256: 11122490a5e3a862015c8894183750de59abf95c3936d63d5978293d92f23dba
arabic:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/arabic.ttf
SHA256: cd25bfc3c6d745a8a4b4d415321aa5b43d99b61744b50d20e32931811ec7e268
chinese_cht:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/chinese_cht.ttf
SHA256: 5ce814960d0cdea1dd647180636babc1cf6a0acf0a9a9019424f4689acedd9ea
cyrillic:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/cyrillic.ttf
SHA256: 084768d29859a62b735387fb5946dfe61fb3d844031c7c51c1668d8afbe3b802
devanagari:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/devanagari_Martel-Regular.ttf
SHA256: b37a04d22ee4700f5018d39678ebb2b9fc64c9d06cd9ec6f9f3fb4c27870a63b
korean:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/korean.ttf
SHA256: 0897316bdb2e308cea2841c54940f2ef5707856000aa07910c8bff39a47e40bd
ka:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/kannada.ttf
SHA256: b337386a8e853ccba53c0c248bd06f025d7667b800ba74c72c66040d67315c6e
latin:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/latin.ttf
SHA256: 1562fe5cbdaacab4a5880d6404ba05245d12f3a4478fe16021e976bc725ce5d5
ta:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/tamil.ttf
SHA256: b771ac413157f6b1f1a52fb8ff1b56057f4b492fcce385ddd32ca12eee0c73b0
te:
path: https://www.modelscope.cn/models/RapidAI/RapidOCR/resolve/v2.0.7/resources/fonts/telugu.ttf
SHA256: 7f82ab141b77d263f9ea9b31b47faf50c11310f42fce6d9dffeaaa334909bbf9
+5 -3
View File
@@ -4,7 +4,7 @@
import abc
from enum import Enum
from pathlib import Path
from typing import List, Union
from typing import Dict, List, Union
import numpy as np
from omegaconf import DictConfig, OmegaConf
@@ -98,7 +98,7 @@ def get_engine_name(config: DictConfig) -> str:
class InferSession(abc.ABC):
model_info = OmegaConf.load(MODEL_URL_PATH)
DEFAULT_MODE_PATH = cur_dir / "models"
DEFAULT_MODEL_PATH = cur_dir / "models"
logger = Logger(logger_name=__name__).get_log()
@abc.abstractmethod
@@ -126,7 +126,9 @@ class InferSession(abc.ABC):
pass
@classmethod
def get_model_url(cls, engine_name: str, task_type: str, lang: str) -> str:
def get_model_url(
cls, engine_name: str, task_type: str, lang: str
) -> Dict[str, str]:
lang, model_type = lang.rsplit("_", 1)
model_dict = cls.model_info[engine_name]["PP-OCRv4"][task_type]
@@ -6,7 +6,7 @@ import platform
import traceback
from enum import Enum
from pathlib import Path
from typing import Any, Dict, List, Optional, Tuple
from typing import Any, Dict, List, Tuple
import numpy as np
from onnxruntime import (
@@ -17,7 +17,7 @@ from onnxruntime import (
get_device,
)
from ..utils import download_file
from ..utils import DownloadFile, DownloadFileInput
from ..utils.logger import Logger
from .base import InferSession
@@ -29,17 +29,23 @@ class EP(Enum):
class OrtInferSession(InferSession):
def __init__(self, config: Dict[str, Any], mode: Optional[str] = None):
def __init__(self, config: Dict[str, Any]):
self.logger = Logger(logger_name=__name__).get_log()
model_path = config.get("model_path", None)
if model_path is None:
# 说明用户没有指定自己模型,使用默认模型
default_model_url = self.get_model_url(
model_info = self.get_model_url(
config.engine_name, config.task_type, config.lang
)
model_path = self.DEFAULT_MODE_PATH / Path(default_model_url).name
download_file(default_model_url, model_path, self.logger)
model_path = self.DEFAULT_MODEL_PATH / Path(model_info["model_dir"]).name
download_params = DownloadFileInput(
file_url=model_info["model_dir"],
sha256=model_info["SHA256"],
save_path=model_path,
logger=self.logger,
)
DownloadFile.run(download_params)
self._verify_model(model_path)
@@ -152,8 +158,10 @@ class OrtInferSession(InferSession):
return False
window_build_number_str = platform.version().split(".")[-1]
window_build_number = int(window_build_number_str) if window_build_number_str.isdigit() else 0
window_build_number = (
int(window_build_number_str) if window_build_number_str.isdigit() else 0
)
if window_build_number < 18362:
self.logger.warning(
"DirectML is only supported in Windows 10 Build 18362 and above OS. The current Windows Build is %s. Use %s inference by default.",
+12 -10
View File
@@ -4,34 +4,36 @@
import os
import traceback
from pathlib import Path
from typing import Optional
import numpy as np
from omegaconf import DictConfig
from openvino.runtime import Core
from ..utils import Logger, download_file
from ..utils import Logger
from ..utils.download_file import DownloadFile, DownloadFileInput
from .base import InferSession
class OpenVINOInferSession(InferSession):
def __init__(self, config: DictConfig, mode: Optional[str] = None):
def __init__(self, config: DictConfig):
super().__init__(config)
self.mode = mode
self.logger = Logger(logger_name=__name__).get_log()
core = Core()
model_path = config.get("model_path", None)
if model_path is None:
default_model_url = self.get_model_url(
model_info = self.get_model_url(
config.engine_name, config.task_type, config.lang
)
if self.mode == "rec":
default_model_url = default_model_url.model_dir
model_path = self.DEFAULT_MODE_PATH / Path(default_model_url).name
download_file(default_model_url, model_path, self.logger)
model_path = self.DEFAULT_MODEL_PATH / Path(model_info["model_dir"]).name
download_params = DownloadFileInput(
file_url=model_info["model_dir"],
sha256=model_info["SHA256"],
save_path=model_path,
logger=self.logger,
)
DownloadFile.run(download_params)
self._verify_model(model_path)
model_onnx = core.read_model(model_path)
+23 -10
View File
@@ -10,7 +10,7 @@ import numpy as np
import paddle
from paddle import inference
from ..utils import download_file
from ..utils.download_file import DownloadFile, DownloadFileInput
from ..utils.logger import Logger
from .base import InferSession
@@ -26,23 +26,36 @@ class PaddleInferSession(InferSession):
model_dir = config.get("model_dir", None)
if model_dir is None:
default_model_url = self.get_model_url(
model_info = self.get_model_url(
config.engine_name, config.task_type, config.lang
)
if self.mode == "rec":
default_model_url = default_model_url["model_dir"]
pd_model_url = f"{default_model_url}/{PDMODEL_NAME}"
default_model_dir = model_info["model_dir"]
pd_model_url = f"{default_model_dir}/{PDMODEL_NAME}"
pdmodel_path = (
self.DEFAULT_MODE_PATH / Path(default_model_url).name / PDMODEL_NAME
self.DEFAULT_MODEL_PATH / Path(default_model_dir).name / PDMODEL_NAME
)
DownloadFile.run(
DownloadFileInput(
file_url=pd_model_url,
sha256=model_info[PDMODEL_NAME],
save_path=pdmodel_path,
logger=self.logger,
)
)
download_file(pd_model_url, pdmodel_path, self.logger)
pdiparams_url = f"{default_model_url}/{PDIPARAMS_NAME}"
pdiparams_url = f"{default_model_dir}/{PDIPARAMS_NAME}"
pdiparams_path = (
self.DEFAULT_MODE_PATH / Path(default_model_url).name / PDIPARAMS_NAME
self.DEFAULT_MODEL_PATH / Path(default_model_dir).name / PDIPARAMS_NAME
)
DownloadFile.run(
DownloadFileInput(
file_url=pdiparams_url,
sha256=model_info[PDIPARAMS_NAME],
save_path=pdiparams_path,
logger=self.logger,
)
)
download_file(pdiparams_url, pdiparams_path, self.logger)
else:
pdmodel_path = model_dir / "inference.pdmodel"
pdiparams_path = model_dir / "inference.pdiparams"
+13 -10
View File
@@ -2,15 +2,14 @@
# @Author: SWHL
# @Contact: liekkaskono@163.com
from pathlib import Path
from typing import Optional
import numpy as np
import torch
from omegaconf import OmegaConf
from ..networks.architectures.base_model import BaseModel
from ..utils.download_file import DownloadFile, DownloadFileInput
from ..utils.logger import Logger
from ..utils.utils import download_file
from .base import InferSession
root_dir = Path(__file__).resolve().parent.parent
@@ -18,20 +17,24 @@ DEFAULT_CFG_PATH = root_dir / "networks" / "arch_config.yaml"
class TorchInferSession(InferSession):
def __init__(self, config, mode: Optional[str] = None) -> None:
def __init__(self, config) -> None:
self.logger = Logger(logger_name=__name__).get_log()
self.mode = mode
model_path = config.get("model_path", None)
if model_path is None:
default_model_url = self.get_model_url(
model_info = self.get_model_url(
config.engine_name, config.task_type, config.lang
)
if self.mode == "rec":
default_model_url = default_model_url["model_dir"]
model_path = self.DEFAULT_MODE_PATH / Path(default_model_url).name
download_file(default_model_url, model_path, self.logger)
default_model_url = model_info["model_dir"]
model_path = self.DEFAULT_MODEL_PATH / Path(default_model_url).name
DownloadFile.run(
DownloadFileInput(
file_url=default_model_url,
sha256=model_info["SHA256"],
save_path=model_path,
logger=self.logger,
)
)
self._verify_model(model_path)
+1 -1
View File
@@ -1,10 +1,10 @@
# -*- encoding: utf-8 -*-
# @Author: SWHL
# @Contact: liekkaskono@163.com
from .download_file import DownloadFile, DownloadFileException, DownloadFileInput
from .load_image import LoadImage, LoadImageError
from .logger import Logger
from .parse_parameters import ParseLang, ParseParams
from .process_img import add_round_letterbox, increase_min_side, reduce_max_side
from .typings import RapidOCROutput
from .utils import download_file
from .vis_res import VisRes
+95
View File
@@ -0,0 +1,95 @@
# -*- encoding: utf-8 -*-
# @Author: SWHL
# @Contact: liekkaskono@163.com
import logging
from dataclasses import dataclass
from pathlib import Path
from typing import Optional, Union
import requests
from tqdm import tqdm
from .utils import get_file_sha256
@dataclass
class DownloadFileInput:
file_url: str
save_path: Union[str, Path]
logger: logging.Logger
sha256: Optional[str] = None
class DownloadFile:
BLOCK_SIZE = 1024 # 1 KiB
REQUEST_TIMEOUT = 60
@classmethod
def run(cls, input_params: DownloadFileInput):
save_path = Path(input_params.save_path)
logger = input_params.logger
cls._ensure_parent_dir_exists(save_path)
if cls._should_skip_download(save_path, input_params.sha256, logger):
return
response = cls._make_http_request(input_params.file_url, logger)
cls._save_response_with_progress(response, save_path, logger)
@staticmethod
def _ensure_parent_dir_exists(path: Path):
path.parent.mkdir(parents=True, exist_ok=True)
@classmethod
def _should_skip_download(
cls, path: Path, expected_sha256: Optional[str], logger: logging.Logger
) -> bool:
if not path.exists():
return False
if expected_sha256 is None:
logger.info("File exists (no checksum verification): %s", path)
return True
if cls.check_file_sha256(path, expected_sha256):
logger.info("File exists and is valid: %s", path)
return True
logger.warning("File exists but is invalid, redownloading: %s", path)
return False
@classmethod
def _make_http_request(cls, url: str, logger: logging.Logger) -> requests.Response:
logger.info("Initiating download: %s", url)
try:
response = requests.get(url, stream=True, timeout=cls.REQUEST_TIMEOUT)
response.raise_for_status() # Raises HTTPError for 4XX/5XX
return response
except requests.RequestException as e:
logger.error("Download failed: %s", url)
raise DownloadFileException(f"Failed to download {url}") from e
@classmethod
def _save_response_with_progress(
cls, response: requests.Response, save_path: Path, logger: logging.Logger
) -> None:
total_size = int(response.headers.get("content-length", 0))
logger.debug("Download size: %d bytes", total_size)
with (
tqdm(total=total_size, unit="iB", unit_scale=True) as progress_bar,
open(save_path, "wb") as output_file,
):
for chunk in response.iter_content(chunk_size=cls.BLOCK_SIZE):
progress_bar.update(len(chunk))
output_file.write(chunk)
logger.info("Successfully saved to: %s", save_path)
@staticmethod
def check_file_sha256(file_path: Union[str, Path], gt_sha256: str) -> bool:
return get_file_sha256(file_path) == gt_sha256
class DownloadFileException(Exception):
pass
+13 -37
View File
@@ -1,6 +1,7 @@
# -*- encoding: utf-8 -*-
# @Author: SWHL
# @Contact: liekkaskono@163.com
import hashlib
import importlib
from pathlib import Path
from typing import Union
@@ -8,8 +9,18 @@ from urllib.parse import urlparse
import cv2
import numpy as np
import requests
from tqdm import tqdm
def get_file_sha256(file_path: Union[str, Path], chunk_size: int = 65536) -> str:
with open(file_path, "rb") as file:
sha_signature = hashlib.sha256()
while True:
chunk = file.read(chunk_size)
if not chunk:
break
sha_signature.update(chunk)
return sha_signature.hexdigest()
def save_img(save_path: Union[str, Path], img: np.ndarray):
@@ -33,38 +44,3 @@ def import_package(name, package=None):
return module
except ModuleNotFoundError:
return None
def download_file(url: str, save_path: Union[str, Path], logger=None):
if not Path(save_path).parent.exists():
Path(save_path).parent.mkdir(parents=True, exist_ok=True)
if Path(save_path).exists():
if logger is not None:
logger.info("File already exists in %s", save_path)
else:
print(f"File already exists in {save_path}")
return
if logger is not None:
logger.info("Downloading file from %s to %s", url, save_path)
else:
print(f"Downloading file from {url} to {save_path}")
response = requests.get(url, stream=True, timeout=60)
status_code = response.status_code
if status_code != 200:
raise DownloadFileError("Something went wrong while downloading models")
total_size_in_bytes = int(response.headers.get("content-length", 1))
block_size = 1024 # 1 Kibibyte
with tqdm(total=total_size_in_bytes, unit="iB", unit_scale=True) as pb:
with open(save_path, "wb") as file:
for data in response.iter_content(block_size):
pb.update(len(data))
file.write(data)
class DownloadFileError(Exception):
pass
+22 -7
View File
@@ -11,9 +11,9 @@ import numpy as np
from omegaconf import OmegaConf
from PIL import Image, ImageDraw, ImageFont
from .download_file import DownloadFile, DownloadFileInput
from .load_image import LoadImage
from .logger import Logger
from .utils import download_file
root_dir = Path(__file__).resolve().parent.parent
InputType = Union[str, np.ndarray, bytes, Path, Image.Image]
@@ -80,27 +80,42 @@ class VisRes:
font_path: Optional[Union[str, Path]] = None,
lang_rec: Optional[str] = None,
) -> str:
default_info = self.font_cfg["ch"]
default_input_params = DownloadFileInput(
file_url=default_info["path"],
sha256=default_info["SHA256"],
save_path=DEFAULT_FONT_PATH,
logger=self.logger,
)
if lang_rec is None:
# 没有指定语种,用默认字体文件
download_file(self.font_cfg["ch"], DEFAULT_FONT_PATH, logger=self.logger)
DownloadFile.run(default_input_params)
return str(DEFAULT_FONT_PATH)
if font_path is None:
# 指定了语种,但是没有指定字体文件,根据语种选择字体文件
lang_rec = lang_rec.rsplit("_", 1)[0]
font_url = self.font_cfg.get(lang_rec, None)
font_info = self.font_cfg.get(lang_rec, None)
font_url, font_sha256 = font_info["path"], font_info["SHA256"]
if font_url is None:
self.logger.warning(
"Font file for %s is not found in the supported font list. Default font file will be used.",
lang_rec,
)
download_file(
self.font_cfg["ch"], DEFAULT_FONT_PATH, logger=self.logger
)
DownloadFile.run(default_input_params)
return str(DEFAULT_FONT_PATH)
save_font_path = DEFAULT_FONT_DIR / f"{Path(font_url).name}"
download_file(font_url, save_font_path, logger=self.logger)
input_param = DownloadFileInput(
file_url=font_url,
sha256=font_sha256,
save_path=save_font_path,
logger=self.logger,
)
DownloadFile.run(input_param)
return str(save_font_path)
return str(font_path)
+1 -7
View File
@@ -16,7 +16,6 @@ sys.path.append(str(root_dir))
from rapidocr import LoadImageError, RapidOCR
from rapidocr.main import main
from rapidocr.utils.logger import Logger
from rapidocr.utils.utils import download_file
tests_dir = root_dir / "tests" / "test_files"
img_path = tests_dir / "ch_en_num.jpg"
@@ -179,16 +178,11 @@ def test_engine_torch():
def test_long_img(engine):
img_url = "https://github.com/RapidAI/RapidOCR/releases/download/v1.1.0/long.jpeg"
img_path = tests_dir / "long.jpeg"
download_file(img_url, img_path, logger)
result = engine(img_path)
result = engine(img_url)
assert result is not None
assert len(result.boxes) >= 53
img_path.unlink()
def test_mode_one_img(engine):
img_path = tests_dir / "issue_170.png"