#!/usr/bin/env python3 """用原始图训练的 ONNX 模型识别验证码。预处理: RGB 160x64 /255 -> (1,3,64,160) -> 4位数字 """ import json import os import sys import numpy as np import onnxruntime as ort from PIL import Image MODEL = os.path.expanduser("~/sp_captcha_assets/models/captcha_1000_raw.onnx") _sess = None def _get_sess(): global _sess if _sess is None: _sess = ort.InferenceSession(MODEL, providers=["CPUExecutionProvider"]) return _sess def predict(path): im = Image.open(path).convert("RGB").resize((160, 64), Image.BILINEAR) a = np.asarray(im, dtype=np.float32) / 255.0 x = a.transpose(2, 0, 1)[None] out = _get_sess().run(None, {"input": x})[0] return "".join(str(int(out[0, p].argmax())) for p in range(4)) def main(): out = {} for f in sys.argv[1:]: try: out[f] = {"onnx": predict(f)} except Exception as e: out[f] = {"onnx": "", "err": str(e)} print(json.dumps(out, ensure_ascii=False)) if __name__ == "__main__": main()