| #!/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() | |