NSFW 감지 API vs LLM Vision: 내가 함정을 직접 테스트해봤다

마지막 업데이트: 2026-07-21 10:47:17

모든 NSFW 감지 API는 명백한 포르노를 잡아냅니다. 차이는 false positive에서 갈리는데, 수영복, 예술 작품, 의료 사진을 부적절한 노출로 잘못 표시하는 경우가 그것이며, 이것이 바로 선택을 결정해야 합니다. 그래서 저는 같은 경계선 이미지에서 전용 감지기와 세 가지 LLM vision model을 비교해 테스트했습니다. 저렴한 감지기는 대리석 조각상을 누드로 표시하는 데 26ms가 걸렸지만, 더 강력한 LLM들은 맥락을 읽고 통과시켰습니다. 대부분의 팀이 따라야 할 설정은 모든 upload에 저렴한 감지기를 적용하고, 그다음 애매한 경우만 LLM에 보내 재검토하게 하는 것입니다. 이렇게 하면 false alarm으로 실제 사용자를 화나게 하는 일을 줄이면서도 대략 $1-per-1,000의 경제성을 유지할 수 있습니다.

NSFW 감지 API가 실제로 반환하는 것

도구를 비교하기 전에, 무엇이 반환되는지 알아두세요. 이미지를(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초 미만에서 ~1초), 이미지당 비용이 저렴하며, 더 상위 요금제에서는 세분화된 카테고리와 비디오 지원을 제공합니다. Hive는 50개 이상의 클래스를 제공한다고 광고하며, Sightengine은 100ms 미만의 응답 시간을 제시합니다.

Sightengine pricing page showing Starter and Pro content-moderation plans

무료로 내장된 옵션: OpenAI Moderation

OpenAI의 Moderation endpoint (omni-moderation-latest)는 무료로 사용할 수 있으며 최대 20 MB의 텍스트와 이미지를 모두 허용합니다. 13개 카테고리를 반환하며, 여기에는 별도의 sexual/minors 플래그가 포함되고, 각 항목에는 boolean 값과 0–1 confidence score가 있습니다. 무료이므로, 먼저 벤치마크해볼 가장 빠른 옵션입니다:

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"}}]}'

자체 호스팅 오픈 소스

NudeNetFalconsai/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년 7월 각 벤더의 자체 가격 페이지와 대조 확인됨:

제공업체가격무료 티어최적 용도
OpenAI Moderation무료호출당 요금 없음비용이 전혀 없는 기준선, 또는 이미 OpenAI를 사용 중인 팀
AWS Rekognition$1 / 1,000 images1,000/mo (trial)대규모에서 가장 저렴함; AWS 스택; 이미지 + 비디오
Google Cloud Vision$1.50 / 1,000 ($0.60 at volume)1,000/moGCP 스택
Sightengine$29/mo = 10k ops, then $0.002/opTrial가장 낮은 지연 시간; 비디오 및 라이브 스트림
Hive Moderation~$1–5 / 1,000가장 깊은 카테고리 세트(50+ classes)
Azure AI Content Safety~$1.50 / 1,0005,000/mo심각도 점수화; Azure 스택
NudeNet / Falconsai무료(자체 호스팅)개인정보 보호; 호출당 비용 0
LLM vision (via relay)~$0.0003–0.03 / image문맥 인식 검토 레이어

나는 오탐지를 테스트했다: 전용 탐지기 vs LLM 비전

공급업체들은 정확도 수치를 공개합니다. JigsawStack은 98% 이상을 주장하고, "95%+"는 흔한 표현입니다. 하지만 원시 정확도는 지원 티켓을 만들어내는 실패, 즉 안전한 콘텐츠에 대한 오탐을 숨깁니다. 그래서 저는 업무상 안전한 3장의 이미지로 구성된 테스트 세트를 만들고, 동일한 이미지를 전용 오픈소스 탐지기(NudeNet)와 3개의 멀티모달 비전 모델에 각각 돌려보았습니다. 기준용 사무실 사진, 단정한 원피스 수영복을 입은 여성, 그리고 고전적인 누드 대리석 조각상이며, 이 두 "함정"은 바로 노골적인 누드 탐지기가 과도하게 경고를 내는 이미지들입니다.

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

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은 신체 부위별 박스와 신뢰도 점수를 반환하므로, 저는 가장 높은 노출 부위 점수를 nudity 점수로 사용했습니다. 결과는 다음과 같습니다:

모델사무실(대조군)수영복고전 조각상
NudeNet (dedicated, self-host)안전 · 0.00 · 26ms안전 · 0.00 · 18ms플래그 · 0.70 · 26ms
claude-opus-4-6안전 · 0.01안전 · 0.12안전 · 0.08
glm-5이미지 액세스 없음*안전 · 0.15플래그 · 0.75
doubao-seed-2.0-pro안전 · 0.00안전 · 0.15안전 · 0.10

<sub>*사무실 사진에서 glm-5는 "safe"를 반환했지만, 자체 이유 설명에서 이미지를 읽을 수 없다고 인정했으므로, 저는 그 셀을 유효한 결과가 아니라 실패한 호출로 간주합니다. 운영 환경에서는 그런 조용한 fail-open이 위험한 경우입니다.</sub>

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

구분선은 "전용 대 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–26ms) 자체 호스팅이 무료이지만, 의미가 아니라 신체 부위를 감지하므로 조각상에 0.70을 부여했습니다; glm-5도 같은 이유로 0.75를 반환했습니다. claude-opus-4-6는 여전히 nudity: 0.3로 설정했는데 — 나체를 인식했기 때문입니다 —, 맥락에 대한 판단에서는 판정을 뒤집었습니다. 이는 픽셀 수준 감지기에는 없는 능력입니다. 주의해야 할 실패는 glm-5의 것입니다: 이미지도 읽을 수 없다고 인정하면서 사무실 사진에 대해 "safe"를 반환했는데, 이는 운영 환경에서는 절대 잡아내지 못할 조용한 fail-open입니다.

솔직한 한계 세 가지. LLM의 지연 시간은 이미지당 4–14초였고, NudeNet의 약 20ms와 비교됩니다. 각 이미지는 대략 730–1,900개의 입력 토큰을 사용했으며, 최첨단 모델 기준으로 Rekognition에 지불하는 약 $0.001보다 대략 10–30배 더 들기 때문에, 이는 핵심 경로에서 제외해야 합니다. 그리고 LLM 출력은 표준화되어 있지 않습니다: 산문을 점수로 파싱해야 하며, 모델에 따라 품질이 크게 달라집니다. 이는 세 장의 이미지로 진행한 작은 비공식 테스트였고, 벤치마크는 아닙니다. 하지만 맥락 이해와 비용, 속도, 일관성 사이의 실제 트레이드오프를 보여주기에는 충분합니다.

전용 API인가 LLM 비전인가? 직접 개발할지 구매할지 결정

전용 도구가 더 나을 때

대량 처리, 이미지당 예산이 매우 빠듯함, 1초 미만의 지연 시간, 비디오, 또는 규정 준수 인증(SOC 2, 서명된 GDPR DPA). 수백만 건의 업로드를 모더레이션한다면, 100ms에서 1,000건당 $1은 비용과 속도 면에서 따라잡기 어렵고, LLM vision은 그 영역에서 같은 수준이 아닙니다.

LLM 비전이 그 비용을 정당화할 때

오탐이 해를 끼치는 상황별 범주(예술, 교육, 의료, 모유 수유), 그리고 항소를 위해 사람이 읽을 수 있는 이유가 필요하거나, 맞춤형 또는 새로운 범주가 필요하거나, 다른 기능을 위해 이미 vision model을 실행하고 있는 경우에 해당합니다. 이는 대량 필터가 아니라, 스마트하고 비용이 많이 드는 검토자입니다.

대부분의 팀이 사용해야 하는 계층형 설정

모든 업로드에 대해 저렴한 탐지기(또는 NudeNet 같은 자체 호스팅 모델)를 실행하세요. 이는 설명용 출발점일 뿐이므로, 신뢰하기 전에 보정하세요: 약 0.85 이상은 자동 차단하고, 0.3 이하에서는 통과시키며, 중간 구간은 사람이 보기 전에 맥락을 추론하는 LLM-vision 호출로 전달한 다음, 자신의 트래픽에서 라벨링된 샘플을 기준으로 이러한 임계값을 조정하세요. 그리고 분류 실패는 안전한 것이 아니라 위험한 것으로 취급하세요. 응답이 이미지를 읽었다는 것을 확인하지 않거나 유효한 JSON으로 파싱되지 않으면, 그대로 통과시키지 말고 다시 시도하거나 사람 검토로 보내세요. 이는 위의 glm-5 fail-open과 정확히 같습니다. 업로드의 대다수에는 dedicated-API 요금을 지불하고, 실제로 분쟁을 일으키는 모호한 사례, 즉 저렴한 탐지기가 박물관 조각상을 과도하게 플래그한 예술 및 누드 경계 사례에 대해서만 LLM 비용을 남겨두세요.

그 LLM 계층은 하나 이상의 vision model에 접근할 수 있어야 합니다. AIReiter 같은 relay는 단일 OpenAI-compatible endpoint를 통해 GPT, Claude, GLM vision에 도달하므로, review 계층은 별도의 SDK나 계정 없이 모델을 전환할 수 있습니다. 위의 4방향 테스트를 그렇게 실행했습니다.

절대로 직접 만들어서는 안 되는 것 하나: CSAM

한 가지 엄격한 원칙이 있습니다. 위의 어떤 내용도 아동 성적 학대물에는 적용되지 않습니다. 자체 CSAM 탐지기를 훈련, 실행 또는 "테스트"하지 마십시오. 또한 의심되는 CSAM을 일반 NSFW 탐지 API로 마치 평범한 성인용 콘텐츠인 것처럼 라우팅하지 마십시오. 확립된 절차는 알려진 데이터베이스(Microsoft의 PhotoDNA와 NCMEC 및 IWF 해시 목록)와의 해시 매칭을 수행한 뒤 NCMEC에 보고하는 것입니다. 정확한 보고 의무는 관할권과 제공자로서의 귀하의 역할에 따라 다르므로, 이를 조정하는 분류기가 아니라 자체 전용 시스템이 필요한 법률 및 법집행 사안으로 취급하십시오.

자주 묻는 질문

무료 NSFW 감지 API가 있나요?

네. OpenAI의 Moderation 엔드포인트(omni-moderation-latest)는 무료이며 이미지를 지원합니다. AWS Rekognition과 Google Cloud Vision은 각각 월 약 1,000장의 이미지를 무료로 제공합니다. 무제한 무료 사용을 원한다면 NudeNet 같은 오픈소스 모델을 직접 호스팅하세요. 제 테스트에서는 이미지당 약 20ms로 실행되었습니다.

이미지와 동영상에 가장 좋은 NSFW 감지 API는 무엇인가요?

비디오의 경우 Sightengine과 Hive는 모두 프레임을 샘플링하며 이를 위해 구축되었고, AWS Rekognition도 비디오 모더레이션을 제공합니다. 예산이 제한된 이미지의 경우 1,000개당 $1인 AWS Rekognition이 일반적인 기본 선택입니다. 비용, 카테고리 깊이 또는 오탐률에 따라 선택을 저울질하세요. 단일한 승자는 없습니다.

유료 API 없이 Python에서 NSFW 감지를 실행할 수 있나요?

네. NudeNet과 Falconsai/nsfw_image_detection 모델은 모두 Python에서 로컬로 실행되며(pip install nudenet), 오픈소스 safe-content-ai 프로젝트는 후자를 Docker FastAPI 서비스로 패키징합니다. 호출당 요금을 내는 대신 모델을 직접 호스팅하고 유지 관리하게 됩니다.

NSFW 감지 API는 얼마나 정확한가요?

벤더들은 명시적 콘텐츠에 대한 자체 벤치마크에서 95–98%를 인용합니다. 실제로 문제를 일으키는 수치는 경계선상 안전한 콘텐츠(예술, 수영복, 의료 이미지)에 대한 오탐률이며, 위의 테스트에서 보였듯이 빠른 전용 탐지기와 더 약한 모델 모두 박물관의 조각상을 과도하게 플래그한 반면, 문맥을 인식하는 LLM vision은 이를 통과시켰습니다.

콘텐츠 검토에 GPT-4o 또는 Claude vision을 사용할 수 있나요?

네, 그리고 문맥에 민감한 경우에는 오탐을 더 잘 피합니다. 제 테스트에서는 Claude vision이 누드 조각상을 미술 작품으로 무난하게 통과시킨 반면, 픽셀 수준 탐지기는 이를 플래그했습니다. 대신 속도(밀리초가 아니라 초 단위)와 비용(이미지당 전용 API보다 대략 10~30배) 측면의 대가가 있으므로, 최전선의 대량 필터보다는 검토 계층으로 사용하는 것이 좋습니다.

관련 읽을거리