Nudity Detection
nudity-2.1Detect explicit, suggestive, and NSFW content in images and videos with 29 fine-grained classes.
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 classes | Sexual Activity | sexual_activity |
| Sexual Display | sexual_display | |
| Erotica | erotica | |
| Very suggestive | very_suggestive | |
| Suggestive | suggestive | |
| Mildly suggestive | mildly_suggestive | |
| None | none |
Here are the 19 suggestive classes that can be used to further refine your filtering:
| Suggestive classes | Visibly undressed | visibly_undressed |
| Sextoy | sextoy | |
| Suggestive focus | suggestive_focus | |
| Suggestive pose | suggestive_pose | |
| Female underwear | lingerie | |
| Male underwear | male_underwear | |
| Very revealing cleavage | cleavage_categories.very_revealing | |
| Revealing cleavage | cleavage_categories.revealing | |
| Very revealing male chest | male_chest_categories.very_revealing | |
| Revealing male chest | male_chest_categories.revealing | |
| Slightly revealing male chest | male_chest_categories.slightly_revealing | |
| Nudity art | nudity_art | |
| Schematic | schematic | |
| Bikini | bikini | |
| One-piece swimwear | swimwear_one_piece | |
| Male swimwear | swimwear_male | |
| Minishort | minishort | |
| Miniskirt | miniskirt | |
| Other suggestive scene or pose | other |
Here are the 3 context classes that can be used to further refine your filtering:
| Context classes | Sea, lake, pool | sea_lake_pool |
| Other outdoor | outdoor_other | |
| Other indoor | indoor_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
very_revealing revealing slightly_revealing safeThe 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
erotica very_revealing revealing safeThe 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:
You can either share a URL to the image, or upload the image file.
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
| Parameter | Type | Description |
| url | string | URL of the image to analyze |
| models | string | comma-separated list of models to apply |
| api_user | string | your API user id |
| api_secret | string | your API secret |
Option 2: Send image file
Here's how to proceed if you choose to upload the image file:
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
| Parameter | Type | Description |
| media | file | image to analyze |
| models | string | comma-separated list of models to apply |
| api_user | string | your API user id |
| api_secret | string | your 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"
}
}
Successful Response
Status code: 200, Content-Type: application/json| Field | Type | Description |
| status | string | status of the request, either "success" or "failure" |
| request | object | information about the processed request |
| request.id | string | unique identifier of the request |
| request.timestamp | float | timestamp of the request in Unix time |
| request.operations | integer | number of operations consumed by the request |
| nudity | object | results for the model |
| media | object | information about the media analyzed |
| media.id | string | unique identifier of the media |
| media.uri | string | URI of the media analyzed: either the URL or the filename |
Error
Status codes: 4xx and 5xx. See how error responses are structured.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
| Parameter | Type | Description |
| media | file | image to analyze |
| models | string | comma-separated list of models to apply |
| interval | float | frame interval in seconds, out of 0.5, 1, 2, 3, 4, 5 (optional) |
| api_user | string | your API user id |
| api_secret | string | your 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
| Parameter | Type | Description |
| media | file | image to analyze |
| callback_url | string | callback URL to receive moderation updates (optional) |
| models | string | comma-separated list of models to apply |
| interval | float | frame interval in seconds, out of 0.5, 1, 2, 3, 4, 5 (optional) |
| api_user | string | your API user id |
| api_secret | string | your 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}'
# this example uses requests
import requests
import json
params = {
'stream_url': 'https://domain.tld/path/video.m3u8',
# specify the models you want to apply
'models': 'nudity-2.1',
# specify where you want to receive result callbacks
'callback_url': 'https://your.callback.url/path',
'api_user': '{api_user}',
'api_secret': '{api_secret}'
}
r = requests.post('https://api.sightengine.com/1.0/video/check.json', data=params)
output = json.loads(r.text)
$params = array(
'stream_url' => 'https://domain.tld/path/video.m3u8',
// specify the models you want to apply
'models' => 'nudity-2.1',
// specify where you want to receive result callbacks
'callback_url' => 'https://your.callback.url/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('stream_url', 'https://domain.tld/path/video.m3u8');
// 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://your.callback.url/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
| Parameter | Type | Description |
| stream_url | string | URL of the video stream |
| callback_url | string | callback URL to receive moderation updates (optional) |
| models | string | comma-separated list of models to apply |
| interval | float | frame interval in seconds, out of 0.5, 1, 2, 3, 4, 5 (optional) |
| api_user | string | your API user id |
| api_secret | string | your 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.