This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

Passport Photo

Generatore di foto tessera e per documenti basato sull'AI. Flusso di lavoro in due fasi: analisi (rilevamento del volto + rimozione dello sfondo) e poi generazione (ritaglio, ridimensionamento e composizione per la stampa).

API Endpoints

Questo strumento usa un flusso in due fasi con endpoint separati per l'analisi e la generazione.

Bundle dei modelli: background-removal e face-detection


Phase 1: Analyze

POST /api/v1/tools/image/passport-photo/analyze

Rileva i punti di riferimento del volto e rimuove lo sfondo. Restituisce i dati dei punti di riferimento e un'anteprima affinché il frontend possa mostrare un'anteprima del ritaglio.

Parameters

ParameterTypeRequiredDefaultDescription
filefileYes-File immagine (multipart)
clientJobIdstringNo-ID del job opzionale per il tracciamento dell'avanzamento tramite SSE

Example Request

bash
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/analyze \
  -F "[email protected]"

Response (200 OK)

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "filename": "headshot.jpg",
  "preview": "<base64-encoded PNG>",
  "previewWidth": 800,
  "previewHeight": 1067,
  "landmarks": {
    "leftEye": { "x": 0.42, "y": 0.35 },
    "rightEye": { "x": 0.58, "y": 0.35 },
    "eyeCenter": { "x": 0.50, "y": 0.35 },
    "chin": { "x": 0.50, "y": 0.65 },
    "forehead": { "x": 0.50, "y": 0.22 },
    "crown": { "x": 0.50, "y": 0.18 },
    "nose": { "x": 0.50, "y": 0.48 },
    "faceCenterX": 0.50
  },
  "imageWidth": 2400,
  "imageHeight": 3200
}

Progress (SSE, optional)

Se viene fornito clientJobId, l'avanzamento viene trasmesso in streaming (0-30% per il rilevamento del volto, 30-95% per la rimozione dello sfondo).

Error: No Face Detected (422)

json
{
  "error": "No face detected",
  "details": "Could not detect a face in the uploaded image. Please upload a clear, front-facing photo with good lighting."
}

Phase 2: Generate

POST /api/v1/tools/image/passport-photo/generate

Ritaglia, ridimensiona e facoltativamente compone la foto su un foglio di stampa. Usa le immagini in cache dalla Fase 1 (nessuna riesecuzione dell'AI).

Parameters (JSON body)

ParameterTypeRequiredDefaultDescription
jobIdstringYes-ID del job dalla Fase 1
filenamestringYes-Nome file originale dalla Fase 1
countryCodestringYes-Codice paese per le specifiche del passaporto (ad es. US, GB, IN)
documentTypestringNo"passport"Tipo di documento (dalle specifiche del paese)
bgColorstringNo"#FFFFFF"Colore di sfondo in esadecimale
printLayoutstringNo"none"Layout della carta da stampa: none, 4x6, a4
maxFileSizeKbnumberNo0Vincolo di dimensione massima del file in KB (0 = nessun limite)
dpinumberNo300DPI di output (72-1200)
customWidthMmnumberNo-Larghezza personalizzata della foto in mm (sovrascrive le specifiche del paese)
customHeightMmnumberNo-Altezza personalizzata della foto in mm (sovrascrive le specifiche del paese)
zoomnumberNo1Fattore di zoom (0.5-3). Valori > 1 ritagliano più stretto
adjustXnumberNo0Regolazione della posizione orizzontale
adjustYnumberNo0Regolazione della posizione verticale
landmarksobjectYes-Oggetto dei punti di riferimento dalla risposta della Fase 1
imageWidthnumberYes-Larghezza dell'immagine dalla risposta della Fase 1
imageHeightnumberYes-Altezza dell'immagine dalla risposta della Fase 1

Example Request

bash
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/generate \
  -H "Content-Type: application/json" \
  -d '{
    "jobId": "a1b2c3d4-...",
    "filename": "headshot.jpg",
    "countryCode": "US",
    "documentType": "passport",
    "bgColor": "#FFFFFF",
    "printLayout": "4x6",
    "dpi": 300,
    "zoom": 1,
    "adjustX": 0,
    "adjustY": 0,
    "landmarks": { "leftEye": {"x":0.42,"y":0.35}, "rightEye": {"x":0.58,"y":0.35}, "eyeCenter": {"x":0.50,"y":0.35}, "chin": {"x":0.50,"y":0.65}, "forehead": {"x":0.50,"y":0.22}, "crown": {"x":0.50,"y":0.18}, "nose": {"x":0.50,"y":0.48}, "faceCenterX": 0.50 },
    "imageWidth": 2400,
    "imageHeight": 3200
  }'

Response (200 OK)

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "downloadUrl": "/api/v1/download/{jobId}/headshot_passport.jpg",
  "dimensions": {
    "widthMm": 51,
    "heightMm": 51,
    "widthPx": 602,
    "heightPx": 602,
    "dpi": 300
  },
  "spec": {
    "country": "United States",
    "countryCode": "US",
    "documentType": "passport",
    "documentLabel": "Passport"
  },
  "printDownloadUrl": "/api/v1/download/{jobId}/headshot_passport_print_4x6.jpg"
}

Base Route

POST /api/v1/tools/image/passport-photo

Restituisce indicazioni su quale sotto-endpoint corretto usare.

json
{
  "error": "Use /api/v1/tools/image/passport-photo/analyze or /generate"
}

Notes

  • Richiede l'installazione dei bundle dei modelli background-removal e face-detection.
  • La Fase 1 esegue l'AI (punti di riferimento del volto + rimozione dello sfondo) e memorizza i risultati in cache. La Fase 2 è pura manipolazione dell'immagine con Sharp (veloce, senza bisogno di AI).
  • I punti di riferimento vengono restituiti come coordinate normalizzate (intervallo 0-1 relativo alle dimensioni dell'immagine).
  • Il campo preview nella risposta di analisi è un PNG codificato in base64 (max 800px di larghezza) per una visualizzazione rapida.
  • Le specifiche dei paesi includono le dimensioni del documento, i rapporti di altezza della testa e il posizionamento della linea degli occhi in base ai requisiti ufficiali delle foto per il passaporto.
  • L'opzione printLayout genera un foglio composto su carta 4x6" o A4 con margini di 2mm tra le foto.
  • Quando è impostato maxFileSizeKb, l'output viene compresso iterativamente per rientrare nel limite di dimensione.