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()