File size: 1,307 Bytes
b7fe650 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/usr/bin/env python3
"""批量验证码识别器(准确性测试用)。
加载 old / beta 两个 ddddocr 模型,各跑一次完整字符集和一次字母数字限定字符集,
对每个输入图片输出 4 个变体的识别结果 JSON。
用法: ocr.py file.png ... > result.json
"""
import json
import sys
import ddddocr
ALNUM = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
_VARIANTS = {}
def _make(**kwargs):
ocr = ddddocr.DdddOcr(show_ad=False, **kwargs)
ocr.set_ranges(ALNUM)
return ocr
def _load():
if _VARIANTS:
return _VARIANTS
_VARIANTS["old"] = _make(old=True)
_VARIANTS["old_r"] = _make(old=True)
_VARIANTS["beta"] = _make(beta=True)
_VARIANTS["beta_r"] = _make(beta=True)
return _VARIANTS
def main():
files = sys.argv[1:]
if not files:
print("usage: ocr.py file.png ... > result.json", file=sys.stderr)
sys.exit(2)
variants = _load()
out = {}
for f in files:
try:
data = open(f, "rb").read()
row = {k: variants[k].classification(data) for k in variants}
except Exception as e: # noqa: BLE001
row = {"err": str(e)}
out[f] = row
print(json.dumps(out, ensure_ascii=False))
if __name__ == "__main__":
main()
|