Stima la regione di ritaglio quadrato centrata sul volto
Un volto di 200 × 240 in posizione 400, 250 su una foto di 1200 × 900 dà un quadrato di 360 pixel che parte da x 320, y 190, con il volto centrato e un quarto di margine su ogni lato. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Larghezza
- 1200
- Altezza
- 900
- Volto X
- 400
- Volto Y
- 250
- Larghezza del volto
- 200
- Altezza del volto
- 240
- X
- 320
- Y
- 190
- Lato
- 360
- Destra
- 680
Lo stimatore di ritaglio centrato sul volto trasforma il risultato di un rilevamento facciale in una regione di ritaglio quadrata pronta all'uso. Lei invia le dimensioni dell'immagine e il bounding box del volto rilevato — left, top, larghezza e altezza — più un margine opzionale, e riceve x, y e lato esatti di un quadrato che mantiene il volto centrato e interamente dentro l'immagine. Nessun pixel viene caricato, decodificato o trasformato: è geometria pura e deterministica, il passo di pianificazione da eseguire prima del ritaglio vero e proprio.
Perché stimare il ritaglio prima di ritagliare
Il ritaglio basato sul volto è ovunque: foto profilo, generatori di avatar, miniature per un elenco di persone, anteprime intelligenti in una libreria fotografica. In tutti questi casi la parte costosa è decodificare e ricodificare l'immagine, e la parte fastidiosa è scoprire dopo che l'inquadratura era sbagliata — il volto tagliato sul bordo, il quadrato fuori centro, il margine troppo stretto per una maschera circolare. Questa capability separa la decisione economica dall'esecuzione costosa.
Lei ha già eseguito un rilevatore di volti e possiede un bounding box; invece di passare l'immagine direttamente a una pipeline sperando nel risultato migliore, chiede prima la regione di ritaglio esatta.
Come viene calcolata la regione
L'algoritmo è volutamente semplice e completamente deterministico. Per prima cosa individua il centro del bounding box del volto. Il lato del quadrato parte dal maggiore tra larghezza e altezza del volto, scalato di uno più due volte il margine — quindi il margine predefinito di 0.25 aggiunge un quarto della dimensione del volto su ogni lato, producendo un quadrato pari a una volta e mezzo il lato maggiore del volto, un'inquadratura confortevole per i ritratti.
Se il quadrato risulta più grande dell'immagine stessa, viene ridotto alla dimensione minore dell'immagine. Il quadrato viene poi centrato sul centro del volto e, quando sporgerebbe oltre un bordo, spostato di nuovo dentro l'immagine — limitato, mai deformato — così la regione restituita è sempre un ritaglio valido e contenuto nei limiti.
Dove si colloca in una pipeline
Il flusso tipico è: eseguire il rilevatore di volti preferito, prendere il miglior bounding box, chiamare questo stimatore e poi passare la regione restituita a un ritagliatore reale come la capability image.crop o al proprio worker di miniature. Poiché lo stimatore non tocca mai i byte dell'immagine, può usarlo anche solo sui metadati — ad esempio per decidere, prima di scaricare qualsiasi cosa, se un volto rilevato vicino al bordo produrrà un quadrato utilizzabile o richiederà un layout diverso.
Il parametro margine è la sua unica manopola: 0 dà un quadrato aderente esattamente attorno al lato maggiore del volto, 0.25 è l'inquadratura predefinita per i ritratti, e 0.5 o più lascia spazio per capelli e spalle.
Casi d'uso
Generare avatar quadrati dai caricamenti
Prenda il box del volto dal suo rilevatore e ottenga il quadrato esatto da passare al worker di ritaglio, con un margine che resiste a una maschera circolare.
Verificare in anticipo una pipeline di miniature
Convalidi i box dei volti e calcoli le regioni di ritaglio dai soli metadati, prima di pagare il costo di decodifica e ricodifica di una singola immagine.
Verificare i ritagli automatici
Conservi la regione stimata accanto a ogni asset, così un avatar mal inquadrato può essere ricondotto alle coordinate esatte che lo hanno prodotto.
Domande frequenti
Quanto costa?
È anche gratuito nel browser su questa pagina, con esattamente lo stesso risultato.
Devo caricare l'immagine?
No. Vengono inviate solo le dimensioni dell'immagine e il bounding box del volto — sei numeri. Nessun dato pixel viene trasmesso, elaborato o archiviato.
Cosa succede se il box del volto esce dall'immagine?
Un box del volto fuori dall'immagine è quasi sempre un bug di rilevamento o di mappatura delle coordinate, e viene segnalato invece di essere ritagliato silenziosamente.
E se il quadrato superasse un bordo?
Il quadrato viene spostato di nuovo dentro l'immagine mantenendo le sue dimensioni e, se è più grande dell'immagine stessa, viene ridotto alla sua dimensione minore. La regione restituita è sempre interamente nei limiti.
A cosa serve il margine?
Aggiunge spazio di respiro attorno al volto come frazione del suo lato maggiore. Il valore predefinito 0.25 produce un quadrato pari a 1.5 volte il lato maggiore del volto; 0 dà un ritaglio aderente e 0.5 lascia uno spazio generoso.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/image/crop-face-center-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"width":1200,"height":900,"face_x":400,"face_y":250,"face_width":200,"face_height":240}'const res = await fetch("https://api.kit.forhosting.com/image/crop-face-center-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"width": 1200,
"height": 900,
"face_x": 400,
"face_y": 250,
"face_width": 200,
"face_height": 240
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/crop-face-center-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"width": 1200,
"height": 900,
"face_x": 400,
"face_y": 250,
"face_width": 200,
"face_height": 240
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/crop-face-center-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"width":1200,"height":900,"face_x":400,"face_y":250,"face_width":200,"face_height":240}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"width":1200,"height":900,"face_x":400,"face_y":250,"face_width":200,"face_height":240}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/crop-face-center-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"width": 1200,
"height": 900,
"face_x": 400,
"face_y": 250,
"face_width": 200,
"face_height": 240
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.crop_face_center_estimate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_mb | 15 |
max_megapixels | 12 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Funziona gratis nel browser su questa pagina e tramite API a $0.002 per chiamata.
Perché stimare il ritaglio prima di ritagliare
La risposta è un semplice oggetto JSON con x, y e lato, da consegnare a qualsiasi strumento di ritaglio, da ImageMagick a un elemento canvas, oppure da conservare accanto all'asset affinché la decisione sia verificabile. Poiché il calcolo è aritmetica pura su sei numeri, costa quasi nulla, risponde in microsecondi e si comporta in modo identico nel browser e sull'API, così può prototipare in modo interattivo e automatizzare in seguito senza ricontrollare alcun risultato.
Come viene calcolata la regione
Il box del volto stesso viene validato in modo rigoroso: origini negative, dimensioni non positive e box che superano i bordi dell'immagine generano un errore invalid_input invece di produrre silenziosamente un ritaglio difettoso, perché un box del volto fuori dall'immagine è un bug del rilevatore che merita di essere segnalato.
Dove si colloca in una pipeline
Tutto viene eseguito sul nostro edge globale senza archiviare nulla, e lo stesso modulo alimenta il calcolatore gratuito di questa pagina, quindi il numero che vede nel browser è byte per byte quello che l'API restituisce quando automatizza la chiamata.
Domande tecniche
Il risultato è deterministico?
Sì. È aritmetica pura: stesso input, stesse coordinate, nel browser e sull'API, senza casualità, orologi o rete coinvolti.