Image Captioning API

Get a full sentence describing an image.


Introduction

The SmartLens Image Captioning API will generate a description of your image that considers the context of the scene and the relationships between the items present. The API accepts an HTTP POST request with a JSON body as its input and returns a list of captions along with their associated confidence scores.

API response example

{
  "predictions": [
    {
      "captions": [
         "puppy sitting in the grass.",
         "puppy sitting on the grass.",
         "puppy sitting in a meadow.",
         "puppy sitting in a garden.",
         "puppy sitting in the grass."
       ],
      "scores": [
         0.0009016668598647553,
         0.000585575973913304,
         0.00022131603654245726,
         0.0002139988001856637,
         0.00007208434278737979
      ]
    }
  ]
}

Making requests

The SmartLens Image Captioning API accepts JPEGand PNG files as inputs, either as a file encoded in base64 or as a URL. Like our other APIs, SmartLens Image Captioning accepts one input per request. To caption multiple images, you'll need to make multiple requests. To call the API, make a HTTP POST request with your API key submitted in the Authorization header. Send your image input using the image parameter in the request body. If you are captioning an image from a URL, your request body will like like:

Request body example

{
  "image": "https://smartlens.ai/media-cdn/retriever_puppy.jpg"
}

If you are captioning an image encoded as base64, your requst body will look like:

Request body example

{
  "image":     "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"
}

Putting the request body and authorization header together, below is a complete HTTP request. As the server expects a standard JSON payload, we must add backslash escape characters around all quotation marks inside the request body.

cURL

curl -X POST "https://api.smartlens.ai/v1/models/caption/predict" \
     -H "accept: application/json" \
     -H "Authorization: MY-API-KEY" \
     -H "Content-Type: application/json" \
     -d "{ \"image\": \"MY-IMAGE\"}"

Using a client library

While you can always call our REST API directly, we've built client libraries to make it even easier to integrate SmartLens into your app. Our Python client library is now available, with many more coming soon.

With the SmartLens Python libary -- unlike calling the SmartLens API with cURL -- you also have the option of specifying a path to your file. Otherwise, supply the image payload exactly like you would for a direct HTTP request to the API. See the Making requests section for URL and base64 examples.

Python

import smartlens
smartlens.api_key = "MY_API_KEY"

response = smartlens.runCaptions(
   image = "MY-IMAGE"
)

API playground

We've built an API playground to make it even easier to explore our APIs. Check it out at https://api.smartlens.ai, which is also the base URL for the SmartLens API.


Questions & feedback

Please refer to the sidebar menu for API-specific quickstarts and detailed schema information. If you have any questions or feedback, please reach out to us at [email protected].