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
project_id
string
ID of the project in which you want to create the job
Headers
x-api-key
string
API key for authentication
Request Body
batch_id
string
A batch is a way to organize multiple jobs under one batch_id
. You can create new batches from the dashboard or by using the batch creation API.
If batch_id
is left empty or the key is not present, the job is created in the Default batch
in your project.
work_flow_id
string
The ID of the workflow inside which you want to create the job
data
object
The data
object contains all the information and attachments required to label a job. The data
object is defined below
reference_id
string
The unique identifier of the job
{
"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": {
"video_data": {
"frames": [
{
"frame_id": "frame1",
"src": "https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
},
{
"frame_id": "frame2",
"src": "https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+2"
}
]
},
"reference_data": {
"vector": {
"images": [
{
"frame_id": "frame1",
"data": [
{
"label": "camera 1",
"image_url": "https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
},
{
"label": "camera 2",
"image_url": "https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
}
]
},
{
"frame_id": "frame2",
"data": [
{
"label": "camera 1",
"image_url": "https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
},
{
"label": "camera 2",
"image_url": "https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
}
]
}
]
}
}
},
"work_flow_id":"2aae1234-acac-1234-eeff-12a22a237bbc"
}
Payload Definition
data.video_data.frames
array
This contains an array of objects, with each object containing two properties:
frame_id
- Unique identifier for the frame.
src
- URL of the image.
data.reference_data
Object
The reference_data
object contains an additional list of images that can be used as a reference while annotating the primary image.
This is an optional
key based on your requirement.
data.reference_data.vector.images
is an array of objects, each containing two properties: frame_id
and data
.
frame_id
is a unique identifier for the frame, which will be used to map reference image(s) with the main image.
Each element of the data
array contains two properties: label and image_url.
image_url
- URL of the image.
label
- Name of the image.
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
frames = ["https://example.com/image_url_1","https://example.com/image_url_2","https://example.com/image_url_3"]
#reference_id should be unique for each job
reference_id= "job1"
project_id = ''
x_api_key = ''
workflow_id = ''
batch_id = ''
video_data = {'frames' : []}
i=0
for frame_url in frames:
i=i+1
frame_id = "frame"+str(i)
frame_obj = {'src':frame_url,'frame_id':frame_id}
video_data['frames'].append(frame_obj)
job_data = {
'reference_id': reference_id,
'workflow_id': workflow_id,
'batch_id': batch_id,
'data': {
'video_data': video_data,
'reference_data': {
'vector': {
'images': [
{
'frame_id': 'frame1',
'data': [
{
'label': 'camera 1',
'image_url': 'https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1'
},
{
'label': 'camera 2',
'image_url': 'https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1'
}
]
},
{
'frame_id': 'frame2',
'data': [
{
'label': 'camera 1',
'image_url': 'https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+2'
},
{
'label': 'camera 2',
'image_url': 'https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+2'
}
]
}
]
}
}
}
}
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 our annotation format.
Here's an example
{
"reference_id":"001",
"data":{
"video_data": {
"frames": [...]
},
"maker_response" : {
"video2d": {
"data": {
"annotations": []
}
}
}
},
"work_flow_id":"2aae1234-acac-1234-eeff-12a22a237bbc"
}
The data.maker_response.video_2d.data.annotations
list contains objects, where each object is a tracker. A tracker tracks an object across frames. The frames
key in the tracker object maps each annotation object in the tracker to the frame_id
it belongs to.
{
"_id": "",
"type": "rectangle", // rectangle/polygon/line/cuboid/landmark
"label": "Cat",
"frames" : {
"frame001" : {<annotation_object>}
}
}
You can check the structure for various annotation_object
below:
{
"_id": "0e6d895e-2484-439a-b62b-d8a0afb3d190",
"label": "".
"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}
]
}
Last updated
Was this helpful?