60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
"""阿里云护照 OCR 联调脚本。
|
|
|
|
用法:
|
|
# 测本地图片
|
|
python3 scripts/test_ocr_passport.py /path/to/passport.jpg
|
|
|
|
# 测公网 URL
|
|
python3 scripts/test_ocr_passport.py --url https://example.com/passport.jpg
|
|
|
|
前置:
|
|
pip install -r requirements.txt
|
|
在项目根目录的 .env 填好:
|
|
ALIYUN_OCR_ACCESS_KEY_ID=
|
|
ALIYUN_OCR_ACCESS_KEY_SECRET=
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# 让脚本能在仓库根目录直接运行
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
|
|
from app.aliyun_ocr import OcrCallError, OcrConfigError, recognize_passport # noqa: E402
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="阿里云护照 OCR 自检")
|
|
parser.add_argument("image", nargs="?", help="本地图片路径")
|
|
parser.add_argument("--url", help="公网图片 URL")
|
|
args = parser.parse_args()
|
|
|
|
if not args.image and not args.url:
|
|
parser.error("请提供本地图片路径或 --url")
|
|
|
|
try:
|
|
if args.image:
|
|
path = Path(args.image).expanduser().resolve()
|
|
if not path.is_file():
|
|
print(f"[FAIL] 文件不存在: {path}", file=sys.stderr)
|
|
return 2
|
|
data = recognize_passport(image_bytes=path.read_bytes())
|
|
else:
|
|
data = recognize_passport(image_url=args.url)
|
|
except OcrConfigError as exc:
|
|
print(f"[CONFIG] {exc}", file=sys.stderr)
|
|
return 3
|
|
except OcrCallError as exc:
|
|
print(f"[CALL] {exc}", file=sys.stderr)
|
|
return 4
|
|
|
|
print(json.dumps(data, ensure_ascii=False, indent=2))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|