Files

80 lines
2.6 KiB
Python

# 调用 RapidOCR-json.exe 的 Python Api
# 项目主页:
# https://github.com/hiroi-sora/RapidOCR-json
import os
from .rapidocr import Rapid_pipe
from .rapidocr_config import LangDict
# exe路径
ExePath = os.path.dirname(os.path.abspath(__file__)) + "/RapidOCR-json.exe"
class Api: # 公开接口
def __init__(self, globalArgd):
# 测试路径是否存在
if not os.path.exists(ExePath):
raise ValueError(f'[Error] Exe path "{ExePath}" does not exist.')
# 初始化参数
self.api = None # api对象
self.exeConfigs = { # exe启动参数字典
"models": "models",
"ensureAscii": 1,
"det": None,
"cls": None,
"rec": None,
"keys": None,
"doAngle": 0,
"mostAngle": 0,
"maxSideLen": None,
"numThread": globalArgd["numThread"],
}
def start(self, argd): # 启动引擎。返回: "" 成功,"[Error] xxx" 失败
# 加载局部参数
tempConfigs = self.exeConfigs.copy()
try:
lang = LangDict[argd["language"]]
tempConfigs.update(lang)
if argd["angle"]:
tempConfigs["doAngle"] = tempConfigs["mostAngle"] = 1
else:
tempConfigs["doAngle"] = tempConfigs["mostAngle"] = 0
tempConfigs["maxSideLen"] = argd["maxSideLen"]
except Exception as e:
self.api = None
return f"[Error] OCR start fail. Argd: {argd}\n{e}"
# 若引擎已启动,且局部参数与传入参数一致,则无需重启
if not self.api == None:
if set(tempConfigs.items()) == set(self.exeConfigs.items()):
return ""
# 若引擎已启动但需要更改参数,则停止旧引擎
self.stop()
# 启动新引擎
self.exeConfigs = tempConfigs
try:
self.api = Rapid_pipe(ExePath, tempConfigs)
except Exception as e:
self.api = None
return f"[Error] OCR init fail. Argd: {tempConfigs}\n{e}"
return ""
def stop(self): # 停止引擎
if self.api == None:
return
self.api.exit()
self.api = None
def runPath(self, imgPath: str): # 路径识图
res = self.api.run(imgPath)
return res
def runBytes(self, imageBytes): # 字节流
res = self.api.runBytes(imageBytes)
return res
def runBase64(self, imageBase64): # base64字符串
res = self.api.runBase64(imageBase64)
return res