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

113 lines
2 KiB
Markdown

# 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
```bash
./bin/face_scan /percorso/immagine.jpg
```
## Esempio
```json
{
"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:
```json
{
"image": {
"path": "image.jpg",
"width": 1920,
"height": 1080
},
"faces": []
}
```
L'exit code resta `0`.
## Exit code
```text
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:
```text
Dimensione 128
Tipo logico float32
Norma L2 circa 1.0
Valori tutti finiti
```
Quando viene salvato in formato binario float32:
```text
128 x 4 byte = 512 byte
```