Skip to main content

An ensemble of Neural Nets for Nudity Detection and Censoring

Project description

NudeNet: Neural Nets for Nudity Classification, Detection and selective censoring


Uncensored version of the following image can be found at (NSFW)

Classifier classes: |class name | Description | |--------|:--------------: |safe | Image/Video is not sexually explicit | |unsafe | Image/Video is sexually explicit|

Default Detector classes: |class name | Description | |--------|:-------------------------------------: |EXPOSED_ANUS | Exposed Anus; Any gender | |EXPOSED_ARMPITS | Exposed Armpits; Any gender | |COVERED_BELLY | Provocative, but covered Belly; Any gender | |EXPOSED_BELLY | Exposed Belly; Any gender | |COVERED_BUTTOCKS | Provocative, but covered Buttocks; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |FACE_F | Female Face| |FACE_M | Male Face| |COVERED_FEET |Provocative, but covered Feet; Any gender | |EXPOSED_FEET | Exposed Feet; Any gender| |COVERED_BREAST_F | Provocative, but covered Breast; Female | |EXPOSED_BREAST_F | Exposed Breast; Female | |COVERED_GENITALIA_F |Provocative, but covered Genitalia; Female| |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_BREAST_M |Exposed Breast; Male | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male |

Base Detector classes: |class name | Description | |--------|:--------------: |EXPOSED_BELLY | Exposed Belly; Any gender | |EXPOSED_BUTTOCKS | Exposed Buttocks; Any gender | |EXPOSED_BREAST_F | Exposed Breast; Female | |EXPOSED_GENITALIA_F |Exposed Genitalia; Female | |EXPOSED_GENITALIA_M |Exposed Genitalia; Male | |EXPOSED_BREAST_M |Exposed Breast; Male |

As self-hostable API service

# Classifier
docker run -it -p8080:8080 notaitech/nudenet:classifier

# Detector
docker run -it -p8080:8080 notaitech/nudenet:detector

# See for running predictions via fastDeploy's REST endpoints 
# Single input
python --file PATH_TO_YOUR_IMAGE

# Client side batching
python --dir PATH_TO_FOLDER --ext jpg

As Python module


# Tested with tensorflow/ tensorflow-gpu == 1.14
pip install --upgrade nudenet

Classifier Usage:

# Import module
from nudenet import NudeClassifier

# initialize classifier (downloads the checkpoint file automatically the first time)
classifier = NudeClassifier()

# Classify single image
# Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY}}
# Classify multiple images (batch prediction)
# batch_size is optional; defaults to 4
classifier.classify(['path_to_image_1', 'path_to_image_2'], batch_size=BATCH_SIZE)
# Returns {'path_to_image_1': {'safe': PROBABILITY, 'unsafe': PROBABILITY},
#          'path_to_image_2': {'safe': PROBABILITY, 'unsafe': PROBABILITY}}

# Classify video
# batch_size is optional; defaults to 4
classifier.classify_video('path_to_video', batch_size=BATCH_SIZE)
# Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'},
#          "preds": {frame_i: {'safe': PROBABILITY, 'unsafe': PROBABILITY}, ....}}

Detector Usage:

# Import module
from nudenet import NudeDetector

# initialize detector (downloads the checkpoint file automatically the first time)
detector = NudeDetector() # detector = NudeDetector('base') for the "base" version of detector.

# Detect single image
# Returns [{'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...]

# Detect video
# batch_size is optional; defaults to 2
# show_progress is optional; defaults to True
detector.detect_video('path_to_video', batch_size=BATCH_SIZE, show_progress=BOOLEAN)
# Returns {"metadata": {"fps": FPS, "video_length": TOTAL_N_FRAMES, "video_path": 'path_to_video'},
#          "preds": {frame_i: {'box': LIST_OF_COORDINATES, 'score': PROBABILITY, 'label': LABEL}, ...], ....}}


  • detect_video and classify_video first identify the "unique" frames in a video and run predictions on them for significant performance improvement.
  • V1 of NudeDetector (available in master branch of this repo) was trained on 12000 images labelled by the good folks at cti-community.
  • V2 (current version) of NudeDetector is trained on 160,000 entirely auto-labelled (using classification heat maps and various other hybrid techniques) images.
  • The entire data for the classifier is available at
  • A part of the auto-labelled data (Images are from the classifier dataset above) used to train the base Detector is available at

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for NudeNet, version 2.0.1
Filename, size File type Python version Upload date Hashes
Filename, size NudeNet-2.0.1.tar.gz (10.6 kB) File type Source Python version None Upload date Hashes View
Filename, size NudeNet-2.0.1-py2.py3-none-any.whl (21.7 kB) File type Wheel Python version py2.py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page