manfredmichael's picture
Add interface
7600da2
import requests
import json
from PIL import Image
from io import BytesIO, StringIO
from base64 import decodebytes
import numpy as np
import cv2
import matplotlib.pyplot as plt
import os
inference_url = 'ubuntu@ec2-108-137-44-0.ap-southeast-3.compute.amazonaws.com'
def transform_annotations(df):
df['x1'] = df['left']
df['x2'] = (df['left'] + df['width'])
df['y1'] = df['top']
df['y2'] = (df['top'] + df['height'])
df['top_left'] = df.apply(lambda x: list([x['x1'], x['y1']]), axis=1)
df['bottom_left'] = df.apply(lambda x: list([x['x1'], x['y2']]), axis=1)
df['bottom_right'] = df.apply(lambda x: list([x['x2'], x['y2']]), axis=1)
df['top_right'] = df.apply(lambda x: list([x['x2'], x['y1']]), axis=1)
annotations = df[['top_left', 'bottom_left', 'bottom_right', 'top_right']].values.tolist()
return annotations
def transform_scale(df, size):
if len(df) > 0:
x_ratio = 512/ size[0]
y_ratio = 320 / size[1]
df['left'] = df['left'] / x_ratio
df['width'] = df['width'] / x_ratio
df['top'] = df['top'] / y_ratio
df['height'] = df['height'] / y_ratio
return df
def inference(annotations):
result = requests.post(
f"http://{inference_url}:80/predict",
files = {'file': open(f"img/annotation.jpeg", 'rb'),
'data': json.dumps({'annotations': annotations})
},
)
return result.json()
def get_heatmap(annotations):
result = requests.post(
f"http://{inference_url}:80/heatmap",
files = {'file': open(f"img/annotation.jpeg", 'rb'),
'data': json.dumps({'annotations': annotations})
},
)
heatmap = result.json()['heatmap']
heatmap = np.array(heatmap) * 0.1
colormap = plt.get_cmap('inferno')
heatmap = (colormap(heatmap)).astype(np.float32)[:,:,:3]
return result.json()['count'], heatmap