Imagga Auto Tagging

Cloudinary is a cloud-based service that provides an end-to-end asset management solution including uploads, storage, transformations, optimizations and delivery. Cloudinary offers a very rich set of image transformation and analysis capabilities and allows you to extract the semantic data from uploaded images: photo metadata (Exif & IPTC) including location and camera details, coordinates of automatically detected faces, color histogram and predominant colors. In addition, Cloudinary allows you to assign multiple tags to images for listing and managing your media library.

Imagga develops and offers technologies, services, and online tools for visual image recognition. Cloudinary provides an add-on for Imagga's automatic image tagging capabilities, fully integrated into Cloudinary's image management and transformation pipeline. Imagga analyses image data and automatically identifies scenes and suggests tags, a process that would take huge amounts of time and resources if performed manually. Imagga's technology includes state-of-the-art machine learning approaches that allow it to be trained in the recognition of various visual objects and concepts. Combined with big manually created data sets containing the visual characteristics of images and their associated tags, results in outstanding performance in terms of the time needed to process large photo volumes with a very high precision rate.

With the Imagga auto tagging add-on, you can extend Cloudinary's powerful semantic data extraction and image tagging features. When using the Imagga auto tagging add-on, your images are automatically tagged according to the categories detected in each image.

Getting started

Before you can use the Imagga Auto Tagging add-on:

  • You must have a Cloudinary account. If you don't already have one, you can sign up for a free account.

  • Register for the add-on: make sure you're logged in to your account and then go to the Add-ons page. For more information about add-on registrations, see Registering for add-ons.

  • Keep in mind that many of the examples on this page use our SDKs. For SDK installation and configuration details, see the relevant SDK guide.

  • If you are new to Cloudinary, you may want to take a look at How to integrate Cloudinary in your app for a walk through on the basics of creating and setting up your account, working with SDKs, and then uploading, transforming and delivering assets.

Image recognition and categorization

Take a look at the following photo, depicting some turtles:

Ruby:
Copy to clipboard
cl_image_tag("turtles.jpg")
PHP (cloudinary_php v1.x (legacy)):
Copy to clipboard
cl_image_tag("turtles.jpg")
PHP (cloudinary_php v2.x):
Copy to clipboard
(new ImageTag('turtles.jpg'));
Python:
Copy to clipboard
CloudinaryImage("turtles.jpg").image()
Node.js:
Copy to clipboard
cloudinary.image("turtles.jpg")
Java:
Copy to clipboard
cloudinary.url().transformation(new Transformation().imageTag("turtles.jpg");
JS:
Copy to clipboard
cloudinary.imageTag('turtles.jpg').toHtml();
jQuery:
Copy to clipboard
$.cloudinary.image("turtles.jpg")
React:
Copy to clipboard
<Image publicId="turtles.jpg" >

</Image>
Vue.js:
Copy to clipboard
<cld-image public-id="turtles.jpg" >

</cld-image>
Angular:
Copy to clipboard
<cl-image public-id="turtles.jpg" >

</cl-image>
.NET:
Copy to clipboard
cloudinary.Api.UrlImgUp.BuildImageTag("turtles.jpg")
iOS:
Copy to clipboard
imageView.cldSetImage(cloudinary.createUrl().generate("turtles.jpg")!, cloudinary: cloudinary)
Android:
Copy to clipboard
MediaManager.get().url().transformation(new Transformation().generate("turtles.jpg");
Kotlin:
Copy to clipboard
cloudinary.image {
publicId("turtles.jpg")
}.generate()
turtles.jpg

By setting the categorization parameter to imagga_tagging when calling Cloudinary's upload or update methods, Imagga is used to automatically classify the scenes of the uploaded or specified existing image. For example:

Ruby:
Copy to clipboard
Cloudinary::Uploader.upload("turtles.jpg", 
  :categorization => "imagga_tagging")
PHP (cloudinary_php v1.x (legacy)):
Copy to clipboard
\Cloudinary\Uploader::upload("turtles.jpg", 
  ["categorization" => "imagga_tagging"]);
PHP (cloudinary_php v2.x):
Copy to clipboard
$cloudinary->uploadApi()->upload("turtles.jpg", 
  ["categorization" => "imagga_tagging"]);
Python:
Copy to clipboard
cloudinary.uploader.upload("turtles.jpg",
  categorization = "imagga_tagging")
Node.js:
Copy to clipboard
cloudinary.v2.uploader.upload("turtles.jpg", 
  { categorization: "imagga_tagging" },
  function(error, result) {console.log(result, error) });
Java:
Copy to clipboard
cloudinary.uploader().upload("turtles.jpg", ObjectUtils.asMap(
  "categorization", "imagga_tagging"));
.NET:
Copy to clipboard
var uploadParams = new ImageUploadParams() 
{
  File = new FileDescription(@"turtles.jpg"),
  Categorization = "imagga_tagging"
};
var uploadResult = cloudinary.Upload(uploadParams);
iOS:
Copy to clipboard
let params = CLDUploadRequestParams()
  .setCategorization("imagga_tagging")
var mySig = MyFunction(params)  // your own function that returns a signature generated on your backend
params.setSignature(CLDSignature(signature: mySig.signature, timestamp: mySig.timestamp))
let request = cloudinary.createUploader().signedUpload(
  url: "turtles.jpg", params: params)
Android:
Copy to clipboard
MediaManager.get().upload("turtles.jpg")
  .option("categorization", "imagga_tagging").dispatch();
cURL:
Copy to clipboard
curl https://api.cloudinary.com/v1_1/demo/image/upload -X POST --data 'file=turtles.jpg&categorization=imagga_tagging&timestamp=173719931&api_key=436464676&signature=a781d61f86a6f818af'
CLI:
Copy to clipboard
cld uploader upload "turtles.jpg" categorization="imagga_tagging"

The upload API response includes the automatic categorization identified by the Imagga auto tagging add-on. As can be seen in the response snippet below, various categories were automatically detected in the uploaded photo. The confidence score is a numerical value that represents the confidence level of the detected category, where 1.0 means 100% confidence.

Copy to clipboard
{
...
"info": {
    "categorization": {
      "imagga_tagging": {
        "status": "complete",
        "data": [
          {  "tag": "sea turtle",  "confidence": 1.0 },
          {  "tag": "loggerhead",  "confidence": 1.0 },
          {  "tag": "turtle",  "confidence": 0.8903 },
          {  "tag": "crab",  "confidence": 0.3089  },
          {  "tag": "king crab", "confidence": 0.2722 },
          {  "tag": "crustacean", "confidence": 0.1587 },
          {  "tag": "dungeness crab", "confidence": 0.1102 },
          {  "tag": "sea", "confidence": 0.1049 },
          {  "tag": "water", "confidence": 0.0986 },
          {  "tag": "ocean", "confidence": 0.0849 },
          {  "tag": "arthropod", "confidence": 0.0764 },
          {  "tag": "fish", "confidence": 0.0755 }]}}}

Tips

  • You can use upload presets to centrally define a set of upload options including add-on operations to apply, instead of specifying them in each upload call. You can define multiple upload presets, and apply different presets in different upload scenarios. You can create new upload presets in the Upload page of the Management Console settings or using the upload_presets Admin API method. From the Upload page of the console settings, you can also select default upload presets to use for image, video, and raw API uploads (respectively) as well as default presets for image, video, and raw uploads performed via the Media Library UI.

    Learn more: Upload presets

  • You can run multiple categorization add-ons on the resource. The categorization parameter accepts a comma-separated list of all the Cloudinary categorization add-ons to run on the resource.

Adding resource tags to images

Automatically categorizing your images is a useful way to organize your Cloudinary media library, and by also providing the auto_tagging parameter to an upload or update call, images are automatically assigned resource tags based on the detected scene categories. The value of the auto_tagging parameter is the minimum confidence score of a detected category that should be automatically used as an assigned resource tag. Assigning these resource tags allows you to list and search images in your media library using Cloudinary's API and Web interface.

The following code example automatically uploads and tags an image with all detected categories that have a score higher than 0.4.

Ruby:
Copy to clipboard
Cloudinary::Uploader.upload("turtles.jpg", 
  :categorization => "imagga_tagging", 
  :auto_tagging => 0.4)
PHP (cloudinary_php v1.x (legacy)):
Copy to clipboard
\Cloudinary\Uploader::upload("turtles.jpg", [
    "categorization" => "imagga_tagging", 
    "auto_tagging" => 0.4]);
PHP (cloudinary_php v2.x):
Copy to clipboard
$cloudinary->uploadApi()->upload("turtles.jpg", [
    "categorization" => "imagga_tagging", 
    "auto_tagging" => 0.4]);
Python:
Copy to clipboard
cloudinary.uploader.upload("turtles.jpg",
  categorization = "imagga_tagging", 
  auto_tagging = 0.4)
Node.js:
Copy to clipboard
cloudinary.v2.uploader.upload("turtles.jpg", 
  { categorization: "imagga_tagging", 
    auto_tagging: 0.4 },
  function(error, result) {console.log(result, error) });
Java:
Copy to clipboard
cloudinary.uploader().upload("turtles.jpg", 
  ObjectUtils.asMap(
    "categorization", "imagga_tagging", 
    "auto_tagging", "0.4"));
.NET:
Copy to clipboard
var uploadParams = new ImageUploadParams() 
{
  File = new FileDescription(@"turtles.jpg"),
  Categorization = "imagga_tagging",
  AutoTagging = 0.4
};
var uploadResult = cloudinary.Upload(uploadParams);
iOS:
Copy to clipboard
let params = CLDUploadRequestParams()
  .setCategorization("imagga_tagging")
  .setAutoTagging(0.4)
var mySig = MyFunction(params)  // your own function that returns a signature generated on your backend
params.setSignature(CLDSignature(signature: mySig.signature, timestamp: mySig.timestamp))
let request = cloudinary.createUploader().signedUpload(
  url: "turtles.jpg", params: params)
Android:
Copy to clipboard
MediaManager.get().upload("turtles.jpg")
  .option("categorization", "imagga_tagging")
  .option("auto_tagging", "0.4").dispatch();
cURL:
Copy to clipboard
curl https://api.cloudinary.com/v1_1/demo/image/upload -X POST --data 'file=turtles.jpg&categorization=imagga_tagging&auto_tagging=0.4&timestamp=173719931&api_key=436464676&signature=a781d61f86a6f818af'
CLI:
Copy to clipboard
cld uploader upload "turtles.jpg" categorization="imagga_tagging" auto_tagging=0.4

The response of the upload API call above returns the detected categories as well as the assigned tags. In this case, only the 'sea turtle', 'loggerhead' and 'turtle' categories have a high enough score to be used as tags.

Copy to clipboard
{ 
  ...    
  "tags": [ "sea turtle", "loggerhead", "turtle" ]   
  ...

You can also use the update method to apply Imagga auto tagging to already uploaded images, based on their public IDs, and then automatically tag them according to the detected categories.

For example, the following image was uploaded to Cloudinary with the 'sample' public ID.

Ruby:
Copy to clipboard
cl_image_tag("sample.jpg")
PHP (cloudinary_php v1.x (legacy)):
Copy to clipboard
cl_image_tag("sample.jpg")
PHP (cloudinary_php v2.x):
Copy to clipboard
(new ImageTag('sample.jpg'));
Python:
Copy to clipboard
CloudinaryImage("sample.jpg").image()
Node.js:
Copy to clipboard
cloudinary.image("sample.jpg")
Java:
Copy to clipboard
cloudinary.url().transformation(new Transformation().imageTag("sample.jpg");
JS:
Copy to clipboard
cloudinary.imageTag('sample.jpg').toHtml();
jQuery:
Copy to clipboard
$.cloudinary.image("sample.jpg")
React:
Copy to clipboard
<Image publicId="sample.jpg" >

</Image>
Vue.js:
Copy to clipboard
<cld-image public-id="sample.jpg" >

</cld-image>
Angular:
Copy to clipboard
<cl-image public-id="sample.jpg" >

</cl-image>
.NET:
Copy to clipboard
cloudinary.Api.UrlImgUp.BuildImageTag("sample.jpg")
iOS:
Copy to clipboard
imageView.cldSetImage(cloudinary.createUrl().generate("sample.jpg")!, cloudinary: cloudinary)
Android:
Copy to clipboard
MediaManager.get().url().transformation(new Transformation().generate("sample.jpg");
Kotlin:
Copy to clipboard
cloudinary.image {
publicId("sample.jpg")
}.generate()
sample.jpg

The following code sample uses Cloudinary's update method to apply Imagga's automatic image tagging and categorization to the sample uploaded image, and then automatically assign resource tags based on the categories detected with over a 50% confidence level.

Ruby:
Copy to clipboard
Cloudinary::Api.update("sample", 
  :categorization => "imagga_tagging", 
  :auto_tagging => 0.5)
PHP:
Copy to clipboard
\Cloudinary\Api::update("sample", [
    "categorization" => "imagga_tagging", 
    "auto_tagging" => 0.5]);
Python:
Copy to clipboard
cloudinary.api.update("sample",
  categorization = "imagga_tagging", 
  auto_tagging = 0.5)
Node.js:
Copy to clipboard
cloudinary.v2.api.update("sample", 
  { categorization: "imagga_tagging", 
    auto_tagging: 0.5 },
  function(error, result) {console.log(result, error) });
Java:
Copy to clipboard
cloudinary.api().update("sample", 
  ObjectUtils.asMap(
    "categorization", "imagga_tagging", 
    "auto_tagging", 0.5));
.NET:
Copy to clipboard
var updateParams = new UpdateParams("sample") 
{
  Categorization = "imagga_tagging",
  AutoTagging = 0.5
};
var updateResult = cloudinary.Update(updateParams);
CLI:
Copy to clipboard
cld admin update "sample" categorization="imagga_tagging" auto_tagging=0.5

The response of the update API call includes the detected categories, and automatically assigned tags. As you can see in the response snippet below, the 'pink' and 'flower' scene categories were detected with a confidence score of over 50%, which led to them being auto-assigned as tags.

Copy to clipboard
{
  ...
  "tags": [ "pink", "flower" ]
  "info": {
    "categorization": {
      "imagga_tagging": {
        "status": "complete",
        "data": [
          { "tag": "pink", "confidence": 0.822 },
          { "tag": "flower", "confidence": 0.6306 },
          { "tag": "flowers", "confidence": 0.3778 },
          { "tag": "plant", "confidence": 0.3667
         ...

}

You can use the Admin API's resource method to return the details of a resource, including the scene categories that you already extracted using the upload or update methods.

Ruby:
Copy to clipboard
Cloudinary::Api.resource("sample")
PHP (cloudinary_php v1.x (legacy)):
Copy to clipboard
\Cloudinary\Api::resource("sample");
PHP (cloudinary_php v2.x):
Copy to clipboard
$api->asset("sample");
Python:
Copy to clipboard
cloudinary.api.resource("sample")
Node.js:
Copy to clipboard
cloudinary.v2.api.resource("sample", 
  function(error, result) {console.log(result, error) });
Java:
Copy to clipboard
cloudinary.api().resource("sample", ObjectUtils.emptyMap());
.NET:
Copy to clipboard
var getResourceResult = cloudinary.GetResource(new GetResourceParams("sample"));
CLI:
Copy to clipboard
cld admin resource "sample"

Multi-language support

The automatic image categorization and tagging features also support multiple languages. You can get results in other languages by adding the 2-letter Language Code to the categorization parameter value of imagga_tagging, separating each additional language with a colon. For example, to get results in Finnish (fi) and Danish (da), set the value to imagga_tagging:fi:da. The full list of supported languages and their language codes can be found here.

✔️ Feedback sent!

Rate this page: