Models / Smoking & Tobacco Product Detection

Smoking & Tobacco Product Detection


The Smoking & Tobacco Product detection model helps you determine if an image or video contains tobacco products and smoking-related situations such as:

  • people visibly smoking (such as holding a cigarette or puffing smoke)
  • cigarettes, cigarette butts, cigarette packs and similar paper-based smoking products
  • cigars
  • pipes
  • hookahs, shishas

This model focuses on products that are legal in most jurisdictions.

To detect marijuana-related smoking such as joints, cannabis, marijuana leaves, processed marijuana or to detect devices usually related to the consumption of illegal drugs (such as bongs or glasspipes) you should use the recreational_drugs category in the Drug Detection model instead.


The tobacco value returned is between 0 and 1, images with a value close to 1 will contain displays of smoking, while images with a value closer to 0 are considered to be safe.

Here are a few examples:

Cigarettes & cigarette butts

Typical commercial cigarettes or cigarette butts. This does not include joints that are visibly associated with marijuana.


People smoking or puffing smoke

Displays of people visibly smoking, such as holding a cigarette, cigar or pipe, puffing smoke, or having their face surrounded by smoke.


Cigarette packs

Typical commercial cigarette packs, as sold in stores.



Cigars in hand or in cigar boxes.


Smoking Pipes

Tobacco pipes, either in hand or not. This does not include glasspipes.


Hookahs, shishas or waterpipes

Instruments used for smoking, especially in some European or Middle-Eastern countries. This does not include bongs.


Use the model

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

Detect Smoking

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 '' \
    -d 'models=tobacco' \
    -d 'api_user={api_user}&api_secret={api_secret}' \
    --data-urlencode 'url='

# this example uses requests
import requests
import json

params = {
  'url': '',
  'models': 'tobacco',
  'api_user': '{api_user}',
  'api_secret': '{api_secret}'
r = requests.get('', params=params)

output = json.loads(r.text)

$params = array(
  'url' =>  '',
  'models' => 'tobacco',
  'api_user' => '{api_user}',
  'api_secret' => '{api_secret}',

// this example uses cURL
$ch = curl_init(''.http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

$output = json_decode($response, true);

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

axios.get('', {
  params: {
    'url': '',
    'models': 'tobacco',
    'api_user': '{api_user}',
    'api_secret': '{api_secret}',
.then(function (response) {
  // on success: handle response
.catch(function (error) {
  // handle error
  if (error.response) console.log(;
  else console.log(error.message);

The API will then return a JSON response such as this:

    "status": "success",
    "request": {
        "id": "req_1OjggusalNb2S7MxwLq2h",
        "timestamp": 1509132120.6988,
        "operations": 1
    "tobacco": {
        "prob": 0.9
    "media": {
        "id": "med_1OjgEqvJtOhqP7sfNe3ga",
        "uri": ""

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?