Minimal Example

Here we present a minimal example Python script showing the workflow of how to make a complete request to our API endpoint and download back the result.

This script is for demostration purpose only. It lacks some cirtical elements for a production-ready script like error handling.

import time
import os
import requests

# Define the base URL, the API key and Paths
base_url = "https://hyperhuman.deemos.com/api/v2"
api_key = "your api key"
image_path = "/your/image/path/robot.jpg"
result_path = "/your/result/path"

# Define the headers for the requests
headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
}

# Function to submit a task to the rodin endpoint
def submit_task():
    url = f"{base_url}/rodin"
    
    # Read the image file
    with open(image_path, 'rb') as image_file:
        image_data = image_file.read()

    # Prepare the multipart form data
    files = {
        'images': (os.path.basename(image_path), image_data, 'image/jpeg')
    }

    # Set the tier to Rodin Regular
    data = {
        'tier': 'Regular'
    }

    # Prepare the headers.
    headers = {
        'Authorization': f'Bearer {api_key}',
    }

    # Note that we are not sending the data as JSON, but as form data.
    # This is because we are sending a file as well.
    response = requests.post(url, files=files, data=data, headers=headers)
    return response.json()

# Function to check the status of a task
def check_status(subscription_key):
    url = f"{base_url}/status"
    data = {
        "subscription_key": subscription_key
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# Function to download the results of a task
def download_results(task_uuid):
    url = f"{base_url}/download"
    data = {
        "task_uuid": task_uuid
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# Submit the task and get the task UUID
task_response = submit_task()
task_uuid = task_response['uuid']
subscription_key = task_response['jobs']['subscription_key']

# Poll the status endpoint every 5 seconds until the task is done
status = []
while len(status) == 0 or not all(s['status'] in ['Done', 'Failed'] for s in status):
    time.sleep(5)
    status_response = check_status(subscription_key)
    status = status_response['jobs']
    for s in status:
        print(f"job {s['uuid']}: {s['status']}")

# Download the results once the task is done
download_response = download_results(task_uuid)
download_items = download_response['list']

# Print the download URLs and download them locally.
for item in download_items:
    print(f"File Name: {item['name']}, URL: {item['url']}")
    dest_fname = os.path.join(result_path, item['name'])
    os.makedirs(os.path.dirname(dest_fname), exist_ok=True)
    with open(dest_fname, 'wb') as f:
        response = requests.get(item['url'])
        f.write(response.content)
        print(f"Downloaded {dest_fname}")

Last updated