Каждый API для обнаружения NSFW распознаёт очевидную порнографию. Они различаются по ложным срабатываниям, ошибочно помечая купальники, произведения искусства или медицинские фотографии как откровенный контент, и именно это должно определять ваш выбор. Поэтому я протестировал специализированный детектор против трёх LLM vision models на одних и тех же спорных изображениях: дешёвый детектор за 26ms пометил мраморную статую как обнажённое тело, тогда как более сильные LLMs учли контекст и пропустили её. Схема, которую большинству команд стоит копировать, — это дешёвый детектор на каждом upload, а затем отправка в LLM для повторной проверки только неоднозначных случаев, что сохраняет экономику примерно $1 за 1,000, одновременно сокращая ложные тревоги, которые раздражают реальных пользователей.
Что на самом деле возвращает API обнаружения NSFW
Перед сравнением инструментов важно понимать, что вы получите на выходе. Вы отправляете изображение (по URL или напрямую загружая его) и получаете оценку вероятности от 0.0 до 1.0, а также метки по категориям: обычно nudity, suggestive и violence, при этом некоторые сервисы добавляют hentai, gore, drugs или weapons. Вы выбираете порог. Все, что выше него, блокируется, средний диапазон отправляется на проверку человеку, остальное пропускается.
Этот балл от 0 до 1 — это и есть вся суть. Если установить порог слишком низко, модераторы утонут в ложных срабатываниях; слишком высоко — и небезопасный контент дойдёт до пользователей. Большинство сервисов оценивают статические изображения; лишь немногие работают с видео (выборочно анализируя кадры с заданным вами интервалом) или текстом. Держите эту терминологию в голове. Именно в ней заключается разница между вариантами ниже.
Варианты и в чем каждый из них хорош
Рынок делится на четыре группы, и они решают разные проблемы.
Выделенные API модерации
Специализированные классификаторы от Sightengine, Hive Moderation, AWS Rekognition, Google Cloud Vision и Azure AI Content Safety. Они быстрые (менее секунды до ~1 с), недорогие за изображение и предлагают детализацию по категориям, а на более высоких тарифах — поддержку видео. Hive заявляет о более чем 50 классах; Sightengine указывает время ответа менее 100 мс.
Бесплатный встроенный вариант: OpenAI Moderation
Конечная точка Moderation от OpenAI (omni-moderation-latest) доступна для бесплатного использования и принимает как текст, так и изображения размером до 20 МБ. Она возвращает 13 категорий, включая отдельный флаг sexual/minors, каждая с булевым значением и оценкой уверенности от 0 до 1. Поскольку она бесплатна, это самый быстрый вариант для первоначального бенчмарка:
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
NudeNet и модель Falconsai/nsfw_image_detection обе работают локально в Python, без платы за каждый вызов, и данные изображений никогда не покидают вашу инфраструктуру. NudeNet можно попробовать в две строки:
from nudenet import NudeDetector
NudeDetector().detect("upload.jpg")
# -> [{'class': 'FEMALE_BREAST_EXPOSED', 'score': 0.91, 'box': [...]}, ...]
Проект с открытым исходным кодом safe-content-ai оборачивает Falconsai в Docker FastAPI-сервис, который можно развернуть одной командой. Компромисс — это область применения (эти решения ориентированы на наготу или простую бинарную классификацию) и эксплуатация: вы отвечаете за время работы, GPU и обновления.
Мультимодальное зрение LLM через ретранслятор
Vision models (GPT, Claude, GLM, doubao) могут классифицировать изображение по простому промпту. Это гибкий вариант: вы меняете политику, редактируя промпт, получаете письменное обоснование для каждого вердикта и можете на месте придумывать собственные категории. Вы платите за каждый токен и ждёте несколько секунд. Это вариант, который редко сравнивают со специализированными инструментами, поэтому именно на нём я сосредоточил тест.
Цены и для чего лучше подходит каждый вариант
Проверено по собственной странице цен каждого поставщика в июле 2026:
| Поставщик | Цена | Бесплатный тариф | Лучше всего подходит для |
|---|---|---|---|
| OpenAI Moderation | Бесплатно | Без платы за каждый запрос | Базовый вариант с нулевой стоимостью или команды, уже использующие OpenAI |
| AWS Rekognition | $1 / 1,000 images | 1,000/mo (trial) | Самый дешевый при масштабировании; стек AWS; image + video |
| Google Cloud Vision | $1.50 / 1,000 ($0.60 at volume) | 1,000/mo | Стек GCP |
| Sightengine | $29/mo = 10k ops, then $0.002/op | Trial | Минимальная задержка; video and live-stream |
| Hive Moderation | ~$1–5 / 1,000 | — | Самый глубокий набор категорий (50+ classes) |
| Azure AI Content Safety | ~$1.50 / 1,000 | 5,000/mo | Оценка степени серьезности; стек Azure |
| NudeNet / Falconsai | Бесплатно (self-host) | — | Конфиденциальность; нулевая стоимость за каждый запрос |
| LLM vision (via relay) | ~$0.0003–0.03 / image | — | Контекстно-зависимый слой проверки |
Я протестировал ложные срабатывания: специализированный детектор против LLM vision
Поставщики публикуют показатели точности. JigsawStack заявляет о более чем 98%, и «95%+» — это распространённая формулировка. Но сырая точность скрывает сбой, из-за которого появляются обращения в поддержку: ложные срабатывания на безопасном контенте. Поэтому я собрал набор тестов из трёх изображений, все безопасные для работы, и прогнал одни и те же изображения через специализированный детектор с открытым исходным кодом (NudeNet) и три мультимодальные vision models. Контрольное офисное фото, женщина в скромном слитном купальнике и классическая обнажённая мраморная статуя, причём две «ловушки» — это как раз те изображения, на которых грубый детектор наготы чрезмерно срабатывает.
Для моделей LLM я использовал один промпт: *"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 возвращает рамки для каждой части тела с оценками уверенности, поэтому я взял наивысшую оценку для открытой части как оценку наготы. Результаты:
| Модель | Офис (контроль) | Купальник | Классическая статуя |
|---|---|---|---|
| NudeNet (dedicated, self-host) | safe · 0.00 · 26ms | safe · 0.00 · 18ms | flag · 0.70 · 26ms |
| claude-opus-4-6 | safe · 0.01 | safe · 0.12 | safe · 0.08 |
| glm-5 | no image access* | safe · 0.15 | flag · 0.75 |
| doubao-seed-2.0-pro | safe · 0.00 | safe · 0.15 | safe · 0.10 |
<sub>*На фото офиса glm-5 вернул "safe", но в его же объяснении было признано, что он не смог прочитать изображение, поэтому я считаю эту ячейку неудачным вызовом, а не валидным результатом. В продакшене именно такой молчаливый fail-open и представляет опасность.</sub>
Разделительная линия — не «специализированная модель против LLM». Дело в понимании контекста. Вот что каждая из них выдала для статуи — изображения, которое их разделило:
NudeNet: BELLY_EXPOSED 0.70, FEMALE_GENITALIA_COVERED 0.41, ARMPITS_EXPOSED 0.36 -> флаг
glm-5: {"verdict":"flag","nsfw_score":0.75,"categories":{"nudity":1},"reason":"Художественное изображение обнажённого тела требует проверки человеком."}
claude: {"verdict":"safe","nsfw_score":0.08,"categories":{"nudity":0.3},"reason":"Классическая скульптура Венеры в музее. Изящное искусство, не сексуально."}
NudeNet быстрый (18–26 мс) и бесплатный для self-hosting, но он пометил статую как 0.70, потому что распознаёт части тела, а не смысл; glm-5 сделал то же самое с 0.75. claude-opus-4-6 по-прежнему установил nudity: 0.3 — он увидел наготу — но отменил вердикт с учётом контекста, чего не умеет пиксельный детектор. Сбой, за которым нужно следить, — у glm-5: он вернул "safe" для офисного фото, одновременно признав, что не может прочитать изображение, — это тихий fail-open, который вы никогда не заметили бы в production.
Три честных оговорки. Задержка для LLM составляла 4–14 секунд на изображение, в то время как у NudeNet — около 20 мс. На каждое изображение уходило примерно 730–1 900 входных токенов, что на передовой модели оборачивается примерно в 10–30× от тех ~$0.001, которые вы заплатили бы Rekognition, так что это не должно быть на горячем пути. И вывод LLM не стандартизирован: вы парсите прозу в оценку, и качество сильно колеблется между моделями. Это был небольшой неформальный тест на трёх изображениях, а не бенчмарк. Но этого достаточно, чтобы показать реальный компромисс: понимание контекста против стоимости, скорости и согласованности.
Специализированный API или LLM vision? Решение «делать или покупать»
Когда специализированный инструмент оказывается лучше
Большой объём, жёсткий бюджет на одно изображение, задержка менее секунды, видео или сертификации соответствия (SOC 2, подписанное GDPR DPA). Если вы модерируете миллионы загрузок, $1 за 1,000 при 100ms трудно превзойти по стоимости и скорости, и LLM vision здесь не в той же лиге.
Когда использование LLM vision оправдывает свою стоимость
Категории, чувствительные к контексту, где ложные срабатывания особенно вредны (искусство, образование, медицина, грудное вскармливание), а также случаи, когда вам нужна понятная человеку причина для апелляции, требуется собственная или новая категория, либо уже используется vision model для других признаков. Это умный, дорогой рецензент, а не массовый фильтр.
Многоуровневая настройка, которую должны использовать большинство команд
Запускайте дешевый детектор (или self-hosted модель вроде NudeNet) на каждую загрузку. Только как иллюстративную отправную точку: откалибруйте перед тем, как доверять ему — автоматически блокируйте выше ~0.85, пропускайте ниже ~0.3, а средний диапазон отправляйте на вызов LLM-vision, который анализирует контекст до того, как это увидит человек, затем настройте эти пороги на размеченной выборке вашего собственного трафика. И относитесь к неудачной классификации как к небезопасной, а не безопасной: если ответ не подтверждает, что он прочитал изображение, или не разбирается как валидный JSON, повторите попытку или отправьте на ручную проверку, а не пропускайте дальше, точно как указанный выше glm-5 fail-open. Вы платите по тарифам dedicated-API за основную массу загрузок и резервируете расходы на LLM для неоднозначных случаев, которые действительно вызывают споры, — это пограничные случаи с искусством и обнаженностью, где дешевый детектор ошибочно пометил статую в музее.
Этому слою LLM требуется доступ к одной или нескольким vision-моделям. Ретранслятор, такой как AIReiter, обеспечивает доступ к GPT, Claude и GLM vision через единый OpenAI-compatible endpoint, так что уровень проверки может переключать модели без отдельных SDK или учетных записей; именно так я провел четырехсторонний тест выше.
Единственное, что вам никогда не следует создавать самостоятельно: CSAM
Одно жёсткое правило. Всё вышеизложенное не относится к материалам о сексуальном насилии над детьми. Не обучайте, не запускайте и не «тестируйте» свой собственный детектор CSAM, и не направляйте предполагаемый CSAM через общий API обнаружения NSFW так, как будто это обычный контент для взрослых. Установленный путь — сопоставление хэшей с известными базами данных (Microsoft PhotoDNA и списки хэшей NCMEC и IWF), а также сообщение в NCMEC. Точные обязанности по сообщению зависят от юрисдикции и от вашей роли как поставщика, поэтому рассматривайте это как юридический вопрос и вопрос правоохранительной деятельности со своей отдельной специализированной системой, а не как классификатор, который вы настраиваете.
Часто задаваемые вопросы
Существует ли бесплатный API для обнаружения NSFW?
Да. Endpoint модерации OpenAI (omni-moderation-latest) бесплатен и принимает изображения. AWS Rekognition и Google Cloud Vision включают примерно 1,000 бесплатных изображений в месяц каждый. Для неограниченного бесплатного использования разверните у себя open-source модель, такую как NudeNet, которая в моем тесте обрабатывала примерно 20ms на изображение.
Какой API для обнаружения NSFW-контента лучше всего подходит для изображений и видео?
Для видео и Sightengine, и Hive берут выборки кадров и созданы для этого, а AWS Rekognition тоже предлагает модерацию видео. Для изображений при ограниченном бюджете AWS Rekognition по цене $1 за 1,000 — это самый распространённый вариант по умолчанию. Выбирайте с учётом стоимости, глубины категорий или частоты ложных срабатываний; единого победителя нет.
Могу ли я запускать обнаружение NSFW в Python без платного API?
Да. NudeNet и модель Falconsai/nsfw_image_detection обе работают локально в Python (pip install nudenet), а проект с открытым исходным кодом safe-content-ai упаковывает последнюю в сервис Docker FastAPI. Вы обмениваете плату за каждый вызов на самостоятельное размещение и поддержку модели.
Насколько точны API для обнаружения NSFW?
Поставщики указывают 95–98% на своих собственных тестах для явного контента. Реально важный показатель — это доля ложных срабатываний на погранично безопасном контенте (искусство, купальники, медицинские изображения), где, как показал тест выше, быстрый специализированный детектор и более слабая модель оба слишком часто помечали статую в музее, тогда как LLM vision, учитывающая контекст, пропустила её.
Могу ли я использовать GPT-4o или Claude vision для модерации контента?
Да, и для контекстно-зависимых случаев они лучше избегают ложных срабатываний; в моём тесте Claude vision пропустил обнажённую статую как произведение искусства, тогда как детектор на уровне пикселей пометил её. Цена этого — скорость (секунды, а не миллисекунды) и стоимость (примерно в 10–30 раз дороже специализированного API на одно изображение), поэтому используйте их как слой проверки, а не как основной массовый фильтр.
