Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Image processing through API works on the principle of sending the image via HTTP request and getting a response with the result (contains Context by default, but there are also other response types available). Only one image can be sent per request.

...

Code Block
breakoutModewide
languagepy
import requests
import os

request_session = requests.Session()

for image in os.listdir('images_folder'):
    with open(os.path.join('images_folder', image), 'rb') as image:
        response = requests.post(
            url='http://127.0.0.1:8000/analyze_image?api_key=728a9180-8357-11ec-b645-e917eb5f5d27',
            data=image.read(),
            headers={'Content-Type': 'application/octet-stream'}
        )
        
        print(response.json())

last_image

Gets the last image/context that was analyzed in the given project before.

Basic example (gets just the context)

Code Block
http://127.0.0.1:8000/last_image

Python code which gets the last processed image with heatmap and shows it, then prints out the context.

Code Block
import requests
import cv2
import numpy as np
import base64
import json

port = '8000'

request_session = requests.Session()

response = requests.get(
    url=f'http://127.0.0.1:{port}/last_image?response_type=annotated_image',
    headers={'Content-Type': 'application/octet-stream'}
)

# Decode and show image with heatmap
img = cv2.imdecode(np.frombuffer(response.content, np.uint8), 1)
cv2.imshow("Image", img)
cv2.waitKey(0)

# Decode context from Base64
context_str = base64.b64decode(response.headers['ContextBase64utf'])
# Load json from string
context = json.loads(context_str)
print(context)

Response type

Query parameter ‘response_type’ determines what content will be sent in the response that is returned from PEKAT VISION after processing the request. The request url changes in the following way (example for annotated_image response type):

...

heatmap - response contains only the heat maps heatmaps over the image (without the image!)…….

For all those image response types, the serialized context is by default added to the headers with the header title 'ContextBase64utf'. To get it to json form, you can use this code:

Code Block
languagepy
import base64
import json

# Decode from Base64
context_str = base64.b64decode(response.headers['ContextBase64utf'])
# Load json from string
context = json.loads(context_str)

Context in body

When gettting an image in the response, by default the context is sent in headers. However, with a very large number of defects, the maximum header length limit can be reached. To solve this, you can use the option to send context in the body of the response together with the image and get the image length in a header 'ImageLen' to be able to divide the two parts after. To activate this mode, add the following to the request:

Code Block
context_in_body=t

Example Python code of the usage when getting last image:

Code Block
import requests
import cv2
import numpy as np
import json

port = '8000'

request_session = requests.Session()

response = requests.get(
    url=f'http://127.0.0.1:{port}/last_image?response_type=annotated_image&context_in_body=t',
    headers={'Content-Type': 'application/octet-stream'}
)

# Get image length
img_len = int(response.headers['ImageLen'])

# Decode and show image with heatmap
img = cv2.imdecode(np.frombuffer(response.content[:img_len], np.uint8), 1)
cv2.imshow("Image", img)
cv2.waitKey(0)

# Get and print context
context = json.loads(response.content[img_len:])
print(context)

Testing the API functionality

If you have a running project on a port e.g. 8000, you can test the API by accessing this address in your browser (if PEKAT is running on the local computer, otherwise replace localhost with IP address of the remote PC):

Info

http://localhost:8000/api

This displays the testing app, where you can choose to display the last processed image or send a new image to analyze. You can choose the Response type - Context, Image, Annotated image (image with a heatmap) or Heatmap. If the project has Secure image analyze enabled, you also need to enter the API key.

...

If Analyze image is chosen, you can also select the image that will be sent through the API. If response type is different than Context, the default behavior is that the image is sent in the body of the response and the context is sent in the headers - to change this and send both in the body, check the box with Context in body. The detail of the request structure will be displayed.

After you click Send, you will also see the structure of the response in the blue info box, context (as you would see it in Inspection) and optionally an image based on the response type.

...