Create a job

A JOB

POST https://api.playment.io/v1/projects/:project_id/jobs

This endpoint allows you to create a job

Path Parameters

Headers

Request Body

{
  "data": {
    "job_id": "3f3e8675-ca69-46d7-aa34-96f90fcbb732",
    "reference_id": "001",
    "work_flow_id": "2aae1234-acac-1234-eeff-12a22a237bbc"
  },
  "success": true
}

Payload

{  
   "reference_id":"001",
   "data":{
     "image_url":"https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
   },
   "work_flow_id":"2aae1234-acac-1234-eeff-12a22a237bbc"
}

Code Example

import requests
import json

"""
Details for creating JOBS,
project_id  ->> ID of project in which the job will be created
x_api_key   ->> API key for authentication 
workflow_id ->> The workflow in which the job will be created
batch_id    ->> The batch in which job will be created
"""

# Additional helper function to create a batch
def create_batch(BATCH_NAME):
    base_url = f"https://api.playment.io/v1/projects/{PROJECT_ID}/batch"
    DATA = {"name":BATCH_NAME}
    response = requests.post(base_url, headers={'x-api-key': CLIENT_KEY}, json=DATA)
    response_data = response.json()
    if response.status_code >= 500:
        raise Exception(f"Something went wrong at Playment's end {response.status_code}")
    if 400 <= response.status_code < 500:
        raise Exception(f"{response_data['error']['message']} {response.status_code}")
    print(response_data)
    return response_data
    
#method that can be used to call the job creation api
def create_job(project_id, data, x_api_key):
    base_url = "https://api.playment.io/v1/projects/{}/jobs".format(project_id)
    headers = {'x-api-key': x_api_key}
    response = requests.post(base_url, headers=headers, json=data)
    
    print(response.json())
    if response.status_code >= 500:
        raise Exception(response.text)
    if 400 <= response.status_code < 500:
        raise Exception(response.text)
    return response.json()

if __name__ == "__main__":
    #list of frames in a single job
    image_url = "https://example.com/image_url_1"
    
    #reference_id should be unique for each job
    reference_id= "job1"

    project_id = ''
    x_api_key = ''
    workflow_id = ''
    batch_id = ''
    
    
    job_data = {
        'reference_id':reference_id,
        'work_flow_id':workflow_id,
        'data':{
            'image_url':image_url
            },
        'batch_id': batch_id
    }
    
    response = create_job(project_id=project_id, data=job_data, x_api_key= x_api_key)
    print(response)
    

Creating jobs with pre-labeled data

If you have data which has been labeled previously by an ML model or by human labelers, you can create jobs with such labels already created. To do this, you need to send the annotation data in the data.maker_response key in the payload. The annotation data needs to be in Playment's annotation format.

Here's an example

{  
   "reference_id":"001",
   "data":{
     "image_url":"https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1",
     "maker_response" : {
        "rectangles": {
           "data": []
        },
        "polygons": {
           "data": []
        },
        "lines": {
           "data": []
        },
        "cuboids": {
           "data": []
        },
        "landmarks": {
           "data": []
        }
    }
   },
   "work_flow_id":"2aae1234-acac-1234-eeff-12a22a237bbc"
}

Each object in the data.maker_response.rectangles.data list will be an annotation object of the respective annotation type. For example:

{
  "_id": "0e6d895e-2484-439a-b62b-d8a0afb3d190",
  "label": "Cat".
  "attributes": {
    "pose": {
      "value": "standing"
    },
    "breed": {
      "value": "Persian"
    }
  },
  "coordinates": [
    {"x": 0.00398, "y": 0.00558},
    {"x": 0.05404, "y": 0.00558},
    {"x": 0.05404, "y": 0.09096},
    {"x": 0.00398, "y": 0.09096}
  ]
}

In our annotation output, the x and y coordinates are normalised to ensure consistency across different image sizes. Normalisation is crucial for accurately representing object positions relative to the image dimensions.

X and Y Coordinates:

  • X Coordinate:

    • The result ranges from 0.0 to 1.0, where 0.0(Origin) corresponds to the leftmost edge of the image, and 1.0 corresponds to the rightmost edge.

  • Y Coordinate:

    • The result ranges from 0.0 to 1.0, where 0.0(Origin) corresponds to the topmost edge of the image, and 1.0 corresponds to the bottommost edge.

Last updated