nsfw image detector

ProviderFreepik
Categoryimage-classification
Licensemit
Downloads594.7K
Stars0

Overview

The Freepik NSFW Image Detector is a lightweight image classification model designed to automate content moderation pipelines. Unlike general-purpose vision models, this tool is specifically tuned to identify adult content, allowing developers to filter user-generated uploads in real-time before they hit the frontend. It integrates easily into backend workflows via standard API calls, providing a binary or probabilistic classification of image safety. For developers building social platforms, e-commerce sites, or community forums, it offers a computationally efficient way to maintain brand safety without the overhead of building a custom computer vision pipeline from scratch. Its MIT license ensures flexibility for both commercial and open-source deployment.

Highlights

  • Automates real-time content moderation for user uploads
  • Lightweight architecture ensures low latency integration
  • Permissive MIT license for commercial application
  • Streamlines brand safety across digital platforms

Usage

Install
# Install Hugging Face transformers
pip install transformers torch
SDK Usage
# Load model with transformers
from transformers import AutoModel, AutoTokenizer

model = AutoModel.from_pretrained("Freepik/nsfw_image_detector")
tokenizer = AutoTokenizer.from_pretrained("Freepik/nsfw_image_detector")

Hugging Face Download

We recommend downloading the model via the Hugging Face CLI or Hub SDK.

Guidance:Before downloading, install huggingface_hub with:

Guidance
pip install -U huggingface_hub

CLI Download

Download the full repository

Download the full repository
huggingface-cli download Freepik/nsfw_image_detector

Download a single file to a local folder (e.g. config.json into ./dir)

Download a single file to a local folder (e.g. config.json into ./dir)
huggingface-cli download Freepik/nsfw_image_detector config.json --local-dir ./dir

See the official docs for more CLI options

SDK Download

SDK Download
# 模型下载
from huggingface_hub import snapshot_download
model_dir = snapshot_download('Freepik/nsfw_image_detector')

Git Download

Make sure git-lfs is installed first

Git Download
git lfs install
git clone https://huggingface.co/Freepik/nsfw_image_detector

To skip LFS large-file downloads, use:

Skip LFS
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Freepik/nsfw_image_detector

Model files are hosted on the Hugging Face Hub — download directly via HF CLI / SDK / Git, not through this site.

PyTorch / Transformers Usage

Install Transformers

Install Transformers
pip install -U transformers torch

Load the model and run inference

Load the model and run inference
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained('Freepik/nsfw_image_detector')
tokenizer = AutoTokenizer.from_pretrained('Freepik/nsfw_image_detector')

Full Documentation

来源: HuggingFace

---
license: mit
base_model:

  • timm/eva02_base_patch14_448.mim_in22k_ft_in22k_in1k

pipeline_tag: image-classification
tags:
  • pytorch

  • transformers

---

EVA-based Fast NSFW Image Classifier

Table of Contents

- Global Performance - Accuracy by AI Content - AI-Generated Content - Non-AI-Generated Content - Quick Start via pip - Quick Start with Pipeline - Avoid installation of pip dependency

Model Description

This model is a vision transformer based on the EVA architecture, fine-tuned for NSFW content classification. It has been trained
to detect four categories (neutral, low, medium, high) of visual content using 100,000 synthetically labeled images.

The model can be used as a binary (true/false) classifier if desired, or you can obtain the full output probabilities.. It outperforms other excellent publicly available models such as Falconsai/nsfw_image_detection or AdamCodd/vit-base-nsfw-detector in our internal benchmarks adding the enrichment of being able to select the NSFW level that suits your use case.

Try it Online! 🚀

You can try this model directly in your browser through our Hugging Face Space. Upload any image and get instant NSFW classification results without any installation required.

Model Performance Comparison

Global Performance

| Category | Freepik | Falconsai | Adamcodd |
|----------|-------------|------------------|----------------|
| High | 99.54% | 97.92% | 98.62% |
| Medium | 97.02% | 78.54% | 91.65% |
| Low | 98.31% | 31.25% | 89.66% |
| Neutral | 99.87% | 99.27% | 98.37% |

In the table below, the results are obtained as follows:

  • For the Falconsai and AdamCodd models:

* A prediction is considered correct if the image is labeled "low", "medium", or "high" and the model returns true.
* If the label is "neutral", the correct output should be false.

  • For the Freepik model:
* If the image label is "low", "medium", or "high", the model should return at least "low". * If the label is "neutral", the correct output should be "neutral".

Conclusions:

  • Our model outperforms AdamCodd and Falconsai in accuracy. It is entirely fair to compare them on the "high" and "neutral" labels.
  • Our model offers greater granularity. It is not only suitable for detecting "high" and "neutral" content, but also performs excellently at identifying "low" and "medium" NSFW content.
* Falconsai may classify some "medium" and "low" images as not NSFW but mark others as safe for work(SFW), which could lead to unexpected results. * AdamCodd classifies both "low" and "medium" categories as NSFW, which may not be desirable depending on your use case. Furthermore, a 10% of images in low and medium are considered SFW.

Accuracy by AI Content

We have created a manually labeled dataset with careful attention to avoiding biases (gender, ethnicity, etc.). While the sample size is relatively small, it provides meaningful insights into model performance across different scenarios, which was very useful in the training process to avoid biases.

The following tables show detection accuracy percentages across different NSFW categories and content types:

#### AI-Generated Content

| Category | Freepik Model | Falconsai Model | Adamcodd Model |
|----------|-------------|------------------|----------------|
| High | 100.00% | 84.00% | 92.00% |
| Medium | 96.15% | 69.23% | 96.00% |
| Low | 100.00% | 35.71% | 92.86% |
| Neutral | 100.00% | 100.00% | 66.67% |

Conclusions:

  • Avoid using Falconsai for AI-generated content to prevent prediction errors.

  • Our model is the best option to detect NSFW content in AI-generated content.

Usage

Quick Start via pip

```sh
pip install nsfw-image-detector

code
python
from PIL import Image
from nsfw_image_detector import NSFWDetector
import torch

Initialize the detector

detector = NSFWDetector(dtype=torch.bfloat16, device="cuda")

Load and classify an image

image = Image.open("your_image")

Check if the image contains NSFW content sentivity level medium or higher

is_nsfw = detector.is_nsfw(image, "medium")

Get probability scores for all categories

probabilities = detector.predict_proba(image) print(f"Is NSFW: {is_nsfw}") print(f"Probabilities: {probabilities}")
code
Example output:
python Is NSFW: False Probabilities: [ {<NSFWLevel.HIGH: 'high'>: 0.00372314453125, <NSFWLevel.MEDIUM: 'medium'>: 0.1884765625, <NSFWLevel.LOW: 'low'>: 0.234375, <NSFWLevel.NEUTRAL: 'neutral'>: 0.765625} ]
code
### Quick Start with Pipeline
python from transformers import pipeline from PIL import Image

Create classifier pipeline

classifier = pipeline( "image-classification", model="Freepik/nsfw_image_detector", device=0 # Use GPU (0) or CPU (-1) )

Load and classify an image

image = Image.open("path/to/your/image.jpg") predictions = classifier(image) print(predictions)
code
Example output:
python [ {'label': 'neutral', 'score': 0.92}, {'label': 'low', 'score': 0.05}, {'label': 'medium', 'score': 0.02}, {'label': 'high', 'score': 0.01} ]
code
The model supports efficient batch processing for multiple images:
python images = [Image.open(path) for path in ["image1.jpg", "image2.jpg", "image3.jpg"]] predictions = classifier(images)
code
Note: If the intention is to use the model in production review Speed and Memory Metrics section before using this approach.

Avoid installation of pip dependency

The following example demonstrates how to customize the NSFW detection label, it is very similar to the code in PyPy. This code returns True if the NSFW level is 'medium' or higher:

python
from transformers import AutoModelForImageClassification
import torch
from PIL import Image
from typing import List, Dict
import torch.nn.functional as F
from timm.data.transforms_factory import create_transform
from torchvision.transforms import Compose
from timm.data import resolve_data_config
from timm.models import get_pretrained_cfg

device = "cuda" if torch.cuda.is_available() else "cpu"

Load model and processor

model = AutoModelForImageClassification.from_pretrained("Freepik/nsfw_image_detector", torch_dtype = torch.bfloat16).to(device)

Load original processor (faster for tensors)

cfg = get_pretrained_cfg("eva02_base_patch14_448.mim_in22k_ft_in22k_in1k") processor: Compose = create_transform(**resolve_data_config(cfg.__dict__))

def predict_batch_values(model, processor: Compose, img_batch: List[Image.Image] | torch.Tensor) -> List[Dict[str, float]]:
"""
Process a batch of images and return prediction scores for each NSFW category
"""
idx_to_label = {0: 'neutral', 1: 'low', 2: 'medium', 3: 'high'}

# Prepare batch
inputs = torch.stack([processor(img) for img in img_batch])
output = []
with torch.inference_mode():
logits = model(inputs).logits
batch_probs = F.log_softmax(logits, dim=-1)
batch_probs = torch.exp(batch_probs).cpu()

for i in r

Join our Telegram