ow
This commit is contained in:
1 parent
419c22cb74
commit
59ec58a1eb
8 files changed
+1163
No files matched your search
@@ -0,0 +1,52 @@
|
||||
"""调用示例:上传本地图片,拿回结构化 JSON。
|
||||
|
||||
三种鉴权方式按需选一种(与服务端 .env 对应):
|
||||
1. 静态 token(推荐):TOKEN = "你的 token",走 Authorization: Bearer
|
||||
2. 短期 token:填 CLIENT_SECRET,脚本自动换 token(适合前端后端代理场景)
|
||||
3. 不配置:TOKEN 和 CLIENT_SECRET 都留空,服务端也必须未配鉴权
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
|
||||
import requests
|
||||
|
||||
BASE = "http://10.1.1.163:8000" # 换成你的服务地址
|
||||
TOKEN = "" # 静态 token(API_TOKENS 里那把)
|
||||
CLIENT_ID = "default"
|
||||
CLIENT_SECRET = "" # 填了就走短期 token 流程
|
||||
|
||||
|
||||
def get_token() -> str:
|
||||
"""用 client_secret 换一个短期 token。"""
|
||||
r = requests.post(
|
||||
f"{BASE}/api/v1/auth/token",
|
||||
json={"client_id": CLIENT_ID, "client_secret": CLIENT_SECRET},
|
||||
timeout=10,
|
||||
)
|
||||
r.raise_for_status()
|
||||
data = r.json()
|
||||
print(f"[token] 有效期 {data['expires_in']}s", file=sys.stderr)
|
||||
return data["token"]
|
||||
|
||||
|
||||
def recognize(path: str, side: str = "auto", mask: bool = False) -> dict:
|
||||
token = TOKEN or (get_token() if CLIENT_SECRET else "")
|
||||
headers = {"Authorization": f"Bearer {token}"} if token else {}
|
||||
|
||||
with open(path, "rb") as f:
|
||||
r = requests.post(
|
||||
f"{BASE}/api/v1/idcard/recognize",
|
||||
files={"file": (path, f, "image/jpeg")},
|
||||
data={"side": side, "mask": str(mask).lower()},
|
||||
headers=headers,
|
||||
timeout=120, # 低端 NAS 第一次要加载模型,给足时间
|
||||
)
|
||||
if r.status_code == 401:
|
||||
raise SystemExit("鉴权失败:token 无效或已过期(检查 .env 里的 API_TOKENS / CLIENT_SECRET)")
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
path = sys.argv[1] if len(sys.argv) > 1 else "idcard.jpg"
|
||||
print(json.dumps(recognize(path), ensure_ascii=False, indent=2))
|
||||
Reference in new issue
Block a user