Files
Cloud-Tour-to-Libo/scripts/test_ocr_passport.py

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