Skip to main content
Documentación
CENTRO DE APRENDIZAJE

Domina la moderación de contenido con guías completas, tutoriales y documentación de API

Enlaces rápidos

Detección de imágenes NSFW

La moderación de imágenes de Discuse puntúa las imágenes enviadas por usuarios para detectar contenido explícito. Envía las URL de las imágenes a POST https://api.discuse.com/api/v2/check con check_images activado, y la API devuelve las probabilidades porn, sexual y neutral, además de una marca hit según el objeto results.images.

¿Cómo funciona la detección NSFW?

El modelo de visión por computadora de Discuse devuelve tres probabilidades para cada imagen, cuya suma tiende a 1.0:

  • porn: probabilidad de que la imagen sea pornográfica.
  • sexual: probabilidad de que la imagen sea sexualmente sugerente.
  • neutral: probabilidad de que la imagen sea segura.

Una marca hit indica que la imagen superó los umbrales NSFW de tu proyecto. Usa las puntuaciones sin procesar para distinguir una imagen claramente explícita (bloqueo automático) de una dudosa (revisión humana).

¿Cómo compruebo una imagen?

Envía una o varias URL de imágenes y activa la comprobación de imágenes con check_images:

curl -X POST https://api.discuse.com/api/v2/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "content": {
      "image_urls": ["https://example.com/user-upload.jpg"]
    },
    "settings": {
      "check_images": true
    }
  }'

Una sola solicitud acepta hasta 10 URL de imágenes.

Formato de respuesta

{
  "has_violations": true,
  "cached": false,
  "message": "NSFW content detected",
  "results": {
    "hits": true,
    "images": {
      "status": "ok",
      "porn": 0.95,
      "sexual": 0.85,
      "neutral": 0.02,
      "hit": true
    }
  },
  "usage": {
    "api_requests_used": 12,
    "api_requests_limit": 2000,
    "api_requests_remaining": 1988
  }
}

El resultado de la imagen se encuentra en results.images. processing_time_ms solo está presente cuando la medición de tiempo está activada en la configuración de tu proyecto.

Comprobar varias imágenes

{
  "content": {
    "image_urls": [
      "https://example.com/image1.jpg",
      "https://example.com/image2.jpg",
      "https://example.com/image3.jpg"
    ]
  },
  "settings": {
    "check_images": true
  }
}

Cada imagen analizada cuenta por separado contra tu cuota de análisis de imágenes.

¿Cómo interpreto las puntuaciones?

porn, sexual y neutral son probabilidades de 0.0 a 1.0. En una imagen explícita, porn es alto y neutral es bajo; en una imagen segura, domina neutral.

function interpretImageResult(result) {
  const img = result.results.images;

  if (img.porn > 0.8) {
    return 'block';   // automatically reject
  } else if (img.porn > 0.5 || img.sexual > 0.7) {
    return 'review';  // queue for human review
  } else if (img.sexual > 0.5) {
    return 'warn';    // allow with a content-warning label
  } else {
    return 'allow';
  }
}

También puedes aplicar una regla basada en la marca hit, que ya tiene en cuenta la configuración threshold_images_porn y threshold_images_sexual de tu proyecto.

Casos de uso

Plataformas sociales

Revisa las fotos de perfil y las imágenes de publicaciones antes de que se publiquen:

async function handleImageUpload(imageUrl) {
  const result = await checkImage(imageUrl);
  const img = result.results.images;

  if (img.porn > 0.7) {
    throw new Error('This image violates our community guidelines');
  }
  if (img.sexual > 0.7) {
    return { url: imageUrl, hasContentWarning: true };
  }
  return { url: imageUrl, hasContentWarning: false };
}

Marketplaces

Aplica un umbral más estricto para las imágenes de productos:

def validate_product_image(image_url):
    result = check_image(image_url)
    img = result['results']['images']

    if img['porn'] > 0.3 or img['sexual'] > 0.3:
        return {'approved': False, 'reason': 'Image contains inappropriate content'}

    return {'approved': True}

Buenas prácticas

Analiza antes del almacenamiento permanente

async function processUpload(file) {
  const tempUrl = await uploadToTemp(file);
  const result = await checkImage(tempUrl);

  if (result.has_violations) {
    await deleteTempFile(tempUrl);
    throw new Error('Image rejected');
  }
  return await moveToPermanent(tempUrl);
}

Combínalo con moderación de texto

Una sola solicitud puede analizar una imagen y su pie de foto al mismo tiempo:

{
  "content": {
    "text": "Check out this photo from my vacation!",
    "image_urls": ["https://example.com/vacation.jpg"]
  },
  "settings": {
    "check_sentiment": true,
    "check_spam": true,
    "check_images": true
  }
}

Usa resultados en caché

Las respuestas en caché no cuentan contra tu cuota, así que volver a mostrar o revalidar una imagen ya analizada es gratis. La marca cached en la respuesta te indica cuándo un resultado procede de la caché.

Límites de uso

Plan Análisis de imágenes mensuales Tarifa por exceso
Basic 500 No disponible
Gold 2,000 $0.00075/análisis
Platinum 5,000 $0.00064/análisis (15% de descuento)
Ultimate 10,000 $0.00056/análisis (25% de descuento)

Ejemplos de integración

Node.js

const checkImage = async (imageUrl) => {
  const response = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({
      content: { image_urls: [imageUrl] },
      settings: { check_images: true }
    })
  });

  return response.json();
};

Python

import os
import requests

def check_image(image_url):
    response = requests.post(
        'https://api.discuse.com/api/v2/check',
        headers={
            'Content-Type': 'application/json',
            'X-API-Key': os.environ['DISCUSE_API_KEY']
        },
        json={
            'content': {'image_urls': [image_url]},
            'settings': {'check_images': True}
        }
    )
    return response.json()

Próximos pasos

Escrito por Equipo de Discuse · Última actualización June 2026

Artículos relacionados

Análisis de texto y detección de sentimiento

Detecta spam, toxicidad, lenguaje soez y analiza el sentimiento en contenido de texto

Detección de spam

Filtrado de spam con AI para texto y mensajes

Escaneo antivirus de archivos

Protege tu plataforma contra malware, virus y archivos maliciosos