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.
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 HTTP | Significado |
|---|---|
200 | Análise bem-sucedida. Uma imagem válida pode não conter rostos. |
400 | Imagem, seleção de recursos ou URL inválida. Leia a mensagem JSON. |
401 | Token da API ausente ou inválido. |
429 | Limite mensal ou frequência de requisições excedido. Consulte os cabeçalhos. |
502 / 503 / 504 | Serviç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.