Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Join us at GITEX 2024! Discover our solutions at Hall 4, Booth H-30 Schedule a Meeting Today.
Automate Marketing Initiatives with Salesforce Marketing Cloud Learn More
Join us at GITEX 2024! Discover our solutions at Hall 4, Booth H-30 Book your live demo today.
Train tensorflow object detection model with custom data

Train Tensorflow Object Detection Model With Custom Data

Want to create your own AI Model ?

In this article, we’ll show you how to make your own tool that can recognize things in pictures. It’s called an object detection model, and we’ll use TensorFlow to teach it. We’ll explain each step clearly, from gathering pictures, preparing data to telling the model what to look for in them. By the end, you’ll have a powerful tool to spot objects in your own projects. Just make sure you have Python version 3.9 installed before we start! 

Creating A Dataset

To build a dataset, begin by gathering images for training. In my case, I aim to train a model to detect plastic bottles, so I’ve collected images containing plastic bottles and stored them in a directory named “images.” Adding annotations to these images is essential for training the model. To create annotations, start by installing labelImg using: 

“pip install labelImg”

Then, run “labelImg” from the command prompt. With labelImg, you can mark objects in the images and save the file. Each image will have its corresponding XML file, saved in the “annotations” directory. The dataset format used here follows the pascal_voc standard. 

Here’s a step-by-step demo of using labelImg:

  • Click on “Open Dir” on the left side menu to select a directory containing images you want to label.
  • Once an image is selected, click on the “Create RectBox” button to draw a box around the object of interest, such as a plastic bottle. Label it accordingly.
  • If there are multiple objects in an image, repeat the previous step for each object.
  • After labeling, click “Save” on the left side menu to generate an XML file.
  • Click “Next” to move to the next image and repeat the labeling process from step 2.
image (1)

This is how your images and annotations directory should look like

image

Prerequisites

Install the required packages

  • pip install tflite-model-maker
  • pip install numpy==1.23.5 
  • pip install tensorflow-datasets==4.8.3 

Directory Structure

As we will be carrying out a custom object detection project, having a simple yet effective directory structure is pretty much important.

image (2)

Object Detection Model Training Process

from tflite_model_maker import object_detector
from tflite_model_maker import model_spec
import os

image_dir = os.path.join("dataset","images")
annotations_dir = os.path.join("dataset", "annotations")

data = object_detector.DataLoader.from_pascal_voc(image_dir, annotations_dir, label_map={1: "bottle"})

spec = model_spec.get('efficientdet_lite4')
spec.config.var_freeze_expr = 'efficientnet'

model = object_detector.create(data,model_spec=spec, epochs=100, batch_size=2,train_whole_model=True)

# Export the trained model.
model.export(export_dir='.')

This code snippet demonstrates the process of training a machine learning model to detect objects in images, with a focus on identifying bottles. Here’s a breakdown of the steps:

1. Importing Libraries: ​

  • tflite_model_maker: This library helps in creating TensorFlow Lite models easily. 
  • model_spec: This library provides predefined model specifications. 

Defining Directories: ​​

  • image_dir: This variable stores the directory path where images for training are stored.
  • annotations_dir: This variable stores the directory path where annotations (labels) for the images are stored. 

Loading Data:

  • Object_detector.DataLoader.from_pascal_voc: This function loads the data from the Pascal VOC format, which is a standard format for storing annotations (bounding boxes around objects) along with images. It loads images from image_dir and their corresponding annotations from annotations_dir. In this case, it’s looking for bottles, which are labeled as class 1. 

Defining Model Specification: 

  • model_spec.get(‘efficientdet_lite4’): This line defines the model specification. It selects a specific pre-trained model called “efficientdet_lite4”, which is an efficient object detection model. 

Creating the Model:

  • object_detector.create: This function creates the object detection model using the provided data and model specification. It trains the model for 100 epochs (iterations over the entire dataset), with a batch size of 2, and trains the entire model (not just the top layers). 

Exporting the Trained Model:

  • model.export(export_dir=’.’): This line exports the trained model to the current directory. The model can then be used for inference (making predictions) on new images.  

Making Predictions With The Trained Object Detection Model

Now that the model has been trained, it’s ready to make predictions by loading the saved model.

import cv2
import numpy as np
from PIL import Image
import tensorflow as tf
from tflite_support import metadata
from tflite_model_maker import object_detector

model_path = 'model.tflite'
# Load the TFLite model
interpreter = tf.lite.Interpreter(model_path=model_path)
interpreter.allocate_tensors()

displayer = metadata.MetadataDisplayer.with_model_file(model_path)

# Load label list from metadata.
file_name = displayer.get_packed_associated_file_list()[0]
label_map_file = displayer.get_associated_file_buffer(file_name).decode()
label_list = list(filter(lambda x: len(x) > 0, label_map_file.splitlines()))

# Load labels (if available)
num_classes = len(label_list)
classes = ['???'] * num_classes
for label_id, label_name in enumerate(label_list):
    classes[label_id] = label_name

# Define a list of colors for visualization
COLORS = np.random.randint(0, 255, size=(len(classes), 3), dtype=np.uint8)

1. Loading the Model:

  • interpreter = tf.lite.Interpreter(model_path=model_path): This line loads the TensorFlow Lite model from the specified path. 

2. Loading Metadata:

  • displayer = metadata.MetadataDisplayer.with_model_file(model_path): This line loads metadata associated with the model. 
  • label_map_file = displayer.get_associated_file_buffer(file_name).decode(): It extracts label information from the metadata. 
def preprocess_image(image_path, input_size):
"""Preprocess the input image to feed to the TFLite model"""
    img = tf.io.read_file(image_path)
    img = tf.io.decode_image(img, channels=3)
    img = tf.image.convert_image_dtype(img, tf.uint8)
    original_image = img
    resized_img = tf.image.resize(img, input_size)
    resized_img = resized_img[tf.newaxis, :]
    resized_img = tf.cast(resized_img, dtype=tf.uint8)
    return resized_img, original_image

3. Preprocessing the Image:

  • preprocess_image function: This function reads an image from a file, resizes it to the required input size for the model, and prepares it for feeding into the model. 

 

def detect_objects(interpreter, image, threshold):
"""Returns a list of detection results, each a dictionary of object info."""

    signature_fn = interpreter.get_signature_runner()

    # Feed the input image to the model
    output = signature_fn(images=image)

    # Get all outputs from the model
    count = int(np.squeeze(output['output_0']))
    scores = np.squeeze(output['output_1'])
    classes = np.squeeze(output['output_2'])
    boxes = np.squeeze(output['output_3'])

    results = []
    for i in range(count):
      if scores[i] >= threshold:
        result = {
          'bounding_box': boxes[i],
          'class_id': classes[i],
          'score': scores[i]
        }
        results.append(result)
    return results

4. Detecting Objects:

  • detect_objects function: This function runs object detection on the preprocessed image using the loaded model interpreter. It returns a list of detected objects along with their bounding boxes and confidence scores. 
def run_odt_and_draw_results(image_path, interpreter, threshold=0.5):
"""Run object detection on the input image and draw the detection results"""
    # Load the input shape required by the model
    _, input_height, input_width, _ = interpreter.get_input_details()[0]['shape']

    # Load the input image and preprocess it
    preprocessed_image, original_image = preprocess_image(
        image_path,
        (input_height, input_width)
      )

    # Run object detection on the input image
    results = detect_objects(interpreter, preprocessed_image, threshold=threshold)

    # Plot the detection results on the input image
    original_image_np = original_image.numpy().astype(np.uint8)
    for obj in results:
      # Convert the object bounding box from relative coordinates to absolute
      ymin, xmin, ymax, xmax = obj['bounding_box']
      xmin = int(xmin * original_image_np.shape[1])
      xmax = int(xmax * original_image_np.shape[1])
      ymin = int(ymin * original_image_np.shape[0])
      ymax = int(ymax * original_image_np.shape[0])

      # Find the class index of the current object
      class_id = int(obj['class_id'])
      # Draw the bounding box and label on the image
      color = [int(c) for c in COLORS[class_id]]
      cv2.rectangle(original_image_np, (xmin, ymin), (xmax, ymax), color, 2)
      # Make adjustments to make the label visible for all objects
      y = ymin - 15 if ymin - 15 > 15 else ymin + 15
      label = "{}: {:.0f}%".format(classes[class_id], obj['score'] * 100)
      cv2.putText(original_image_np, label, (xmin, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

    # Return the final image
    original_uint8 = original_image_np.astype(np.uint8)
    return original_uint8

5. Drawing Results on Image:

  • run_odt_and_draw_results function: This function takes an image path, runs object detection on it, and draws bounding boxes and labels on the image based on the detected objects. 
INPUT_IMAGE_URL = "test_images/bottle.jpg"
DETECTION_THRESHOLD = 0.3

# Run inference and draw detection result on the local copy of the original file
detection_result_image = run_odt_and_draw_results(
    INPUT_IMAGE_URL,
    interpreter,
    threshold=DETECTION_THRESHOLD
)
detection_result_image_rgb = cv2.cvtColor(detection_result_image, cv2.COLOR_BGR2RGB)
cv2.imwrite("image.png", detection_result_image_rgb, [cv2.IMWRITE_PNG_COMPRESSION, 0])

6. Running Object Detection and Displaying Results:

  • run_odt_and_draw_results is called with the input image URL and other parameters like the detection threshold.
  • Detected objects are drawn on the image, and the result is saved as an image file and displayed. 
  • The final detection result image is converted to RGB format and displayed. 

Result

image
10
6
11
13

    +1
    • United States+1
    • United Kingdom+44
    • Afghanistan (‫افغانستان‬‎)+93
    • Albania (Shqipëri)+355
    • Algeria (‫الجزائر‬‎)+213
    • American Samoa+1684
    • Andorra+376
    • Angola+244
    • Anguilla+1264
    • Antigua and Barbuda+1268
    • Argentina+54
    • Armenia (Հայաստան)+374
    • Aruba+297
    • Australia+61
    • Austria (Österreich)+43
    • Azerbaijan (Azərbaycan)+994
    • Bahamas+1242
    • Bahrain (‫البحرين‬‎)+973
    • Bangladesh (বাংলাদেশ)+880
    • Barbados+1246
    • Belarus (Беларусь)+375
    • Belgium (België)+32
    • Belize+501
    • Benin (Bénin)+229
    • Bermuda+1441
    • Bhutan (འབྲུག)+975
    • Bolivia+591
    • Bosnia and Herzegovina (Босна и Херцеговина)+387
    • Botswana+267
    • Brazil (Brasil)+55
    • British Indian Ocean Territory+246
    • British Virgin Islands+1284
    • Brunei+673
    • Bulgaria (България)+359
    • Burkina Faso+226
    • Burundi (Uburundi)+257
    • Cambodia (កម្ពុជា)+855
    • Cameroon (Cameroun)+237
    • Canada+1
    • Cape Verde (Kabu Verdi)+238
    • Caribbean Netherlands+599
    • Cayman Islands+1345
    • Central African Republic (République centrafricaine)+236
    • Chad (Tchad)+235
    • Chile+56
    • China (中国)+86
    • Christmas Island+61
    • Cocos (Keeling) Islands+61
    • Colombia+57
    • Comoros (‫جزر القمر‬‎)+269
    • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
    • Congo (Republic) (Congo-Brazzaville)+242
    • Cook Islands+682
    • Costa Rica+506
    • Côte d’Ivoire+225
    • Croatia (Hrvatska)+385
    • Cuba+53
    • Curaçao+599
    • Cyprus (Κύπρος)+357
    • Czech Republic (Česká republika)+420
    • Denmark (Danmark)+45
    • Djibouti+253
    • Dominica+1767
    • Dominican Republic (República Dominicana)+1
    • Ecuador+593
    • Egypt (‫مصر‬‎)+20
    • El Salvador+503
    • Equatorial Guinea (Guinea Ecuatorial)+240
    • Eritrea+291
    • Estonia (Eesti)+372
    • Ethiopia+251
    • Falkland Islands (Islas Malvinas)+500
    • Faroe Islands (Føroyar)+298
    • Fiji+679
    • Finland (Suomi)+358
    • France+33
    • French Guiana (Guyane française)+594
    • French Polynesia (Polynésie française)+689
    • Gabon+241
    • Gambia+220
    • Georgia (საქართველო)+995
    • Germany (Deutschland)+49
    • Ghana (Gaana)+233
    • Gibraltar+350
    • Greece (Ελλάδα)+30
    • Greenland (Kalaallit Nunaat)+299
    • Grenada+1473
    • Guadeloupe+590
    • Guam+1671
    • Guatemala+502
    • Guernsey+44
    • Guinea (Guinée)+224
    • Guinea-Bissau (Guiné Bissau)+245
    • Guyana+592
    • Haiti+509
    • Honduras+504
    • Hong Kong (香港)+852
    • Hungary (Magyarország)+36
    • Iceland (Ísland)+354
    • India (भारत)+91
    • Indonesia+62
    • Iran (‫ایران‬‎)+98
    • Iraq (‫العراق‬‎)+964
    • Ireland+353
    • Isle of Man+44
    • Israel (‫ישראל‬‎)+972
    • Italy (Italia)+39
    • Jamaica+1
    • Japan (日本)+81
    • Jersey+44
    • Jordan (‫الأردن‬‎)+962
    • Kazakhstan (Казахстан)+7
    • Kenya+254
    • Kiribati+686
    • Kosovo+383
    • Kuwait (‫الكويت‬‎)+965
    • Kyrgyzstan (Кыргызстан)+996
    • Laos (ລາວ)+856
    • Latvia (Latvija)+371
    • Lebanon (‫لبنان‬‎)+961
    • Lesotho+266
    • Liberia+231
    • Libya (‫ليبيا‬‎)+218
    • Liechtenstein+423
    • Lithuania (Lietuva)+370
    • Luxembourg+352
    • Macau (澳門)+853
    • Macedonia (FYROM) (Македонија)+389
    • Madagascar (Madagasikara)+261
    • Malawi+265
    • Malaysia+60
    • Maldives+960
    • Mali+223
    • Malta+356
    • Marshall Islands+692
    • Martinique+596
    • Mauritania (‫موريتانيا‬‎)+222
    • Mauritius (Moris)+230
    • Mayotte+262
    • Mexico (México)+52
    • Micronesia+691
    • Moldova (Republica Moldova)+373
    • Monaco+377
    • Mongolia (Монгол)+976
    • Montenegro (Crna Gora)+382
    • Montserrat+1664
    • Morocco (‫المغرب‬‎)+212
    • Mozambique (Moçambique)+258
    • Myanmar (Burma) (မြန်မာ)+95
    • Namibia (Namibië)+264
    • Nauru+674
    • Nepal (नेपाल)+977
    • Netherlands (Nederland)+31
    • New Caledonia (Nouvelle-Calédonie)+687
    • New Zealand+64
    • Nicaragua+505
    • Niger (Nijar)+227
    • Nigeria+234
    • Niue+683
    • Norfolk Island+672
    • North Korea (조선 민주주의 인민 공화국)+850
    • Northern Mariana Islands+1670
    • Norway (Norge)+47
    • Oman (‫عُمان‬‎)+968
    • Pakistan (‫پاکستان‬‎)+92
    • Palau+680
    • Palestine (‫فلسطين‬‎)+970
    • Panama (Panamá)+507
    • Papua New Guinea+675
    • Paraguay+595
    • Peru (Perú)+51
    • Philippines+63
    • Poland (Polska)+48
    • Portugal+351
    • Puerto Rico+1
    • Qatar (‫قطر‬‎)+974
    • Réunion (La Réunion)+262
    • Romania (România)+40
    • Russia (Россия)+7
    • Rwanda+250
    • Saint Barthélemy+590
    • Saint Helena+290
    • Saint Kitts and Nevis+1869
    • Saint Lucia+1758
    • Saint Martin (Saint-Martin (partie française))+590
    • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
    • Saint Vincent and the Grenadines+1784
    • Samoa+685
    • San Marino+378
    • São Tomé and Príncipe (São Tomé e Príncipe)+239
    • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
    • Senegal (Sénégal)+221
    • Serbia (Србија)+381
    • Seychelles+248
    • Sierra Leone+232
    • Singapore+65
    • Sint Maarten+1721
    • Slovakia (Slovensko)+421
    • Slovenia (Slovenija)+386
    • Solomon Islands+677
    • Somalia (Soomaaliya)+252
    • South Africa+27
    • South Korea (대한민국)+82
    • South Sudan (‫جنوب السودان‬‎)+211
    • Spain (España)+34
    • Sri Lanka (ශ්‍රී ලංකාව)+94
    • Sudan (‫السودان‬‎)+249
    • Suriname+597
    • Svalbard and Jan Mayen+47
    • Swaziland+268
    • Sweden (Sverige)+46
    • Switzerland (Schweiz)+41
    • Syria (‫سوريا‬‎)+963
    • Taiwan (台灣)+886
    • Tajikistan+992
    • Tanzania+255
    • Thailand (ไทย)+66
    • Timor-Leste+670
    • Togo+228
    • Tokelau+690
    • Tonga+676
    • Trinidad and Tobago+1868
    • Tunisia (‫تونس‬‎)+216
    • Turkey (Türkiye)+90
    • Turkmenistan+993
    • Turks and Caicos Islands+1649
    • Tuvalu+688
    • U.S. Virgin Islands+1340
    • Uganda+256
    • Ukraine (Україна)+380
    • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
    • United Kingdom+44
    • United States+1
    • Uruguay+598
    • Uzbekistan (Oʻzbekiston)+998
    • Vanuatu+678
    • Vatican City (Città del Vaticano)+39
    • Venezuela+58
    • Vietnam (Việt Nam)+84
    • Wallis and Futuna (Wallis-et-Futuna)+681
    • Western Sahara (‫الصحراء الغربية‬‎)+212
    • Yemen (‫اليمن‬‎)+967
    • Zambia+260
    • Zimbabwe+263
    • Åland Islands+358

      +1
      • United States+1
      • United Kingdom+44
      • Afghanistan (‫افغانستان‬‎)+93
      • Albania (Shqipëri)+355
      • Algeria (‫الجزائر‬‎)+213
      • American Samoa+1684
      • Andorra+376
      • Angola+244
      • Anguilla+1264
      • Antigua and Barbuda+1268
      • Argentina+54
      • Armenia (Հայաստան)+374
      • Aruba+297
      • Australia+61
      • Austria (Österreich)+43
      • Azerbaijan (Azərbaycan)+994
      • Bahamas+1242
      • Bahrain (‫البحرين‬‎)+973
      • Bangladesh (বাংলাদেশ)+880
      • Barbados+1246
      • Belarus (Беларусь)+375
      • Belgium (België)+32
      • Belize+501
      • Benin (Bénin)+229
      • Bermuda+1441
      • Bhutan (འབྲུག)+975
      • Bolivia+591
      • Bosnia and Herzegovina (Босна и Херцеговина)+387
      • Botswana+267
      • Brazil (Brasil)+55
      • British Indian Ocean Territory+246
      • British Virgin Islands+1284
      • Brunei+673
      • Bulgaria (България)+359
      • Burkina Faso+226
      • Burundi (Uburundi)+257
      • Cambodia (កម្ពុជា)+855
      • Cameroon (Cameroun)+237
      • Canada+1
      • Cape Verde (Kabu Verdi)+238
      • Caribbean Netherlands+599
      • Cayman Islands+1345
      • Central African Republic (République centrafricaine)+236
      • Chad (Tchad)+235
      • Chile+56
      • China (中国)+86
      • Christmas Island+61
      • Cocos (Keeling) Islands+61
      • Colombia+57
      • Comoros (‫جزر القمر‬‎)+269
      • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
      • Congo (Republic) (Congo-Brazzaville)+242
      • Cook Islands+682
      • Costa Rica+506
      • Côte d’Ivoire+225
      • Croatia (Hrvatska)+385
      • Cuba+53
      • Curaçao+599
      • Cyprus (Κύπρος)+357
      • Czech Republic (Česká republika)+420
      • Denmark (Danmark)+45
      • Djibouti+253
      • Dominica+1767
      • Dominican Republic (República Dominicana)+1
      • Ecuador+593
      • Egypt (‫مصر‬‎)+20
      • El Salvador+503
      • Equatorial Guinea (Guinea Ecuatorial)+240
      • Eritrea+291
      • Estonia (Eesti)+372
      • Ethiopia+251
      • Falkland Islands (Islas Malvinas)+500
      • Faroe Islands (Føroyar)+298
      • Fiji+679
      • Finland (Suomi)+358
      • France+33
      • French Guiana (Guyane française)+594
      • French Polynesia (Polynésie française)+689
      • Gabon+241
      • Gambia+220
      • Georgia (საქართველო)+995
      • Germany (Deutschland)+49
      • Ghana (Gaana)+233
      • Gibraltar+350
      • Greece (Ελλάδα)+30
      • Greenland (Kalaallit Nunaat)+299
      • Grenada+1473
      • Guadeloupe+590
      • Guam+1671
      • Guatemala+502
      • Guernsey+44
      • Guinea (Guinée)+224
      • Guinea-Bissau (Guiné Bissau)+245
      • Guyana+592
      • Haiti+509
      • Honduras+504
      • Hong Kong (香港)+852
      • Hungary (Magyarország)+36
      • Iceland (Ísland)+354
      • India (भारत)+91
      • Indonesia+62
      • Iran (‫ایران‬‎)+98
      • Iraq (‫العراق‬‎)+964
      • Ireland+353
      • Isle of Man+44
      • Israel (‫ישראל‬‎)+972
      • Italy (Italia)+39
      • Jamaica+1
      • Japan (日本)+81
      • Jersey+44
      • Jordan (‫الأردن‬‎)+962
      • Kazakhstan (Казахстан)+7
      • Kenya+254
      • Kiribati+686
      • Kosovo+383
      • Kuwait (‫الكويت‬‎)+965
      • Kyrgyzstan (Кыргызстан)+996
      • Laos (ລາວ)+856
      • Latvia (Latvija)+371
      • Lebanon (‫لبنان‬‎)+961
      • Lesotho+266
      • Liberia+231
      • Libya (‫ليبيا‬‎)+218
      • Liechtenstein+423
      • Lithuania (Lietuva)+370
      • Luxembourg+352
      • Macau (澳門)+853
      • Macedonia (FYROM) (Македонија)+389
      • Madagascar (Madagasikara)+261
      • Malawi+265
      • Malaysia+60
      • Maldives+960
      • Mali+223
      • Malta+356
      • Marshall Islands+692
      • Martinique+596
      • Mauritania (‫موريتانيا‬‎)+222
      • Mauritius (Moris)+230
      • Mayotte+262
      • Mexico (México)+52
      • Micronesia+691
      • Moldova (Republica Moldova)+373
      • Monaco+377
      • Mongolia (Монгол)+976
      • Montenegro (Crna Gora)+382
      • Montserrat+1664
      • Morocco (‫المغرب‬‎)+212
      • Mozambique (Moçambique)+258
      • Myanmar (Burma) (မြန်မာ)+95
      • Namibia (Namibië)+264
      • Nauru+674
      • Nepal (नेपाल)+977
      • Netherlands (Nederland)+31
      • New Caledonia (Nouvelle-Calédonie)+687
      • New Zealand+64
      • Nicaragua+505
      • Niger (Nijar)+227
      • Nigeria+234
      • Niue+683
      • Norfolk Island+672
      • North Korea (조선 민주주의 인민 공화국)+850
      • Northern Mariana Islands+1670
      • Norway (Norge)+47
      • Oman (‫عُمان‬‎)+968
      • Pakistan (‫پاکستان‬‎)+92
      • Palau+680
      • Palestine (‫فلسطين‬‎)+970
      • Panama (Panamá)+507
      • Papua New Guinea+675
      • Paraguay+595
      • Peru (Perú)+51
      • Philippines+63
      • Poland (Polska)+48
      • Portugal+351
      • Puerto Rico+1
      • Qatar (‫قطر‬‎)+974
      • Réunion (La Réunion)+262
      • Romania (România)+40
      • Russia (Россия)+7
      • Rwanda+250
      • Saint Barthélemy+590
      • Saint Helena+290
      • Saint Kitts and Nevis+1869
      • Saint Lucia+1758
      • Saint Martin (Saint-Martin (partie française))+590
      • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
      • Saint Vincent and the Grenadines+1784
      • Samoa+685
      • San Marino+378
      • São Tomé and Príncipe (São Tomé e Príncipe)+239
      • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
      • Senegal (Sénégal)+221
      • Serbia (Србија)+381
      • Seychelles+248
      • Sierra Leone+232
      • Singapore+65
      • Sint Maarten+1721
      • Slovakia (Slovensko)+421
      • Slovenia (Slovenija)+386
      • Solomon Islands+677
      • Somalia (Soomaaliya)+252
      • South Africa+27
      • South Korea (대한민국)+82
      • South Sudan (‫جنوب السودان‬‎)+211
      • Spain (España)+34
      • Sri Lanka (ශ්‍රී ලංකාව)+94
      • Sudan (‫السودان‬‎)+249
      • Suriname+597
      • Svalbard and Jan Mayen+47
      • Swaziland+268
      • Sweden (Sverige)+46
      • Switzerland (Schweiz)+41
      • Syria (‫سوريا‬‎)+963
      • Taiwan (台灣)+886
      • Tajikistan+992
      • Tanzania+255
      • Thailand (ไทย)+66
      • Timor-Leste+670
      • Togo+228
      • Tokelau+690
      • Tonga+676
      • Trinidad and Tobago+1868
      • Tunisia (‫تونس‬‎)+216
      • Turkey (Türkiye)+90
      • Turkmenistan+993
      • Turks and Caicos Islands+1649
      • Tuvalu+688
      • U.S. Virgin Islands+1340
      • Uganda+256
      • Ukraine (Україна)+380
      • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
      • United Kingdom+44
      • United States+1
      • Uruguay+598
      • Uzbekistan (Oʻzbekiston)+998
      • Vanuatu+678
      • Vatican City (Città del Vaticano)+39
      • Venezuela+58
      • Vietnam (Việt Nam)+84
      • Wallis and Futuna (Wallis-et-Futuna)+681
      • Western Sahara (‫الصحراء الغربية‬‎)+212
      • Yemen (‫اليمن‬‎)+967
      • Zambia+260
      • Zimbabwe+263
      • Åland Islands+358

        +1
        • United States+1
        • United Kingdom+44
        • Afghanistan (‫افغانستان‬‎)+93
        • Albania (Shqipëri)+355
        • Algeria (‫الجزائر‬‎)+213
        • American Samoa+1684
        • Andorra+376
        • Angola+244
        • Anguilla+1264
        • Antigua and Barbuda+1268
        • Argentina+54
        • Armenia (Հայաստան)+374
        • Aruba+297
        • Australia+61
        • Austria (Österreich)+43
        • Azerbaijan (Azərbaycan)+994
        • Bahamas+1242
        • Bahrain (‫البحرين‬‎)+973
        • Bangladesh (বাংলাদেশ)+880
        • Barbados+1246
        • Belarus (Беларусь)+375
        • Belgium (België)+32
        • Belize+501
        • Benin (Bénin)+229
        • Bermuda+1441
        • Bhutan (འབྲུག)+975
        • Bolivia+591
        • Bosnia and Herzegovina (Босна и Херцеговина)+387
        • Botswana+267
        • Brazil (Brasil)+55
        • British Indian Ocean Territory+246
        • British Virgin Islands+1284
        • Brunei+673
        • Bulgaria (България)+359
        • Burkina Faso+226
        • Burundi (Uburundi)+257
        • Cambodia (កម្ពុជា)+855
        • Cameroon (Cameroun)+237
        • Canada+1
        • Cape Verde (Kabu Verdi)+238
        • Caribbean Netherlands+599
        • Cayman Islands+1345
        • Central African Republic (République centrafricaine)+236
        • Chad (Tchad)+235
        • Chile+56
        • China (中国)+86
        • Christmas Island+61
        • Cocos (Keeling) Islands+61
        • Colombia+57
        • Comoros (‫جزر القمر‬‎)+269
        • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
        • Congo (Republic) (Congo-Brazzaville)+242
        • Cook Islands+682
        • Costa Rica+506
        • Côte d’Ivoire+225
        • Croatia (Hrvatska)+385
        • Cuba+53
        • Curaçao+599
        • Cyprus (Κύπρος)+357
        • Czech Republic (Česká republika)+420
        • Denmark (Danmark)+45
        • Djibouti+253
        • Dominica+1767
        • Dominican Republic (República Dominicana)+1
        • Ecuador+593
        • Egypt (‫مصر‬‎)+20
        • El Salvador+503
        • Equatorial Guinea (Guinea Ecuatorial)+240
        • Eritrea+291
        • Estonia (Eesti)+372
        • Ethiopia+251
        • Falkland Islands (Islas Malvinas)+500
        • Faroe Islands (Føroyar)+298
        • Fiji+679
        • Finland (Suomi)+358
        • France+33
        • French Guiana (Guyane française)+594
        • French Polynesia (Polynésie française)+689
        • Gabon+241
        • Gambia+220
        • Georgia (საქართველო)+995
        • Germany (Deutschland)+49
        • Ghana (Gaana)+233
        • Gibraltar+350
        • Greece (Ελλάδα)+30
        • Greenland (Kalaallit Nunaat)+299
        • Grenada+1473
        • Guadeloupe+590
        • Guam+1671
        • Guatemala+502
        • Guernsey+44
        • Guinea (Guinée)+224
        • Guinea-Bissau (Guiné Bissau)+245
        • Guyana+592
        • Haiti+509
        • Honduras+504
        • Hong Kong (香港)+852
        • Hungary (Magyarország)+36
        • Iceland (Ísland)+354
        • India (भारत)+91
        • Indonesia+62
        • Iran (‫ایران‬‎)+98
        • Iraq (‫العراق‬‎)+964
        • Ireland+353
        • Isle of Man+44
        • Israel (‫ישראל‬‎)+972
        • Italy (Italia)+39
        • Jamaica+1
        • Japan (日本)+81
        • Jersey+44
        • Jordan (‫الأردن‬‎)+962
        • Kazakhstan (Казахстан)+7
        • Kenya+254
        • Kiribati+686
        • Kosovo+383
        • Kuwait (‫الكويت‬‎)+965
        • Kyrgyzstan (Кыргызстан)+996
        • Laos (ລາວ)+856
        • Latvia (Latvija)+371
        • Lebanon (‫لبنان‬‎)+961
        • Lesotho+266
        • Liberia+231
        • Libya (‫ليبيا‬‎)+218
        • Liechtenstein+423
        • Lithuania (Lietuva)+370
        • Luxembourg+352
        • Macau (澳門)+853
        • Macedonia (FYROM) (Македонија)+389
        • Madagascar (Madagasikara)+261
        • Malawi+265
        • Malaysia+60
        • Maldives+960
        • Mali+223
        • Malta+356
        • Marshall Islands+692
        • Martinique+596
        • Mauritania (‫موريتانيا‬‎)+222
        • Mauritius (Moris)+230
        • Mayotte+262
        • Mexico (México)+52
        • Micronesia+691
        • Moldova (Republica Moldova)+373
        • Monaco+377
        • Mongolia (Монгол)+976
        • Montenegro (Crna Gora)+382
        • Montserrat+1664
        • Morocco (‫المغرب‬‎)+212
        • Mozambique (Moçambique)+258
        • Myanmar (Burma) (မြန်မာ)+95
        • Namibia (Namibië)+264
        • Nauru+674
        • Nepal (नेपाल)+977
        • Netherlands (Nederland)+31
        • New Caledonia (Nouvelle-Calédonie)+687
        • New Zealand+64
        • Nicaragua+505
        • Niger (Nijar)+227
        • Nigeria+234
        • Niue+683
        • Norfolk Island+672
        • North Korea (조선 민주주의 인민 공화국)+850
        • Northern Mariana Islands+1670
        • Norway (Norge)+47
        • Oman (‫عُمان‬‎)+968
        • Pakistan (‫پاکستان‬‎)+92
        • Palau+680
        • Palestine (‫فلسطين‬‎)+970
        • Panama (Panamá)+507
        • Papua New Guinea+675
        • Paraguay+595
        • Peru (Perú)+51
        • Philippines+63
        • Poland (Polska)+48
        • Portugal+351
        • Puerto Rico+1
        • Qatar (‫قطر‬‎)+974
        • Réunion (La Réunion)+262
        • Romania (România)+40
        • Russia (Россия)+7
        • Rwanda+250
        • Saint Barthélemy+590
        • Saint Helena+290
        • Saint Kitts and Nevis+1869
        • Saint Lucia+1758
        • Saint Martin (Saint-Martin (partie française))+590
        • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
        • Saint Vincent and the Grenadines+1784
        • Samoa+685
        • San Marino+378
        • São Tomé and Príncipe (São Tomé e Príncipe)+239
        • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
        • Senegal (Sénégal)+221
        • Serbia (Србија)+381
        • Seychelles+248
        • Sierra Leone+232
        • Singapore+65
        • Sint Maarten+1721
        • Slovakia (Slovensko)+421
        • Slovenia (Slovenija)+386
        • Solomon Islands+677
        • Somalia (Soomaaliya)+252
        • South Africa+27
        • South Korea (대한민국)+82
        • South Sudan (‫جنوب السودان‬‎)+211
        • Spain (España)+34
        • Sri Lanka (ශ්‍රී ලංකාව)+94
        • Sudan (‫السودان‬‎)+249
        • Suriname+597
        • Svalbard and Jan Mayen+47
        • Swaziland+268
        • Sweden (Sverige)+46
        • Switzerland (Schweiz)+41
        • Syria (‫سوريا‬‎)+963
        • Taiwan (台灣)+886
        • Tajikistan+992
        • Tanzania+255
        • Thailand (ไทย)+66
        • Timor-Leste+670
        • Togo+228
        • Tokelau+690
        • Tonga+676
        • Trinidad and Tobago+1868
        • Tunisia (‫تونس‬‎)+216
        • Turkey (Türkiye)+90
        • Turkmenistan+993
        • Turks and Caicos Islands+1649
        • Tuvalu+688
        • U.S. Virgin Islands+1340
        • Uganda+256
        • Ukraine (Україна)+380
        • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
        • United Kingdom+44
        • United States+1
        • Uruguay+598
        • Uzbekistan (Oʻzbekiston)+998
        • Vanuatu+678
        • Vatican City (Città del Vaticano)+39
        • Venezuela+58
        • Vietnam (Việt Nam)+84
        • Wallis and Futuna (Wallis-et-Futuna)+681
        • Western Sahara (‫الصحراء الغربية‬‎)+212
        • Yemen (‫اليمن‬‎)+967
        • Zambia+260
        • Zimbabwe+263
        • Åland Islands+358

          +1
          • United States+1
          • United Kingdom+44
          • Afghanistan (‫افغانستان‬‎)+93
          • Albania (Shqipëri)+355
          • Algeria (‫الجزائر‬‎)+213
          • American Samoa+1684
          • Andorra+376
          • Angola+244
          • Anguilla+1264
          • Antigua and Barbuda+1268
          • Argentina+54
          • Armenia (Հայաստան)+374
          • Aruba+297
          • Australia+61
          • Austria (Österreich)+43
          • Azerbaijan (Azərbaycan)+994
          • Bahamas+1242
          • Bahrain (‫البحرين‬‎)+973
          • Bangladesh (বাংলাদেশ)+880
          • Barbados+1246
          • Belarus (Беларусь)+375
          • Belgium (België)+32
          • Belize+501
          • Benin (Bénin)+229
          • Bermuda+1441
          • Bhutan (འབྲུག)+975
          • Bolivia+591
          • Bosnia and Herzegovina (Босна и Херцеговина)+387
          • Botswana+267
          • Brazil (Brasil)+55
          • British Indian Ocean Territory+246
          • British Virgin Islands+1284
          • Brunei+673
          • Bulgaria (България)+359
          • Burkina Faso+226
          • Burundi (Uburundi)+257
          • Cambodia (កម្ពុជា)+855
          • Cameroon (Cameroun)+237
          • Canada+1
          • Cape Verde (Kabu Verdi)+238
          • Caribbean Netherlands+599
          • Cayman Islands+1345
          • Central African Republic (République centrafricaine)+236
          • Chad (Tchad)+235
          • Chile+56
          • China (中国)+86
          • Christmas Island+61
          • Cocos (Keeling) Islands+61
          • Colombia+57
          • Comoros (‫جزر القمر‬‎)+269
          • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
          • Congo (Republic) (Congo-Brazzaville)+242
          • Cook Islands+682
          • Costa Rica+506
          • Côte d’Ivoire+225
          • Croatia (Hrvatska)+385
          • Cuba+53
          • Curaçao+599
          • Cyprus (Κύπρος)+357
          • Czech Republic (Česká republika)+420
          • Denmark (Danmark)+45
          • Djibouti+253
          • Dominica+1767
          • Dominican Republic (República Dominicana)+1
          • Ecuador+593
          • Egypt (‫مصر‬‎)+20
          • El Salvador+503
          • Equatorial Guinea (Guinea Ecuatorial)+240
          • Eritrea+291
          • Estonia (Eesti)+372
          • Ethiopia+251
          • Falkland Islands (Islas Malvinas)+500
          • Faroe Islands (Føroyar)+298
          • Fiji+679
          • Finland (Suomi)+358
          • France+33
          • French Guiana (Guyane française)+594
          • French Polynesia (Polynésie française)+689
          • Gabon+241
          • Gambia+220
          • Georgia (საქართველო)+995
          • Germany (Deutschland)+49
          • Ghana (Gaana)+233
          • Gibraltar+350
          • Greece (Ελλάδα)+30
          • Greenland (Kalaallit Nunaat)+299
          • Grenada+1473
          • Guadeloupe+590
          • Guam+1671
          • Guatemala+502
          • Guernsey+44
          • Guinea (Guinée)+224
          • Guinea-Bissau (Guiné Bissau)+245
          • Guyana+592
          • Haiti+509
          • Honduras+504
          • Hong Kong (香港)+852
          • Hungary (Magyarország)+36
          • Iceland (Ísland)+354
          • India (भारत)+91
          • Indonesia+62
          • Iran (‫ایران‬‎)+98
          • Iraq (‫العراق‬‎)+964
          • Ireland+353
          • Isle of Man+44
          • Israel (‫ישראל‬‎)+972
          • Italy (Italia)+39
          • Jamaica+1
          • Japan (日本)+81
          • Jersey+44
          • Jordan (‫الأردن‬‎)+962
          • Kazakhstan (Казахстан)+7
          • Kenya+254
          • Kiribati+686
          • Kosovo+383
          • Kuwait (‫الكويت‬‎)+965
          • Kyrgyzstan (Кыргызстан)+996
          • Laos (ລາວ)+856
          • Latvia (Latvija)+371
          • Lebanon (‫لبنان‬‎)+961
          • Lesotho+266
          • Liberia+231
          • Libya (‫ليبيا‬‎)+218
          • Liechtenstein+423
          • Lithuania (Lietuva)+370
          • Luxembourg+352
          • Macau (澳門)+853
          • Macedonia (FYROM) (Македонија)+389
          • Madagascar (Madagasikara)+261
          • Malawi+265
          • Malaysia+60
          • Maldives+960
          • Mali+223
          • Malta+356
          • Marshall Islands+692
          • Martinique+596
          • Mauritania (‫موريتانيا‬‎)+222
          • Mauritius (Moris)+230
          • Mayotte+262
          • Mexico (México)+52
          • Micronesia+691
          • Moldova (Republica Moldova)+373
          • Monaco+377
          • Mongolia (Монгол)+976
          • Montenegro (Crna Gora)+382
          • Montserrat+1664
          • Morocco (‫المغرب‬‎)+212
          • Mozambique (Moçambique)+258
          • Myanmar (Burma) (မြန်မာ)+95
          • Namibia (Namibië)+264
          • Nauru+674
          • Nepal (नेपाल)+977
          • Netherlands (Nederland)+31
          • New Caledonia (Nouvelle-Calédonie)+687
          • New Zealand+64
          • Nicaragua+505
          • Niger (Nijar)+227
          • Nigeria+234
          • Niue+683
          • Norfolk Island+672
          • North Korea (조선 민주주의 인민 공화국)+850
          • Northern Mariana Islands+1670
          • Norway (Norge)+47
          • Oman (‫عُمان‬‎)+968
          • Pakistan (‫پاکستان‬‎)+92
          • Palau+680
          • Palestine (‫فلسطين‬‎)+970
          • Panama (Panamá)+507
          • Papua New Guinea+675
          • Paraguay+595
          • Peru (Perú)+51
          • Philippines+63
          • Poland (Polska)+48
          • Portugal+351
          • Puerto Rico+1
          • Qatar (‫قطر‬‎)+974
          • Réunion (La Réunion)+262
          • Romania (România)+40
          • Russia (Россия)+7
          • Rwanda+250
          • Saint Barthélemy+590
          • Saint Helena+290
          • Saint Kitts and Nevis+1869
          • Saint Lucia+1758
          • Saint Martin (Saint-Martin (partie française))+590
          • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
          • Saint Vincent and the Grenadines+1784
          • Samoa+685
          • San Marino+378
          • São Tomé and Príncipe (São Tomé e Príncipe)+239
          • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
          • Senegal (Sénégal)+221
          • Serbia (Србија)+381
          • Seychelles+248
          • Sierra Leone+232
          • Singapore+65
          • Sint Maarten+1721
          • Slovakia (Slovensko)+421
          • Slovenia (Slovenija)+386
          • Solomon Islands+677
          • Somalia (Soomaaliya)+252
          • South Africa+27
          • South Korea (대한민국)+82
          • South Sudan (‫جنوب السودان‬‎)+211
          • Spain (España)+34
          • Sri Lanka (ශ්‍රී ලංකාව)+94
          • Sudan (‫السودان‬‎)+249
          • Suriname+597
          • Svalbard and Jan Mayen+47
          • Swaziland+268
          • Sweden (Sverige)+46
          • Switzerland (Schweiz)+41
          • Syria (‫سوريا‬‎)+963
          • Taiwan (台灣)+886
          • Tajikistan+992
          • Tanzania+255
          • Thailand (ไทย)+66
          • Timor-Leste+670
          • Togo+228
          • Tokelau+690
          • Tonga+676
          • Trinidad and Tobago+1868
          • Tunisia (‫تونس‬‎)+216
          • Turkey (Türkiye)+90
          • Turkmenistan+993
          • Turks and Caicos Islands+1649
          • Tuvalu+688
          • U.S. Virgin Islands+1340
          • Uganda+256
          • Ukraine (Україна)+380
          • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
          • United Kingdom+44
          • United States+1
          • Uruguay+598
          • Uzbekistan (Oʻzbekiston)+998
          • Vanuatu+678
          • Vatican City (Città del Vaticano)+39
          • Venezuela+58
          • Vietnam (Việt Nam)+84
          • Wallis and Futuna (Wallis-et-Futuna)+681
          • Western Sahara (‫الصحراء الغربية‬‎)+212
          • Yemen (‫اليمن‬‎)+967
          • Zambia+260
          • Zimbabwe+263
          • Åland Islands+358

          Success!!

          Keep an eye on your inbox for the PDF, it's on its way!

          If you don't see it in your inbox, don't forget to give your junk folder a quick peek. Just in case.









              You have successfully subscribed to the newsletter

              There was an error while trying to send your request. Please try again.

              Zehntech will use the information you provide on this form to be in touch with you and to provide updates and marketing.
              Read