| import os |
| import requests |
| import cv2 |
| import numpy as np |
|
|
| API_URL = os.environ.get( |
| "ID_LIVENESS_API_URL", |
| "http://127.0.0.1:8093/api/check_id_liveness" |
| ) |
|
|
|
|
| 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_liveness(image): |
| 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"} |
|
|
| try: |
| response = requests.post( |
| API_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": "Cannot connect to liveness detection server. 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)}"} |
| except ValueError as e: |
| return {"error": f"Invalid response from server (not JSON): {str(e)}"} |
|
|