API de détection NSFW vs vision LLM : j’ai testé les pièges

Dernière mise à jour: 2026-07-21 10:46:43

Chaque API de détection NSFW repère le porno évident. Elles se distinguent sur les faux positifs, en signalant à tort des maillots de bain, des œuvres d’art ou des photos médicales comme explicites, et c’est cela qui devrait guider votre choix. J’ai donc testé un détecteur dédié face à trois modèles de vision LLM sur les mêmes images limites : le détecteur bon marché a signalé une statue en marbre comme de la nudité en 26 ms, tandis que les LLM plus puissants ont pris le contexte en compte et l’ont acceptée. La configuration que la plupart des équipes devraient reproduire consiste à utiliser un détecteur bon marché sur chaque envoi, puis à n’envoyer les cas ambigus à un LLM pour un second examen, ce qui maintient des coûts d’environ 1 $ pour 1 000 tout en réduisant les fausses alertes qui irritent les vrais utilisateurs.

Ce que renvoie réellement une API de détection NSFW

Avant de comparer les outils, sachez ce qui revient. Vous envoyez une image (sous forme d’URL ou de téléversement direct) et obtenez un score de probabilité de 0.0 à 1.0, ainsi que des libellés par catégorie : généralement nudité, suggestif et violence, certains services ajoutant hentai, gore, drogues ou armes. Vous choisissez un seuil. Les scores au-dessus sont bloqués, une bande intermédiaire est mise en file d’attente pour un humain, le reste passe.

Ce score de 0 à 1 est l’essentiel du jeu. Si vous fixez le seuil trop bas, vous noyez les modérateurs sous les fausses alertes ; trop haut, et du contenu dangereux atteint les utilisateurs. La plupart des services évaluent des images fixes ; moins nombreux sont ceux qui gèrent la vidéo (en échantillonnant des images à un intervalle que vous définissez) ou le texte. Gardez ce vocabulaire à l’esprit. C’est la différence entre les options ci-dessous.

Les options, et à quoi chacune est adaptée

Le marché se divise en quatre groupes, et ils résolvent des problèmes différents.

API de modération dédiées

Classificateurs dédiés de Sightengine, Hive Moderation, AWS Rekognition, Google Cloud Vision, et Azure AI Content Safety. Ils sont rapides (moins d'une seconde à ~1 s), peu coûteux par image, et offrent une granularité par catégorie ainsi qu'une prise en charge de la vidéo dans les niveaux supérieurs. Hive annonce plus de 50 classes ; Sightengine indique des réponses en moins de 100 ms.

Sightengine pricing page showing Starter and Pro content-moderation plans

L’option intégrée gratuite : OpenAI Moderation

Le point de terminaison de modération d'OpenAI (omni-moderation-latest) est gratuit et accepte à la fois le texte et les images jusqu'à 20 Mo. Il renvoie 13 catégories, dont un indicateur dédié sexual/minors, chacune avec un booléen et un score de confiance de 0 à 1. Comme c'est gratuit, c'est l'option la plus rapide à tester en premier :

curl https://api.openai.com/v1/moderations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"omni-moderation-latest",
       "input":[{"type":"image_url","image_url":{"url":"https://example.com/upload.jpg"}}]}'

Open source auto-hébergé

NudeNet et le modèle Falconsai/nsfw_image_detection s’exécutent tous deux localement en Python, sans frais par appel, et les données d’image ne quittent jamais votre infrastructure. NudeNet tient en deux lignes à essayer :

from nudenet import NudeDetector
NudeDetector().detect("upload.jpg")
# -> [{'class': 'FEMALE_BREAST_EXPOSED', 'score': 0.91, 'box': [...]}, ...]

Le projet open-source safe-content-ai encapsule Falconsai dans un service FastAPI Docker que vous pouvez déployer en une seule commande. Le compromis concerne le périmètre (ces solutions se concentrent sur la nudité ou un simple binaire) et l’exploitation : vous êtes responsable de la disponibilité, du GPU et des mises à jour.

Vision LLM multimodale via un relais

Les modèles de vision (GPT, Claude, GLM, doubao) peuvent classer une image à partir d’une simple instruction. C’est l’option la plus flexible : vous modifiez la politique en éditant l’invite, vous obtenez une raison écrite pour chaque verdict, et vous pouvez inventer des catégories personnalisées à la volée. Vous payez au token et attendez quelques secondes. C’est l’option rarement comparée aux outils dédiés, donc c’est là que j’ai concentré le test.

Tarifs et à quoi chacun convient le mieux

Vérifié par rapport à la page de tarification de chaque fournisseur en juillet 2026 :

FournisseurPrixNiveau gratuitIdéal pour
OpenAI ModerationGratuitAucun frais par appelUne base de référence sans coût, ou les équipes déjà sur OpenAI
AWS Rekognition$1 / 1,000 images1,000/mo (essai)Le moins cher à grande échelle ; stack AWS ; image + vidéo
Google Cloud Vision$1.50 / 1,000 ($0.60 à volume)1,000/moStack GCP
Sightengine$29/mo = 10k ops, puis $0.002/opEssaiLatence la plus faible ; vidéo et diffusion en direct
Hive Moderation~$1–5 / 1,000Ensemble de catégories le plus vaste (50+ classes)
Azure AI Content Safety~$1.50 / 1,0005,000/moScore de gravité ; stack Azure
NudeNet / FalconsaiGratuit (auto-hébergé)Confidentialité ; coût par appel nul
LLM vision (via relay)~$0.0003–0.03 / imageCouche d’examen sensible au contexte

J’ai testé les faux positifs : détecteur dédié vs vision LLM

Les fournisseurs publient des chiffres de précision. JigsawStack revendique plus de 98 %, et « 95 %+ » est une formule courante. Mais la précision brute masque l’échec qui génère des tickets de support : les faux positifs sur du contenu sûr. J’ai donc constitué un jeu de test de trois images, toutes adaptées au travail, et j’ai soumis les mêmes images à la fois à un détecteur open source spécialisé (NudeNet) et à trois modèles de vision multimodaux. Une photo de bureau témoin, une femme en maillot de bain une pièce modeste, et une statue en marbre nue classique, les deux « pièges » étant exactement les images que détecte à tort un détecteur de nudité trop brutal.

First-hand NSFW moderation test set: office control, modest swimwear, and a classical nude statue

Pour les modèles LLM, j’ai utilisé une seule instruction : *"You are an image content-moderation classifier. Return strict JSON: verdict (safe/flag/block), nsfw_score 0–1, categories {nudity, suggestive, violence}, reason. Use block only for explicit sexual content; flag means needs human review."* NudeNet renvoie des boîtes par partie du corps avec des scores de confiance, donc j’ai pris le score le plus élevé de la partie exposée comme score de nudité. Les résultats :

ModèleBureau (contrôle)Maillot de bainStatue classique
NudeNet (dédié, auto-hébergé)safe · 0.00 · 26mssafe · 0.00 · 18msflag · 0.70 · 26ms
claude-opus-4-6safe · 0.01safe · 0.12safe · 0.08
glm-5pas d'accès à l'image*safe · 0.15flag · 0.75
doubao-seed-2.0-prosafe · 0.00safe · 0.15safe · 0.10

<sub>*Sur la photo du bureau, glm-5 a renvoyé "safe", mais sa propre justification a admis qu'il ne pouvait pas lire l'image, donc je considère cette cellule comme un appel échoué, et non comme un résultat valide. En production, cet échec silencieux en mode fail-open est le cas dangereux.</sub>

NSFW score by model for three safe images: NudeNet and glm-5 over-flag the statue, claude and doubao pass it

La ligne de séparation n’est pas « dédié versus LLM ». C’est la compréhension du contexte. Voici ce que chacun a renvoyé pour la statue, l’image qui les a départagés :

NudeNet:  BELLY_EXPOSED 0.70, FEMALE_GENITALIA_COVERED 0.41, ARMPITS_EXPOSED 0.36  -> signaler
glm-5:    {"verdict":"flag","nsfw_score":0.75,"categories":{"nudity":1},"reason":"La représentation artistique d’une nudité nécessite une révision humaine."}
claude:   {"verdict":"safe","nsfw_score":0.08,"categories":{"nudity":0.3},"reason":"Sculpture classique de Vénus dans un musée. Bel art, pas sexuel."}

NudeNet est rapide (18–26 ms) et gratuit à auto-héberger, mais il a signalé la statue à 0,70 parce qu’il détecte des parties du corps, pas le sens ; glm-5 a fait de même à 0,75. claude-opus-4-6 a toujours défini nudity: 0.3 — il a vu la nudité — mais a infirmé le verdict en fonction du contexte, une capacité qu’un détecteur au niveau des pixels n’a pas. L’échec à surveiller est celui de glm-5 : il a renvoyé « safe » pour la photo du bureau tout en admettant qu’il ne pouvait pas lire l’image, un fail-open silencieux que vous ne remarqueriez jamais en production.

Trois réserves honnêtes. La latence des LLMs a varié de 4 à 14 secondes par image, contre environ 20 ms pour NudeNet. Chaque image a consommé environ 730 à 1 900 tokens d’entrée, ce qui, sur un modèle de pointe, revient à environ 10 à 30 fois les quelque 0,001 $ que vous paieriez pour Rekognition, donc cela ne doit pas se trouver sur le chemin critique. Et la sortie des LLM n’est pas standardisée : on analyse du texte en une note, et la qualité varie fortement selon les modèles. Il s’agissait d’un petit test informel sur trois images, pas d’un benchmark. Mais c’est suffisant pour montrer le vrai compromis : compréhension du contexte contre coût, rapidité et cohérence.

API dédiée ou vision LLM ? Une décision faire ou acheter

Quand un outil dédié l’emporte

Un volume élevé, un budget serré par image, une latence inférieure à la seconde, la vidéo, ou des certifications de conformité (SOC 2, un DPA GDPR signé). Si vous modérez des millions de téléchargements, 1 $ pour 1 000 à 100 ms est difficile à battre en termes de coût et de vitesse, et la vision LLM n’est pas du même niveau dans ce domaine.

Quand la vision LLM vaut son coût

Les catégories sensibles au contexte où les faux positifs sont préjudiciables (art, éducation, médical, allaitement), ainsi que les cas où vous souhaitez un motif lisible par un humain pour un recours, où vous avez besoin d’une catégorie personnalisée ou nouvelle, ou où vous exécutez déjà un modèle de vision pour d’autres fonctionnalités. C’est le réviseur intelligent et coûteux, pas le filtre de masse.

La configuration par niveaux que la plupart des équipes devraient utiliser

Exécutez un détecteur peu coûteux (ou un modèle auto-hébergé comme NudeNet) sur chaque téléversement. Comme point de départ indicatif uniquement, calibrez-le avant de lui faire confiance : blocage automatique au-dessus d’environ 0,85, autorisation en dessous d’environ 0,3, et envoyez la zone intermédiaire à un appel LLM-vision qui raisonne sur le contexte avant qu’un humain ne le voie, puis ajustez ces seuils sur un échantillon étiqueté de votre propre trafic. Et considérez une classification échouée comme dangereuse, pas sûre : si une réponse ne confirme pas qu’elle a lu l’image ou ne se parse pas en JSON valide, réessayez ou envoyez-la à une revue humaine plutôt que de la laisser passer, exactement le glm-5 fail-open ci-dessus. Vous payez les tarifs dédiés de l’API sur la majorité des téléversements et réservez le coût du LLM aux cas ambigus qui provoquent réellement des litiges, la zone frontière art-et-nudité où le détecteur peu coûteux a signalé à tort la statue du musée.

Cette couche LLM a besoin d'accéder à un ou plusieurs modèles de vision. Un relais tel qu’AIReiter accède à GPT, Claude et GLM vision via un seul endpoint compatible OpenAI, de sorte que le niveau de revue peut changer de modèle sans SDK ni comptes séparés ; c’est ainsi que j’ai exécuté le test à quatre voies ci-dessus.

La seule chose que vous ne devriez jamais construire vous-même : CSAM

Une seule règle stricte. Rien de ce qui précède ne s’applique au matériel d’abus sexuel sur mineurs. N’entraînez pas, n’exécutez pas et ne « testez » pas votre propre détecteur de CSAM, et n’acheminez pas un CSAM suspect via une API générale de détection NSFW comme s’il s’agissait de contenu adulte ordinaire. La voie établie consiste à effectuer une comparaison de hachage avec des bases de données connues (PhotoDNA de Microsoft et les listes de hachage du NCMEC et de l’IWF), puis à signaler le contenu au NCMEC. Les obligations exactes de signalement varient selon la juridiction et selon votre rôle en tant que fournisseur ; considérez donc cela comme une question juridique et de maintien de l’ordre avec son propre système dédié, et non comme un classifieur que vous ajustez.

FAQ

Existe-t-il une API gratuite de détection NSFW ?

Oui. Le endpoint de modération d’OpenAI (omni-moderation-latest) est gratuit et accepte les images. AWS Rekognition et Google Cloud Vision incluent chacun environ 1 000 images gratuites par mois. Pour une utilisation gratuite illimitée, hébergez vous-même un modèle open-source comme NudeNet, qui s’exécutait en environ 20 ms par image lors de mon test.

Quelle est la meilleure API de détection NSFW pour les images et les vidéos ?

Pour la vidéo, Sightengine et Hive échantillonnent tous deux des images et sont conçus pour cela, et AWS Rekognition propose aussi la modération vidéo. Pour les images à petit budget, AWS Rekognition à 1 $ par 1 000 est le choix par défaut courant. Faites votre choix en fonction du coût, de la profondeur des catégories ou du taux de faux positifs ; il n’y a pas de gagnant unique.

Puis-je exécuter la détection NSFW en Python sans API payante ?

Oui. NudeNet et le modèle Falconsai/nsfw_image_detection s’exécutent tous deux localement en Python (pip install nudenet), et le projet open-source safe-content-ai encapsule ce dernier sous forme de service FastAPI Docker. Vous échangez des frais par appel contre l’hébergement et la maintenance du modèle vous-même.

Quelle est la précision des API de détection NSFW ?

Les fournisseurs citent 95–98 % sur leurs propres benchmarks pour le contenu explicite. Le chiffre qui compte vraiment est le taux de faux positifs sur le contenu limite mais sûr (art, maillots de bain, imagerie médicale), où, comme l’a montré le test ci-dessus, un détecteur dédié rapide et un modèle plus faible ont tous deux signalé à tort une statue de musée, tandis qu’une vision LLM sensible au contexte l’a validée.

Puis-je utiliser GPT-4o ou la vision de Claude pour la modération de contenu ?

Oui, et pour les cas sensibles au contexte, ils évitent mieux les faux positifs ; dans mon test, Claude vision a validé une statue nue comme une œuvre d’art, tandis qu’un détecteur au niveau des pixels l’a signalée. Le coût est la vitesse (en secondes, pas en millisecondes) et le prix (environ 10 à 30× celui d’une API dédiée par image), donc utilisez-les comme une couche de révision plutôt que comme filtre de première ligne en masse.

Lectures associées