Documentação da API de análise facial

Envie uma imagem e receba um array faces em JSON. Cada rosto contém os recursos solicitados. Uma imagem válida sem rostos detectados retorna um array vazio.

Faça sua primeira requisição

Use seu token da API e uma imagem local. Estes exemplos solicitam apenas as caixas dos rostos, para verificar a integração com qualquer imagem compatível.

Entre para ver seu token nos exemplos. Caso contrário, substitua TOKEN pelo token do seu painel.

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)

Entenda a resposta

Esta resposta ilustrativa contém um rosto detectado. As coordenadas e previsões dependem da imagem; os valores de exemplo não são resultados garantidos.

{
  "faces": [
    {"bounds": {"left": 35, "top": 77, "right": 221, "bottom": 263}}
  ]
}

Envie uma URL pública de imagem

Em vez de enviar um arquivo, envie url com uma imagem HTTPS pública. Endereços de rede privada e imagens não compatíveis são rejeitados.

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'

Escolha os recursos

Envie nomes separados por vírgulas em um formulário ou um array features em JSON. Omita features para solicitar todos. Pedir apenas o necessário reduz o processamento.

bounds · Detecção de rostos

Localize rostos e receba suas caixas delimitadoras.

{
  "faces": [
    {
      "bounds": {
        "left": 35,
        "top": 77,
        "right": 221,
        "bottom": 263
      }
    }
  ]
}

landmarks · Pontos faciais

Obtenha os pontos de contorno dos olhos, nariz, boca e mandíbula.

{
  "faces": [
    {
      "landmarks": {
        "left_eye_center": {
          "x": 160,
          "y": 132
        },
        "right_eye_center": {
          "x": 99,
          "y": 132
        },
        "mouth_center": {
          "x": 129,
          "y": 203
        }
      }
    }
  ]
}

age · Estimativa de idade

Receba a estimativa de idade do modelo para cada rosto.

{
  "faces": [
    {
      "age": 20
    }
  ]
}

gender · Apresentação visual

As classes legadas man/woman descrevem a apresentação visual, não a identidade de gênero.

{
  "faces": [
    {
      "gender": {
        "value": "man",
        "probability": 0.84,
        "classes": {
          "man": 0.84,
          "woman": 0.16
        }
      }
    }
  ]
}

emotion · Pontuações de expressão

Receba as pontuações do modelo para sete categorias de expressão facial.

{
  "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 · Pontuações de classes legadas

O campo ethnicity fornece as pontuações de classes do modelo existente.

{
  "faces": [
    {
      "ethnicity": {
        "value": "white",
        "probability": 0.9,
        "classes": {
          "asian": 0.03,
          "black": 0.02,
          "indian": 0.05,
          "white": 0.9
        }
      }
    }
  ]
}

glasses · Detecção de óculos

Diferencie óculos, óculos de natação e ausência de óculos.

{
  "faces": [
    {
      "glasses": {
        "value": "not-using-glasses",
        "probability": 0.95,
        "classes": {
          "not-using-glasses": 0.95,
          "using-glasses": 0.04,
          "swimming-goggles": 0.01
        }
      }
    }
  ]
}

smile · Detecção de sorriso

Receba a previsão de sorriso e sua probabilidade.

{
  "faces": [
    {
      "smile": {
        "is_smiling": false,
        "probability": 0.2
      }
    }
  ]
}

hair · Segmentação de cabelo

Obtenha os contornos do cabelo e sua cor predominante.

{
  "faces": [
    {
      "hair": {
        "polygons": [
          [
            {
              "x": 40,
              "y": 30
            },
            {
              "x": 75,
              "y": 10
            },
            {
              "x": 110,
              "y": 35
            }
          ]
        ],
        "color": {
          "name": "black",
          "hex": "#131218"
        }
      }
    }
  ]
}

pose · Posição da cabeça

Meça os ângulos de rotação, inclinação lateral e inclinação vertical.

{
  "faces": [
    {
      "pose": {
        "x_roll": -5,
        "y_pitch": -5,
        "z_yaw": 6
      }
    }
  ]
}

quality · Qualidade da imagem

Verifique o desfoque e a exposição de uma imagem.

{
  "faces": [
    {
      "blur": {
        "is_blurry": false
      },
      "exposure": {
        "level": "balanced"
      }
    }
  ]
}

As saídas dos modelos são estimativas. As classes fazem parte do contrato legado da API e não estabelecem a identidade de uma pessoa.

Formatos, limites e erros

São aceitas imagens JPEG, PNG, WebP e BMP de até 4 MiB. Requisições JSON podem conter uma imagem em base64. Use o token da sua conta; a demonstração anônima possui limites próprios.

Status HTTPSignificado
200Análise bem-sucedida. Uma imagem válida pode não conter rostos.
400Imagem, seleção de recursos ou URL inválida. Leia a mensagem JSON.
401Token da API ausente ou inválido.
429Limite mensal ou frequência de requisições excedido. Consulte os cabeçalhos.
502 / 503 / 504Serviço temporariamente indisponível. Tente novamente mais tarde.

Requisições bem-sucedidas contam uma vez, inclusive imagens sem rostos. Falhas não contam. Os limites mensais reiniciam em UTC; X-Quota-Limit, X-Quota-Remaining e X-Quota-Reset indicam a cota atual.