The Visual Text Moderation API is useful to determine if an image or video contains unwanted text such as profanity or personally identifiable information.
The API gives you fine-grained control over the moderation decision. The API will tell you what type of content has been found (phone number, email address, discriminatory content, sexual content...) along with a text extract of the content. You can then use this response to reject, flag or review the image/video on your end.
Just like our other Image Moderation APIs, this API uses advanced AI to perform the analysis entirely automatically. There are no humans reviewing your content. This helps us achieve very fast turnaround times — typically a couple of seconds — and very high scalablity.
The Text Moderation API for Images works in several steps:
Profanity Detection will enable you to detect insults, discriminatory content, sexual content or other inappropriate words and phrases in your images.
It is a lot stronger than word-based filters. It uses advanced language analysis to detect objectionable content, even when users specifically attempt to circumvent your filters. It covers obfuscation techniques such as repetitions, insertions, spelling mistakes, leet speak and more. Learn more on our Text Moderation Engine.
Email addresses will be detected and flagged as such in the image.
Phone numbers will be detected and flagged as such in the image.
You can select the countries to be covered through the opt_countries parameter. Provide a comma-separated list of the ISO 3166 2-letter country codes. For instance us for the United-States, fr for France. See the full list of supported countries.
If you do not specify any country, the API will default to the following list of countries: United States us, France fr, United Kingdom gb
Links and URLs will be detected and flagged as such in the image.
In addition to detecting URLs in Images or Videos, you can also moderate the link to determine if the link is unsafe, deceptive or known to contain otherwise unwanted content (such as adult content, gambling, drugs...). More details are available on the URL and link moderation page.
Mentions of social networks and social accounts can be detected in images. This detection works on any text-based mention. It will not flag logos of said social networks.
The most common social networks are supported by default: facebook, whatsapp, snapchat. Other social networks can be made available on a custom basis. Reach out for more.
English is the default language used for the text recognition and profanity filtering.
You can set a different language with the opt_lang parameter. To do so use the following codes:
Language | Code |
English (default) | en |
Chinese | zh |
Dutch | nl |
French | fr |
German | de |
Italian | it |
Portuguese | pt |
Spanish | es |
Swedish | sv |
Tagalog / Filipino | tl |
Turkish | tr |
Other languages are available upon request. Please get in touch.
If you haven't already, create an account to get your own API keys.
Let's say you want to moderate the following image:
You can either upload a public URL to the image, or upload the raw binary image. Here's how to proceed if you choose to share the image's public URL:
curl -X GET -G 'https://api.sightengine.com/1.0/check.json' \
-d 'models=text-content' \
-d 'api_user={api_user}&api_secret={api_secret}' \
--data-urlencode 'url=https://sightengine.com/assets/img/examples/example-text-ocr-3.jpg'
# this example uses requests
import requests
import json
params = {
'url': 'https://sightengine.com/assets/img/examples/example-text-ocr-3.jpg',
'models': 'text-content',
'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-text-ocr-3.jpg',
'models' => 'text-content',
'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-text-ocr-3.jpg',
'models': 'text-content',
'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);
});
The API will then return a JSON response:
{
"status": "success",
"request": {
"id": "req_22Qd0gUNmRH4GCYLvYtN6",
"timestamp": 1512483673.1405,
"operations": 1
},
"text": {
"personal": [
{
"type": "phone_number_us",
"match": "+1 800 222 2408"
}
],
"link": [],
"social": [],
"profanity": [],
"ignored_text": false
},
"media": {
"id": "med_22Qdfb5s97w8EDuY7Yfjp",
"uri": "https://sightengine.com/assets/img/examples/example-text-ocr-3.jpg"
}
}
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?