File size: 1,376 Bytes
68b5c65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI, Header, HTTPException, Depends
from pydantic import BaseModel
from cin_validator import CINValidator
import os

app = FastAPI(
    title="Sahl Express CIN Validation Service",
    description="Microservice de validation et détection de carte d'identité (CIN)",
    version="1.0.0"
)

# API key for security, default provided for local development, should be overridden in HF space settings
API_KEY = os.getenv("CIN_API_KEY", "sahl_express_secret_key_123")

def verify_api_key(x_api_key: str = Header(None, alias="X-API-Key")):
    if x_api_key != API_KEY:
        raise HTTPException(status_code=401, detail="Invalid API Key")
    return x_api_key

# Instantiate validator globally to load YOLO model once at startup
validator = CINValidator()

class CINRequest(BaseModel):
    imageUrl: str
    side: str = "recto"  # "recto" or "verso"

@app.post("/validate-cin")
def validate_cin(data: CINRequest, api_key: str = Depends(verify_api_key)):
    """
    Télécharge l'image depuis Cloudinary, détecte la CIN et vérifie sa netteté et ses ancres visuelles.
    """
    result = validator.validate(data.imageUrl, data.side)
    return result

@app.get("/")
def read_root():
    return {
        "status": "active",
        "service": "Sahl Express CIN Validation Microservice",
        "info": "Consultez /docs pour l'interface Swagger."
    }