Documentation de l’API d’analyse de visages
Envoyez une image et recevez un tableau JSON faces. Chaque visage contient les fonctions demandées. Une image valide sans visage détecté renvoie un tableau vide.
Effectuez votre première requête
Utilisez votre jeton API et un fichier image local. Ces exemples demandent uniquement les rectangles des visages pour vérifier l’intégration avec une image compatible.
cURL
curl --request POST 'https://www.rosto.io/api/v1/features' \
--header 'Authorization: Bearer TOKEN' \
--form 'features=bounds' \
--form 'image=@photo.jpg'
Python 3
import requests
with open("photo.jpg", "rb") as image_file:
response = requests.post(
"https://www.rosto.io/api/v1/features",
headers={"Authorization": "Bearer TOKEN"},
data={"features": "bounds"},
files={"image": image_file},
timeout=90,
)
response.raise_for_status()
print(response.json())
Ruby
require 'json'
require 'faraday'
connection = Faraday.new('https://www.rosto.io') do |http|
http.request :multipart
http.adapter Faraday.default_adapter
end
response = connection.post('/api/v1/features') do |request|
request.headers['Authorization'] = 'Bearer TOKEN'
request.body = {
features: 'bounds',
image: Faraday::UploadIO.new('photo.jpg', 'image/jpeg')
}
end
puts JSON.parse(response.body)
Comprenez la réponse
Cette réponse illustrative contient un visage détecté. Les coordonnées et prédictions dépendent de l’image ; les exemples ne garantissent pas les résultats.
{
"faces": [
{"bounds": {"left": 35, "top": 77, "right": 221, "bottom": 263}}
]
}
Envoyez une URL d’image publique
Au lieu d’envoyer un fichier, fournissez url vers une image HTTPS publique. Les adresses de réseau privé et les images non prises en charge sont refusées.
curl --request POST 'https://www.rosto.io/api/v1/features' \
--header 'Authorization: Bearer TOKEN' \
--data-urlencode 'features=bounds,landmarks' \
--data-urlencode 'url=https://example.com/photo.jpg'
Choisissez les fonctions
Envoyez les noms séparés par des virgules dans un formulaire, ou un tableau features en JSON. Omettez features pour tout demander. Limiter la sélection réduit les calculs.
bounds · Détection de visages
Localisez les visages et obtenez leurs rectangles de délimitation.
{
"faces": [
{
"bounds": {
"left": 35,
"top": 77,
"right": 221,
"bottom": 263
}
}
]
}
landmarks · Repères faciaux
Obtenez les points de contour des yeux, du nez, de la bouche et de la mâchoire.
{
"faces": [
{
"landmarks": {
"left_eye_center": {
"x": 160,
"y": 132
},
"right_eye_center": {
"x": 99,
"y": 132
},
"mouth_center": {
"x": 129,
"y": 203
}
}
}
]
}
age · Estimation de l’âge
Obtenez l’estimation d’âge du modèle pour chaque visage.
{
"faces": [
{
"age": 20
}
]
}
gender · Présentation visuelle
Les scores historiques man/woman décrivent la présentation visuelle, pas l’identité de genre.
{
"faces": [
{
"gender": {
"value": "man",
"probability": 0.84,
"classes": {
"man": 0.84,
"woman": 0.16
}
}
}
]
}
emotion · Scores d’expression
Obtenez les scores du modèle pour sept catégories d’expressions faciales.
{
"faces": [
{
"emotion": {
"value": "neutral",
"probability": 0.71,
"classes": {
"angry": 0.08,
"disgust": 0.0,
"fear": 0.02,
"happy": 0.02,
"neutral": 0.71,
"sad": 0.16,
"surprise": 0.0
}
}
}
]
}
ethnicity · Scores de classes historiques
Le champ ethnicity expose les scores de classes du modèle existant.
{
"faces": [
{
"ethnicity": {
"value": "white",
"probability": 0.9,
"classes": {
"asian": 0.03,
"black": 0.02,
"indian": 0.05,
"white": 0.9
}
}
}
]
}
glasses · Détection de lunettes
Distinguez les lunettes, les lunettes de natation et l’absence de lunettes.
{
"faces": [
{
"glasses": {
"value": "not-using-glasses",
"probability": 0.95,
"classes": {
"not-using-glasses": 0.95,
"using-glasses": 0.04,
"swimming-goggles": 0.01
}
}
}
]
}
smile · Détection du sourire
Obtenez une prédiction de sourire et sa probabilité.
{
"faces": [
{
"smile": {
"is_smiling": false,
"probability": 0.2
}
}
]
}
hair · Segmentation des cheveux
Obtenez les contours des cheveux et leur couleur dominante.
{
"faces": [
{
"hair": {
"polygons": [
[
{
"x": 40,
"y": 30
},
{
"x": 75,
"y": 10
},
{
"x": 110,
"y": 35
}
]
],
"color": {
"name": "black",
"hex": "#131218"
}
}
}
]
}
pose · Orientation de la tête
Mesurez les angles de lacet, de roulis et de tangage.
{
"faces": [
{
"pose": {
"x_roll": -5,
"y_pitch": -5,
"z_yaw": 6
}
}
]
}
quality · Qualité de l’image
Évaluez le flou et l’exposition d’une image.
{
"faces": [
{
"blur": {
"is_blurry": false
},
"exposure": {
"level": "balanced"
}
}
]
}
Les résultats des modèles sont des estimations. Les libellés font partie du contrat historique de l’API et n’établissent pas l’identité d’une personne.
Formats, limites et erreurs
Les images JPEG, PNG, WebP et BMP jusqu’à 4 Mio sont prises en charge. Les requêtes JSON peuvent contenir une image en base64. Utilisez votre jeton ; la démo anonyme a ses propres limites.
| Statut HTTP | Signification |
|---|---|
200 | Analyse réussie. Une image valide peut ne contenir aucun visage. |
400 | Image, sélection de fonctions ou URL non valide. Consultez le message JSON. |
401 | Jeton API absent ou non valide. |
429 | Quota mensuel ou fréquence de requêtes dépassé. Consultez les en-têtes. |
502 / 503 / 504 | Service temporairement indisponible. Réessayez plus tard. |
Les requêtes réussies comptent une fois, même sans visage détecté. Les échecs ne comptent pas. Les quotas mensuels sont réinitialisés en UTC ; X-Quota-Limit, X-Quota-Remaining et X-Quota-Reset décrivent le quota actuel.