face-clustering-rk3588./docs/json-format.md

2 KiB

Formato JSON di face_scan

face_scan scrive un singolo oggetto JSON su standard output.

Gli errori e i messaggi diagnostici vengono scritti su standard error.

Invocazione

./bin/face_scan /percorso/immagine.jpg

Esempio

{
  "image": {
    "path": "/percorso/immagine.jpg",
    "width": 1500,
    "height": 2000
  },
  "faces": [
    {
      "face_index": 0,
      "score": 0.8671875,
      "bbox": {
        "x": 1079.3457,
        "y": 489.648438,
        "width": 131.591797,
        "height": 182.275391
      },
      "landmarks": [
        [1107.8125, 558.325195],
        [1170.99609, 559.423828],
        [1134.17969, 594.500732],
        [1106.22559, 615.83252],
        [1168.34717, 616.967773]
      ],
      "embedding": [
        -0.0426222458,
        0.0678814054
      ]
    }
  ]
}

L'array embedding reale contiene sempre 128 valori.

Oggetto image

Campi disponibili:

  • path: percorso ricevuto dal programma;
  • width: larghezza originale dell'immagine;
  • height: altezza originale dell'immagine.

Oggetto face

Campi disponibili:

  • face_index: indice sequenziale del volto;
  • score: confidence SCRFD;
  • bbox.x: coordinata sinistra;
  • bbox.y: coordinata superiore;
  • bbox.width: larghezza;
  • bbox.height: altezza;
  • landmarks: cinque coppie di coordinate;
  • embedding: vettore L2-normalizzato di 128 elementi.

Immagini senza volti

Un'immagine elaborata correttamente ma senza volti produce:

{
  "image": {
    "path": "image.jpg",
    "width": 1920,
    "height": 1080
  },
  "faces": []
}

L'exit code resta 0.

Exit code

0   scansione completata
2   argomenti non validi
3   inizializzazione FaceEngine fallita
4   caricamento o elaborazione immagine fallita
5   risultato facciale o embedding non valido

Requisiti dell'embedding

Per ogni volto:

Dimensione   128
Tipo logico  float32
Norma L2     circa 1.0
Valori       tutti finiti

Quando viene salvato in formato binario float32:

128 x 4 byte = 512 byte