File size: 1,731 Bytes
49a46c9 | 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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import os
import requests
import cv2
import numpy as np
BASE_URL = os.environ.get(
"ID_API_URL",
"http://127.0.0.1:8082"
)
ENDPOINTS = {
"id": f"{BASE_URL}/api/check_id",
"credit": f"{BASE_URL}/api/check_credit",
"mrz": f"{BASE_URL}/api/check_mrz",
}
def _load_image(image):
if image is None:
return None
if isinstance(image, str):
img = cv2.imread(image)
if img is None:
return None
return img
return image
def _check_document(image, endpoint_key: str) -> dict:
img = _load_image(image)
if img is None:
return {"error": "No image provided"}
success, img_encoded = cv2.imencode('.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 95])
if not success:
return {"error": "Failed to encode image"}
url = ENDPOINTS.get(endpoint_key)
if not url:
return {"error": f"Unknown endpoint: {endpoint_key}"}
try:
response = requests.post(
url,
files={"image": ("image.jpg", img_encoded.tobytes(), "image/jpeg")},
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.ConnectionError:
return {"error": f"Cannot connect to server at {BASE_URL}. Make sure the SDK server is running."}
except requests.exceptions.Timeout:
return {"error": "Request timed out"}
except requests.exceptions.RequestException as e:
return {"error": f"API request failed: {str(e)}"}
def check_id(image) -> dict:
return _check_document(image, "id")
def check_credit(image) -> dict:
return _check_document(image, "credit")
def check_mrz(image) -> dict:
return _check_document(image, "mrz")
|