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("将边长大于该值的图片进行压缩,可以提高识别速度。可能降低识别精度。"),
|
|||
|
|
},
|
|||
|
|
}
|