mirror of
https://github.com/sui-feng-cb/AzurLaneAutoScript1.git
synced 2026-08-18 20:45:58 +08:00
Adopt the standalone OnnxOcr from upstream PR #5893 (381bb8d05, by Horizon101011), which vendors cnocr's pure-Python pipeline so the ONNX path loads no mxnet at runtime. Backend is selected via deploy config, keeping onnxruntime a standard dependency and onnx the default. Co-authored-by: Horizon101011 <43370844+Horizon101011@users.noreply.github.com>
92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
from module.base.decorator import cached_property
|
|
|
|
|
|
class OcrModel:
|
|
@cached_property
|
|
def _OCR(self):
|
|
from module.exception import ScriptError
|
|
from module.webui.setting import State
|
|
backend = State.deploy_config.OcrBackend
|
|
if backend == 'mxnet':
|
|
from module.ocr.al_ocr import AlOcr as _OCR
|
|
elif backend == 'onnx':
|
|
try:
|
|
import onnxruntime
|
|
except ImportError:
|
|
from module.logger import logger
|
|
logger.warning('ONNX Runtime is not available, fallback to MXNet')
|
|
from module.ocr.al_ocr import AlOcr as _OCR
|
|
else:
|
|
from module.ocr.onnx_ocr import OnnxOcr as _OCR
|
|
else:
|
|
raise ScriptError(f'Unsupported OCR backend: {backend}')
|
|
return _OCR
|
|
|
|
def load(self):
|
|
_ = self._OCR
|
|
|
|
@cached_property
|
|
def azur_lane(self):
|
|
# Folder: ./bin/cnocr_models/azur_lane
|
|
# Size: 3.25MB (MXNet) / 3.26MB (ONNX)
|
|
# Model: densenet-lite-gru
|
|
# Epoch: 15
|
|
# Validation accuracy: 99.43%
|
|
# Font: Impact, AgencyFB-Regular, MStiffHeiHK-UltraBold
|
|
# Charset: 0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ:/- (Letter 'O' and <space> is not included)
|
|
# _num_classes: 39
|
|
return self._OCR(model_name='densenet-lite-gru', model_epoch=15,
|
|
root='./bin/cnocr_models/azur_lane', name='azur_lane')
|
|
|
|
@cached_property
|
|
def azur_lane_jp(self):
|
|
# Folder: ./bin/cnocr_models/azur_lane_jp
|
|
# Size: 3.25MB (MXNet) / 3.26MB (ONNX)
|
|
# Model: densenet-lite-gru
|
|
# Epoch: 20
|
|
# Validation accuracy: 99.01%
|
|
# Font: Impact, VibeMO Compressed Pro Thin, Folk R, Source Han Serif JP
|
|
# Charset: 0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ:/- (Letter 'O' and <space> is not included)
|
|
# _num_classes: 39
|
|
return self._OCR(model_name='densenet-lite-gru', model_epoch=20,
|
|
root='./bin/cnocr_models/azur_lane_jp', name='azur_lane_jp')
|
|
|
|
@cached_property
|
|
def cnocr(self):
|
|
# Folder: ./bin/cnocr_models/cnocr
|
|
# Size: 9.52MB (MXNet) / 9.52MB (ONNX)
|
|
# Model: densenet-lite-gru
|
|
# Epoch: 39
|
|
# Validation accuracy: 99.04%
|
|
# Font: Various
|
|
# Charset: Number, English character, Chinese character, symbols, <space>
|
|
# _num_classes: 6426
|
|
return self._OCR(model_name='densenet-lite-gru', model_epoch=39,
|
|
root='./bin/cnocr_models/cnocr', name='cnocr')
|
|
|
|
@cached_property
|
|
def jp(self):
|
|
# Folder: ./bin/cnocr_models/jp
|
|
# Size: 6.21MB (MXNet) / 6.22MB (ONNX)
|
|
# Model: densenet-lite-gru
|
|
# Epoch: 125
|
|
# _num_classes: 3052
|
|
return self._OCR(model_name='densenet-lite-gru', model_epoch=125,
|
|
root='./bin/cnocr_models/jp', name='jp')
|
|
|
|
@cached_property
|
|
def tw(self):
|
|
# Folder: ./bin/cnocr_models/tw
|
|
# Size: 8.43MB (MXNet) / 8.44MB (ONNX)
|
|
# Model: densenet-lite-gru
|
|
# Epoch: 63
|
|
# Validation accuracy: 99.24%
|
|
# Font: Various, 6 kinds
|
|
# Charset: Numbers, Upper english characters, Chinese traditional characters
|
|
# _num_classes: 5322
|
|
return self._OCR(model_name='densenet-lite-gru', model_epoch=63,
|
|
root='./bin/cnocr_models/tw', name='tw')
|
|
|
|
|
|
OCR_MODEL = OcrModel()
|