Documentación de la API de análisis facial
Envía una imagen y recibe un array JSON faces. Cada rostro contiene las funciones solicitadas. Una imagen válida sin rostros detectados devuelve un array vacío.
Haz tu primera solicitud
Usa tu token API y una imagen local. Estos ejemplos solicitan solo los cuadros de los rostros para comprobar la integración con cualquier imagen 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)
Entiende la respuesta
Esta respuesta ilustrativa contiene un rostro detectado. Las coordenadas y predicciones dependen de la imagen; los valores de ejemplo no garantizan resultados.
{
"faces": [
{"bounds": {"left": 35, "top": 77, "right": 221, "bottom": 263}}
]
}
Envía una URL pública de imagen
En lugar de subir un archivo, envía url con una imagen HTTPS pública. Se rechazan las direcciones de red privada y las imágenes no compatibles.
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'
Elige las funciones
Envía nombres separados por comas en un formulario, o un array features en JSON. Omite features para solicitarlas todas. Pedir solo lo necesario reduce el procesamiento.
bounds · Detección de rostros
Localiza rostros y obtén sus cuadros delimitadores.
{
"faces": [
{
"bounds": {
"left": 35,
"top": 77,
"right": 221,
"bottom": 263
}
}
]
}
landmarks · Puntos faciales
Obtén puntos de contorno de ojos, nariz, boca y 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 · Estimación de edad
Obtén la estimación de edad del modelo para cada rostro.
{
"faces": [
{
"age": 20
}
]
}
gender · Presentación visual
Las clases heredadas man/woman describen la presentación visual, no la identidad de género.
{
"faces": [
{
"gender": {
"value": "man",
"probability": 0.84,
"classes": {
"man": 0.84,
"woman": 0.16
}
}
}
]
}
emotion · Puntuaciones de expresión
Obtén las puntuaciones del modelo para siete categorías de expresión 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 · Puntuaciones de clases heredadas
El campo ethnicity devuelve las puntuaciones de clases del modelo existente.
{
"faces": [
{
"ethnicity": {
"value": "white",
"probability": 0.9,
"classes": {
"asian": 0.03,
"black": 0.02,
"indian": 0.05,
"white": 0.9
}
}
}
]
}
glasses · Detección de gafas
Distingue gafas, gafas de natación y ausencia de gafas.
{
"faces": [
{
"glasses": {
"value": "not-using-glasses",
"probability": 0.95,
"classes": {
"not-using-glasses": 0.95,
"using-glasses": 0.04,
"swimming-goggles": 0.01
}
}
}
]
}
smile · Detección de sonrisa
Obtén una predicción de sonrisa y su probabilidad.
{
"faces": [
{
"smile": {
"is_smiling": false,
"probability": 0.2
}
}
]
}
hair · Segmentación del cabello
Obtén los contornos del cabello y su color dominante.
{
"faces": [
{
"hair": {
"polygons": [
[
{
"x": 40,
"y": 30
},
{
"x": 75,
"y": 10
},
{
"x": 110,
"y": 35
}
]
],
"color": {
"name": "black",
"hex": "#131218"
}
}
}
]
}
pose · Orientación de la cabeza
Mide los ángulos de giro, inclinación lateral e inclinación vertical.
{
"faces": [
{
"pose": {
"x_roll": -5,
"y_pitch": -5,
"z_yaw": 6
}
}
]
}
quality · Calidad de imagen
Comprueba el desenfoque y la exposición de una imagen.
{
"faces": [
{
"blur": {
"is_blurry": false
},
"exposure": {
"level": "balanced"
}
}
]
}
Los resultados de los modelos son estimaciones. Las clases forman parte del contrato heredado de la API y no establecen la identidad de una persona.
Formatos, límites y errores
Se admiten imágenes JPEG, PNG, WebP y BMP de hasta 4 MiB. Las solicitudes JSON pueden incluir una imagen en base64. Usa tu token; la demo anónima tiene sus propios límites.
| Estado HTTP | Significado |
|---|---|
200 | Análisis correcto. Una imagen válida puede no contener rostros. |
400 | Imagen, selección de funciones o URL no válida. Consulta el mensaje JSON. |
401 | Token API ausente o no válido. |
429 | Límite mensual o frecuencia de solicitudes superado. Consulta las cabeceras. |
502 / 503 / 504 | Servicio temporalmente no disponible. Inténtalo más tarde. |
Las solicitudes correctas cuentan una vez, incluso sin rostros detectados. Los errores no cuentan. Los límites mensuales se reinician en UTC; X-Quota-Limit, X-Quota-Remaining y X-Quota-Reset describen la cuota actual.