110 lines
3.1 KiB
Python
110 lines
3.1 KiB
Python
import os
|
||
import psutil
|
||
from plugin_i18n import Translator
|
||
|
||
tr = Translator(__file__, "i18n.csv")
|
||
|
||
# 模块配置路径
|
||
MODELS_CONFIGS = "/models/configs.txt"
|
||
# 保存语言字典
|
||
LangDict = {}
|
||
|
||
|
||
# 动态获取模型库列表
|
||
def _getlanguageList():
|
||
global LangDict
|
||
"""configs.txt 格式示例:
|
||
简体中文(V4)
|
||
ch_PP-OCRv4_det_infer.onnx
|
||
ch_ppocr_mobile_v2.0_cls_infer.onnx
|
||
rec_ch_PP-OCRv4_infer.onnx
|
||
dict_chinese.txt
|
||
|
||
"""
|
||
optionsList = []
|
||
configsPath = os.path.dirname(os.path.abspath(__file__)) + MODELS_CONFIGS
|
||
try:
|
||
with open(configsPath, "r", encoding="utf-8") as file:
|
||
content = file.read()
|
||
parts = content.split("\n\n")
|
||
for part in parts:
|
||
items = part.split("\n")
|
||
if len(items) == 5:
|
||
title, det, cls, rec, keys = items
|
||
LangDict[title] = {
|
||
"det": det,
|
||
"cls": cls,
|
||
"rec": rec,
|
||
"keys": keys,
|
||
}
|
||
optionsList.append([title, title])
|
||
return optionsList
|
||
except FileNotFoundError:
|
||
print("[Error] RapidOCR配置文件configs不存在,请检查文件路径是否正确。", configsPath)
|
||
except IOError:
|
||
print("[Error] RapidOCR配置文件configs无法打开或读取。")
|
||
return []
|
||
|
||
|
||
_LanguageList = _getlanguageList()
|
||
|
||
|
||
# 获取最佳线程数
|
||
def _getThreads():
|
||
try:
|
||
phyCore = psutil.cpu_count(logical=False) # 物理核心数
|
||
lgiCore = psutil.cpu_count(logical=True) # 逻辑核心数
|
||
if (
|
||
not isinstance(phyCore, int)
|
||
or not isinstance(lgiCore, int)
|
||
or lgiCore < phyCore
|
||
):
|
||
raise ValueError("核心数计算异常")
|
||
# 物理核数=逻辑核数,返回逻辑核数
|
||
if phyCore * 2 == lgiCore or phyCore == lgiCore:
|
||
return lgiCore
|
||
# 大小核处理器,返回大核线程数
|
||
big = lgiCore - phyCore
|
||
return big * 2
|
||
except Exception as e:
|
||
print("[Warning] 无法获取CPU核心数!", e)
|
||
return 4
|
||
|
||
|
||
_threads = _getThreads()
|
||
|
||
globalOptions = {
|
||
"title": tr("RapidOCR(本地)"),
|
||
"type": "group",
|
||
"numThread": {
|
||
"title": tr("线程数"),
|
||
"default": _threads,
|
||
"min": 1,
|
||
"isInt": True,
|
||
},
|
||
}
|
||
|
||
localOptions = {
|
||
"title": tr("文字识别(RapidOCR)"),
|
||
"type": "group",
|
||
"language": {
|
||
"title": tr("语言/模型库"),
|
||
"optionsList": _LanguageList,
|
||
},
|
||
"angle": {
|
||
"title": tr("纠正文本方向"),
|
||
"default": False,
|
||
"toolTip": tr("启用方向分类,识别倾斜或倒置的文本。可能降低识别速度。"),
|
||
},
|
||
"maxSideLen": {
|
||
"title": tr("限制图像边长"),
|
||
"optionsList": [
|
||
[1024, "1024 " + tr("(默认)")],
|
||
[2048, "2048"],
|
||
[4096, "4096"],
|
||
[999999, tr("无限制")],
|
||
],
|
||
"toolTip": tr("将边长大于该值的图片进行压缩,可以提高识别速度。可能降低识别精度。"),
|
||
},
|
||
}
|