Products

SIGN UPLOG IN

Models / Nudity Detection

Nudity Detection

This page describes version 2.1 of the Nudity Detection. You can go to version 2.0 and version 1.0.

Overview

The Advanced Nudity Detection API is an A.I.-based service to determine the nudity content of images and videos. The model returns a total of 29 classes. 7 intensity classes to provide you with an overall classification of the image, 19 suggestive classes to give you a more fine-grained understanding of the content in the case of suggestive content, and 3 context classes that you can use to automatically understand the content of your images/videos, and set the appropriate rules.

Here are the 7 intensity classes from the most explicit to the least explicit:

Intensity classesSexual Activitysexual_activity
Sexual Displaysexual_display
Eroticaerotica
Very suggestivevery_suggestive
Suggestivesuggestive
Mildly suggestivemildly_suggestive
Nonenone

Here are the 19 suggestive classes that can be used to further refine your filtering:

Suggestive classes Visibly undressedvisibly_undressed
Sextoysextoy
Suggestive focussuggestive_focus
Suggestive posesuggestive_pose
Female underwearlingerie
Male underwearmale_underwear
Very revealing cleavagecleavage_categories.very_revealing
Revealing cleavagecleavage_categories.revealing
Very revealing male chestmale_chest_categories.very_revealing
Revealing male chestmale_chest_categories.revealing
Slightly revealing male chestmale_chest_categories.slightly_revealing
Nudity artnudity_art
Schematicschematic
Bikinibikini
One-piece swimwearswimwear_one_piece
Male swimwearswimwear_male
Minishortminishort
Miniskirtminiskirt
Other suggestive scene or poseother

Here are the 3 context classes that can be used to further refine your filtering:

Context classesSea, lake, poolsea_lake_pool
Other outdooroutdoor_other
Other indoorindoor_other

Intensity classes

Intensity classes are organized from the most explicit (sexual activity) to the least explicit (mildly suggestive).

The scores are inclusive, meaning that if an image triggers an intensity level, the levels below will also be triggered. Example: if an image contains erotica, it will lead to high scores for erotica, very_suggestive, suggestive and mildly_suggestive.

  • Sexual activity: Actual or simulated sexual activity with exposed nudity
    nudity.sexual_activity
    • Sexual intercourse with clear nudity, including genital-genital and oral-genital activity
    • Clear masturbation
    • Direct touching of genitals
    • Sex toys involved in sexual activity: penetrating mouth, anus or genitals. Includes dildos, sex dolls, fleshlights, plugs
    • Semen or vaginal fluids on faces, on body parts, on sextoys or in condoms
  • Sexual display: Explicit exposure of genitals/sexual organs
    nudity.sexual_display
    • Female genitals: exposed genitalia, vulva or anus, either directly visible or through transparent, see-through or sheer clothing
    • Male genitals, male penises, both erect and non-erect, testicles, either directly visible or through transparent, see-through or sheer clothing
    • The above applies to transgender individuals
  • Erotica: Exposure of breasts, nude buttocks or the pubic region
    nudity.erotica
    • Nude female breasts, female breasts with visible nipples or areola
    • Nude buttocks, both male and female, in a non-sexual setting
    • Pubic region, pubic hair, female crotch region or area around genitals with no genitals visible
    • Genitals clearly visible through opaque clothes or underwear
    • Women or men in underwear with a sexual pose that emphasizes their genital area, without the genitals being visible
  • Very suggestive: High level of suggestiveness, but with no sexual body parts visible.
    nudity.very_suggestive
    • Women or men who are clearly undressed but with hidden genitals, buttocks and breasts
    • Women or men in underwear or lingerie
    • Women with very revealing cleavages
    • Suggestive poses such as arching or thrusting sexual body parts
    • Suggestive focus emphasizing on the buttocks, breast or crotch area
  • Suggestive
    nudity.suggestive
    • Sculptures and statues with nude breasts, buttocks or genitals
    • Known paintings with nude breasts, buttocks or genitals. Drawings and illlustrations that are not typically considered "art" would fall under the erotica or sexual display classes.
    • Schematic representation of sexual positions, without any clearly drawn body parts
    • Men exposing their full bare chests indoors (except for pools)
  • Mildly suggestive: Low level of suggestiveness.
    nudity.mildly_suggestive
    • Women revealing their cleavage in a mildly suggestive way
    • Men revealing parts of their chests
    • Women wearing miniskirts or minishorts
    • Women or men in swimwear
  • None: This class includes all cases where none of the above suggestive or explicit situations occur. As an example, this would include situations such as:
    nudity.none
    • Exposed arms, legs in a non-sexual setting
    • People hugging or making non-sexual contact
    • People kissing (mouth-mouth)
    • People wearing tank tops or stringers without nipples visible
    • Panties, thongs, bras, swimwear shown but not worn by a person (such as on the floor)
    • Underwear worn such that only the waistband is visible
    • Unclothed dolls with no sexual organs, such as Barbie dolls

Suggestive classes

Suggestive classes can give you a more fine-grained description of the image content. This is useful when the image triggers the very_suggestive, suggestive or mildly_suggestive classes.

  • Visibly undressed
    nudity.suggestive_classes.visibly_undressed
    • Women who are naked but with the chest, buttocks and pubic areas hidden with hands, arms, objects, paint, emojis, other digital overlays or pasties
    • Men who are naked but with the buttocks and pubic areas hidden with hands, arms, objects, paint, emojis or other digital overlays
  • Sextoy: Sex toys not in use
    nudity.suggestive_classes.sextoy
    • Dildos, plugs and beads
    • Sex dolls, fleshlights
    • This class is for displays of sextoys that are not in use, such as when shown in product listings. Scenes with sex toys that are being used as part of sexual activities will be flagged under the sexual_activity class
  • Suggestive focus
    nudity.suggestive_classes.suggestive_focus
    • people wearing clothes or underwear with a camera focus on the buttocks, female breast or genital area
    • people wearing clothes or underwear with a camera focus on another sexualized body part (thighs or belly for instance)
  • Suggestive pose
    nudity.suggestive_classes.suggestive_pose
    • people wearing clothes or underwear and in a sexualized position (exaggerated back-arching, thrust buttocks, thrust breasts or other unconventional suggestive poses)
  • Female underwear and lingerie
    nudity.suggestive_classes.lingerie
    • Women wearing visible underwear bottoms: panties, thongs, etc, with or without lace, including women wearing male underwear
    • Women wearing visible underwear tops: bras, corsets transparent around the belly, with or without lace (sports bras are excluded)
    • Women wearing suggestive nightdresses or bodysuits
  • Male underwear
    nudity.suggestive_classes.male_underwear
    • Men wearing boxers, briefs, jockstraps, thongs
  • Bare male chest
    nudity.suggestive_classes.male_chest
    • Shirtless men, men where some or most of the area between the waist and shoulders is visible (bare chest, topless, nude torso, etc.) or where the back is visible
    • Men lifting the shirt to show the belly or chest area
    • Men wearing see-through, sheer, or mesh clothing with torso visible
    • Men wearing clothes exposing a large part of the nipple or belly area, such as crop-tops or very deep tank-tops
    • You can filter shirtless men based on context, for instance to allow bare chests at beaches or pools, but not in other places
    • Note that men wearing regular tank-tops or stringers are considered safe and are not flagged in this category
    • Further subclasses are available to determine how much of the torso or back is visible:
      • Very revealing nudity.suggestive_classes.male_chest_categories.very_revealing
      • Revealing nudity.suggestive_classes.male_chest_categories.revealing
      • Slightly revealing nudity.suggestive_classes.male_chest_categories.slightly_revealing
    Figure showing what the very revealing, revealing and slightly revealing male chest categories correspond to
    very_revealing revealing slightly_revealing safe
    The rating depends on which parts of the torso or back are visible, as shown on this model.
  • Suggestive cleavage / neckline
    nudity.suggestive_classes.cleavage
    • Women wearing a top with a suggestive cleavage / neckline, but where the areola and nipples are not visible
    • Further subclasses are available to determine how much of the cleavage is visible:
      • Very revealing nudity.suggestive_classes.cleavage_categories.very_revealing
      • Revealing nudity.suggestive_classes.cleavage_categories.revealing
    Figure showing what the very revealing and revealing cleavage categories correspond to
    erotica very_revealing revealing safe
    The rating depends on which parts cleavage are visible, as shown on this model. If the nipple (in bright orange) were visible then the rating would be erotica
  • Nudity art
    nudity.suggestive_classes.nudity_art
    • Sculptures and statues with nude breasts, buttocks or genitals
    • Known paintings with nude breasts, buttocks or genitals. Drawings and illlustrations that are not typically considered "art" would fall under the erotica or sexual display classes.
  • Schematic
    nudity.suggestive_classes.schematic
    • Schematic representations of sexual positions. Detailed depictions would fall under the sexual_activity category
  • Bikini
    nudity.suggestive_classes.bikini
    • Women wearing bikinis, microbikinis or two-piece swimsuits
    • You can filter bikinis based on context, for instance to allow bikinis at beaches or pools, but not indoors
  • One-piece swimwear
    nudity.suggestive_classes.swimwear_one_piece
    • Women wearing one-piece bathing suits
    • You can filter swimwear based on context, for instance to allow swimwear at beaches or pools, but not indoors
  • Male swimwear
    nudity.suggestive_classes.swimwear_male
    • Men wearing swim trunks, swim shorts or swim briefs
    • You can filter swimwear based on context, for instance to allow swimwear at beaches or pools, but not indoors
  • Minishort
    nudity.suggestive_classes.minishort
    • Women wearing suggestive shorts such as bootyshorts, compression shorts
  • Miniskirt
    nudity.suggestive_classes.miniskirt
    • Women wearing short or very short skirts, that end above the middle of the thigh
  • Other Suggestive poses or scenes
    nudity.suggestive_classes.other

Context

Some moderation decisions need to be based on context. As an example, shirtless men or women in bikinis might be moderated differently if they are at the beach or in their bathroom.

To help you perform such fine-grained decisions, additional context information is available with the following classes:

  • Beach, sea, lake, swimming pool
    nudity.context.sea_lake_pool
    • Scenes at the beach, near or on the sea, near or on lakes
    • Scenes near or in swimming pools whether outdoor or indoor
  • Other outdoor locations
    nudity.context.outdoor_other
    • Other outdoor locations such as in parks, gardens, cities, nature
  • Other indoor locations
    nudity.context.indoor_other
    • Other indoor locations such as private homes and public buildings

Code Examples (Images)

If you haven't already, create an account to get your own API keys.

Detecting nudity

Let's say you want to moderate the following image:

Safe image of woman

You can either share a URL to the image, or upload the raw binary image.

Option 1: Send image URL

Here's how to proceed if you choose to share the image URL:


curl -X GET -G 'https://api.sightengine.com/1.0/check.json' \
    -d 'models=nudity-2.1' \
    -d 'api_user={api_user}&api_secret={api_secret}' \
    --data-urlencode 'url=https://sightengine.com/assets/img/examples/example-fac-1000.jpg'


# this example uses requests
import requests
import json

params = {
  'url': 'https://sightengine.com/assets/img/examples/example-fac-1000.jpg',
  'models': 'nudity-2.1',
  'api_user': '{api_user}',
  'api_secret': '{api_secret}'
}
r = requests.get('https://api.sightengine.com/1.0/check.json', params=params)

output = json.loads(r.text)


$params = array(
  'url' =>  'https://sightengine.com/assets/img/examples/example-fac-1000.jpg',
  'models' => 'nudity-2.1',
  'api_user' => '{api_user}',
  'api_secret' => '{api_secret}',
);

// this example uses cURL
$ch = curl_init('https://api.sightengine.com/1.0/check.json?'.http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$output = json_decode($response, true);


// this example uses axios
const axios = require('axios');

axios.get('https://api.sightengine.com/1.0/check.json', {
  params: {
    'url': 'https://sightengine.com/assets/img/examples/example-fac-1000.jpg',
    'models': 'nudity-2.1',
    'api_user': '{api_user}',
    'api_secret': '{api_secret}',
  }
})
.then(function (response) {
  // on success: handle response
  console.log(response.data);
})
.catch(function (error) {
  // handle error
  if (error.response) console.log(error.response.data);
  else console.log(error.message);
});

See request parameter description

ParameterTypeDescription
mediabinaryimage to analyze
modelsstringcomma-separated list of models to apply
api_userstringyour API user id
api_secretstringyour API secret

Option 2: Send raw image

Here's how to proceed if you choose to upload the raw image:


curl -X POST 'https://api.sightengine.com/1.0/check.json' \
    -F 'media=@/path/to/image.jpg' \
    -F 'models=nudity-2.1' \
    -F 'api_user={api_user}' \
    -F 'api_secret={api_secret}'


# this example uses requests
import requests
import json

params = {
  'models': 'nudity-2.1',
  'api_user': '{api_user}',
  'api_secret': '{api_secret}'
}
files = {'media': open('/path/to/image.jpg', 'rb')}
r = requests.post('https://api.sightengine.com/1.0/check.json', files=files, data=params)

output = json.loads(r.text)


$params = array(
  'media' => new CurlFile('/path/to/image.jpg'),
  'models' => 'nudity-2.1',
  'api_user' => '{api_user}',
  'api_secret' => '{api_secret}',
);

// this example uses cURL
$ch = curl_init('https://api.sightengine.com/1.0/check.json');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);

$output = json_decode($response, true);


// this example uses axios and form-data
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

data = new FormData();
data.append('media', fs.createReadStream('/path/to/image.jpg'));
data.append('models', 'nudity-2.1');
data.append('api_user', '{api_user}');
data.append('api_secret', '{api_secret}');

axios({
  method: 'post',
  url:'https://api.sightengine.com/1.0/check.json',
  data: data,
  headers: data.getHeaders()
})
.then(function (response) {
  // on success: handle response
  console.log(response.data);
})
.catch(function (error) {
  // handle error
  if (error.response) console.log(error.response.data);
  else console.log(error.message);
});

See request parameter description

ParameterTypeDescription
mediabinaryimage to analyze
modelsstringcomma-separated list of models to apply
api_userstringyour API user id
api_secretstringyour API secret

API response

The API will then return a JSON response with the following structure:

                  
                  
{
  "status": "success",
  "request": {
    "id": "req_1SJJxJjUHnSVWreApx9fF",
    "timestamp": 1693574119.571633,
    "operations": 1
  },
  "nudity": {
    "sexual_activity": 0.01,
    "sexual_display": 0.01,
    "erotica": 0.01,
    "very_suggestive": 0.01,
    "suggestive": 0.01,
    "mildly_suggestive": 0.01,
    "suggestive_classes": {
      "bikini": 0.01,
      "cleavage": 0.01,
      "cleavage_categories": {
        "very_revealing": 0.01,
        "revealing": 0.01,
        "none": 0.99
      },
      "lingerie": 0.01,
      "male_chest": 0.01,
      "male_chest_categories": {
        "very_revealing": 0.01,
        "revealing": 0.01,
        "slightly_revealing": 0.01,
        "none": 0.99
      },
      "male_underwear": 0.01,
      "miniskirt": 0.01,
      "other": 0.01,
      "minishort": 0.11,
      "nudity_art": 0.01,
      "schematic": 0.01,
      "sextoy": 0.01,
      "suggestive_focus": 0.01,
      "suggestive_pose": 0.01,
      "swimwear_male": 0.01,
      "swimwear_one_piece": 0.01,
      "visibly_undressed": 0.01
    },
    "none": 0.99,
    "context": {
      "sea_lake_pool": 0.01,
      "outdoor_other": 0.99,
      "indoor_other": 0.01
    }
  },
  "media": {
    "id": "med_1SJJEFuLqeSedThQjhNoS",
    "uri": "https://sightengine.com/assets/img/examples/example-fac-1000.jpg"
  }
}


              

You can use the classes under the nudity object to determine the nudity level of the image. In the above example, nudity.none has a confidence of 0.99, meaning that the image does not contain nudity.

Code Examples (Videos)

Detecting nudity

Option 1: Short video

Here's how to proceed to analyze a short video (less than 1 minute):


curl -X POST 'https://api.sightengine.com/1.0/video/check-sync.json' \
  -F 'media=@/path/to/video.mp4' \
  -F 'models=nudity-2.1' \
  -F 'api_user={api_user}' \
  -F 'api_secret={api_secret}'


# this example uses requests
import requests
import json

params = {
  # specify the models you want to apply
  'models': 'nudity-2.1',
  'api_user': '{api_user}',
  'api_secret': '{api_secret}'
}
files = {'media': open('/path/to/video.mp4', 'rb')}
r = requests.post('https://api.sightengine.com/1.0/video/check-sync.json', files=files, data=params)

output = json.loads(r.text)


$params = array(
  'media' => new CurlFile('/path/to/video.mp4'),
  // specify the models you want to apply
  'models' => 'nudity-2.1',
  'api_user' => '{api_user}',
  'api_secret' => '{api_secret}',
);

// this example uses cURL
$ch = curl_init('https://api.sightengine.com/1.0/video/check-sync.json');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);

$output = json_decode($response, true);


// this example uses axios and form-data
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

data = new FormData();
data.append('media', fs.createReadStream('/path/to/video.mp4'));
// specify the models you want to apply
data.append('models', 'nudity-2.1');
data.append('api_user', '{api_user}');
data.append('api_secret', '{api_secret}');

axios({
  method: 'post',
  url:'https://api.sightengine.com/1.0/video/check-sync.json',
  data: data,
  headers: data.getHeaders()
})
.then(function (response) {
  // on success: handle response
  console.log(response.data);
})
.catch(function (error) {
  // handle error
  if (error.response) console.log(error.response.data);
  else console.log(error.message);
});

See request parameter description

ParameterTypeDescription
mediabinaryimage to analyze
modelsstringcomma-separated list of models to apply
intervalfloatframe interval in seconds, out of 0.5, 1, 2, 3, 4, 5 (optional)
api_userstringyour API user id
api_secretstringyour API secret

Option 2: Long video

Here's how to proceed to analyze a long video. Note that if the video file is very large, you might first need to upload it through the Upload API.


curl -X POST 'https://api.sightengine.com/1.0/video/check.json' \
  -F 'media=@/path/to/video.mp4' \
  -F 'models=nudity-2.1' \
  -F 'callback_url=https://yourcallback/path' \
  -F 'api_user={api_user}' \
  -F 'api_secret={api_secret}'


# this example uses requests
import requests
import json

params = {
  # specify the models you want to apply
  'models': 'nudity-2.1',
  # specify where you want to receive result callbacks
  'callback_url': 'https://yourcallback/path',
  'api_user': '{api_user}',
  'api_secret': '{api_secret}'
}
files = {'media': open('/path/to/video.mp4', 'rb')}
r = requests.post('https://api.sightengine.com/1.0/video/check.json', files=files, data=params)

output = json.loads(r.text)


$params = array(
  'media' => new CurlFile('/path/to/video.mp4'),
  // specify the models you want to apply
  'models' => 'nudity-2.1',
  // specify where you want to receive result callbacks
  'callback_url' => 'https://yourcallback/path',
  'api_user' => '{api_user}',
  'api_secret' => '{api_secret}',
);

// this example uses cURL
$ch = curl_init('https://api.sightengine.com/1.0/video/check.json');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);

$output = json_decode($response, true);


// this example uses axios and form-data
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

data = new FormData();
data.append('media', fs.createReadStream('/path/to/video.mp4'));
// specify the models you want to apply
data.append('models', 'nudity-2.1');
// specify where you want to receive result callbacks
data.append('callback_url', 'https://yourcallback/path');
data.append('api_user', '{api_user}');
data.append('api_secret', '{api_secret}');

axios({
  method: 'post',
  url:'https://api.sightengine.com/1.0/video/check.json',
  data: data,
  headers: data.getHeaders()
})
.then(function (response) {
  // on success: handle response
  console.log(response.data);
})
.catch(function (error) {
  // handle error
  if (error.response) console.log(error.response.data);
  else console.log(error.message);
});

See request parameter description

ParameterTypeDescription
mediabinaryimage to analyze
callback_urlstringcallback URL to receive moderation updates (optional)
modelsstringcomma-separated list of models to apply
intervalfloatframe interval in seconds, out of 0.5, 1, 2, 3, 4, 5 (optional)
api_userstringyour API user id
api_secretstringyour API secret

Option 3: Live-stream

Here's how to proceed to analyze a live-stream:


curl -X GET -G 'https://api.sightengine.com/1.0/video/check.json' \
    --data-urlencode 'stream_url=https://domain.tld/path/video.m3u8' \
    -d 'models=nudity-2.1' \
    -d 'callback_url=https://your.callback.url/path' \
    -d 'api_user={api_user}' \
    -d 'api_secret={api_secret}'


# if you haven't already, install the SDK with 'pip install sightengine'
from sightengine.client import SightengineClient
client = SightengineClient('{api_user}','{api_secret}')
output = client.check('nudity-2.1').video('https://domain.tld/path/video.m3u8', 'https://your.callback.url/path')


// if you haven't already, install the SDK with 'composer require sightengine/client-php'
use \Sightengine\SightengineClient;
$client = new SightengineClient('{api_user}','{api_secret}');
$output = $client->check(['nudity-2.1'])->video('https://domain.tld/path/video.m3u8', 'https://your.callback.url/path');


// if you haven't already, install the SDK with 'npm install sightengine --save'
var sightengine = require('sightengine')('{api_user}', '{api_secret}');
sightengine.check(['nudity-2.1']).video('https://domain.tld/path/video.m3u8', 'https://your.callback.url/path').then(function(result) {
    // The API response (result)
}).catch(function(err) {
    // Handle error
});

See request parameter description

ParameterTypeDescription
stream_urlstringURL of the video stream
callback_urlstringcallback URL to receive moderation updates (optional)
modelsstringcomma-separated list of models to apply
intervalfloatframe interval in seconds, out of 0.5, 1, 2, 3, 4, 5 (optional)
api_userstringyour API user id
api_secretstringyour API secret

Moderation result

The Moderation result will be provided either directly in the request response (for sync calls, see below) or through the callback URL your provided (for async calls).

Here is the structure of the JSON response with moderation results for each analyzed frame under the data.frames array:

            
                  
{
  "status": "success",
  "request": {
    "id": "req_gmgHNy8oP6nvXYaJVLq9n",
    "timestamp": 1717159864.348989,
    "operations": 21
  },
  "data": {
    "frames": [
      {
        "info": {
          "id": "med_gmgHcUOwe41rWmqwPhVNU_1",
          "position": 0
        },
        "nudity": {
          "sexual_activity": 0.01,
          "sexual_display": 0.01,
          "erotica": 0.01,
          "very_suggestive": 0.01,
          "suggestive": 0.01,
          "mildly_suggestive": 0.03,
          "suggestive_classes": {
            "bikini": 0.01,
            "cleavage": 0.01,
            "cleavage_categories": {
              "very_revealing": 0.01,
              "revealing": 0.01,
              "none": 0.99
            },
            "lingerie": 0.01,
            "male_chest": 0.01,
            "male_chest_categories": {
              "very_revealing": 0.01,
              "revealing": 0.01,
              "slightly_revealing": 0.01,
              "none": 0.99
            },
            "male_underwear": 0.01,
            "miniskirt": 0.01,
            "minishort": 0.01,
            "nudity_art": 0.01,
            "schematic": 0.01,
            "sextoy": 0.01,
            "suggestive_focus": 0.01,
            "suggestive_pose": 0.01,
            "swimwear_male": 0.01,
            "swimwear_one_piece": 0.01,
            "visibly_undressed": 0.01,
            "other": 0.01
          },
          "none": 0.97,
          "context": {
              "sea_lake_pool": 0.02,
              "outdoor_other": 0.15,
              "indoor_other": 0.83
          }
        }
      },
      ...
    ]
  },
  "media": {
    "id": "med_gmgHcUOwe41rWmqwPhVNU",
    "uri": "yourfile.mp4"
  },
}


            

You can use the classes under the nudity object to determine the nudity level of the video. In the above example, nudity.none has a confidence of 0.99, meaning that the video does not contain nudity.

Any other needs?

See our full list of Image/Video models for details on other filters and checks you can run on your images and videos. You might also want to check our Text models to moderate text-based content: messages, reviews, comments, usernames...

Was this page helpful?