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.

Connectez-vous pour voir votre jeton dans les exemples. Sinon, remplacez TOKEN par le jeton de votre tableau de bord.

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 HTTPSignification
200Analyse réussie. Une image valide peut ne contenir aucun visage.
400Image, sélection de fonctions ou URL non valide. Consultez le message JSON.
401Jeton API absent ou non valide.
429Quota mensuel ou fréquence de requêtes dépassé. Consultez les en-têtes.
502 / 503 / 504Service 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.