Skip to main content
Documentation
Centre d’apprentissage

Maîtrisez la modération de contenu grâce à des guides complets, des tutoriels et une documentation API

Liens rapides

Détection d’images NSFW

Discuse évalue les images soumises par les utilisateurs afin de détecter les contenus explicites. Envoyez les URL d’images à POST https://api.discuse.com/api/v2/check avec check_images activé, et l’API renvoie les probabilités porn, sexual et neutral, ainsi qu’un indicateur hit dans l’objet results.images.

Comment fonctionne la détection NSFW ?

Le modèle de vision par ordinateur de Discuse renvoie trois probabilités pour chaque image, dont la somme tend vers 1,0 :

  • porn : probabilité que l’image soit pornographique.
  • sexual : probabilité que l’image soit sexuellement suggestive.
  • neutral : probabilité que l’image soit sûre.

Un indicateur hit signale que l’image a dépassé les seuils NSFW de votre projet. Utilisez les scores bruts pour distinguer une image clairement explicite (blocage automatique) d’un cas limite (revue humaine).

Comment vérifier une image ?

Soumettez une ou plusieurs URL d’images et activez la vérification d’images avec 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
    }
  }'

Une seule requête accepte jusqu’à 10 URL d’images.

Format de réponse

{
  "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
  }
}

Le résultat de l’image se trouve sous results.images. processing_time_ms n’est présent que lorsque la mesure du temps est activée dans les paramètres de votre projet.

Vérifier plusieurs images

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

Chaque image analysée est décomptée séparément de votre quota d’analyses d’images.

Comment interpréter les scores ?

porn, sexual et neutral sont des probabilités comprises entre 0,0 et 1,0. Pour une image explicite, porn est élevé et neutral est faible ; pour une image sûre, neutral prédomine.

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';
  }
}

Vous pouvez également vous baser sur l’indicateur hit, qui applique déjà les paramètres threshold_images_porn et threshold_images_sexual de votre projet.

Cas d’utilisation

Plateformes sociales

Analysez les photos de profil et les images des publications avant leur mise en ligne :

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 };
}

Places de marché

Appliquez un seuil plus strict aux visuels de produits :

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}

Bonnes pratiques

Analyser avant le stockage permanent

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);
}

Combiner avec la modération de texte

Une seule requête peut analyser une image et sa légende ensemble :

{
  "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
  }
}

Utiliser les résultats en cache

Les réponses mises en cache ne sont pas décomptées de votre quota ; réafficher ou revalider une image déjà analysée est donc gratuit. L’indicateur cached dans la réponse vous indique lorsqu’un résultat provient du cache.

Limites d’utilisation

Offre Analyses d’images mensuelles Tarif de dépassement
Basic 500 Non disponible
Gold 2,000 $0.00075/scan
Platinum 5,000 $0.00064/scan (15% discount)
Ultimate 10,000 $0.00056/scan (25% discount)

Exemples d’intégration

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()

Étapes suivantes

Rédigé par Équipe Discuse · Dernière mise à jour June 2026

Articles associés

Analyse de texte et détection du sentiment

Détectez le spam, la toxicité, les grossièretés et analysez le sentiment dans le contenu textuel

Détection du spam

Filtrage du spam basé sur l’AI pour les textes et les messages

Analyse antivirus des fichiers

Protégez votre plateforme contre les malwares, les virus et les fichiers malveillants