Image-preprocessor / handler.py
oscarfu0501's picture
Update handler.py
f3f0a83 verified
raw
history blame
2.74 kB
from typing import Dict, List, Any
import supervision as sv
import urllib.request
import numpy as np
import cv2
import base64
from inference_sdk import InferenceHTTPClient
class EndpointHandler:
def __init__(self, key): # pass api key to model
pass
def __call__(self, data: Dict[str, Any]) -> List[Dict[str, Any]]:
inputs = data.get("inputs")
isurl = inputs.get("isurl")
path = inputs.get("path")
key = inputs.get("key")
########################### Load Image #################################
CLIENT = InferenceHTTPClient(api_url="https://detect.roboflow.com", api_key=key)
print("get client")
if isurl: # for url set isurl = 1
req = urllib.request.urlopen(path)
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
img = cv2.imdecode(arr, -1) # 'Load it as it is'
else: # for image file
img = cv2.imread(path)
###########################################################################
########################### Model Detection #################################
# change model_id to use a different model
# can try:
# clothing-segmentation-dataset/1
# t-shirts-detector/1
# mainmodel/2
print("start model detection")
result = CLIENT.infer(path, model_id="mainmodel/2")
detections = sv.Detections.from_inference(result)
# print(detections)
###########################################################################
########################### Data proccessing #################################
# only pass the first detection
# change 1 -> to len(detections.xyxy) to pass all photos
print("Data processing")
if detections.confidence.size == 0:
return "Not Found"
else:
x1, y1, x2, y2 = (
int(detections.xyxy[0][0]),
int(detections.xyxy[0][1]),
int(detections.xyxy[0][2]),
int(detections.xyxy[0][3]),
)
clothes = img[y1:y2, x1:x2]
retval, buffer = cv2.imencode(".jpg", clothes)
# create base 64 object
jpg_as_text = base64.b64encode(buffer).decode("utf-8") # Decode bytes to string
###########################################################################
return jpg_as_text
###########################################################################
# data = {
# "inputs": {
# "isurl": True,
# "path": "http://192.168.10.20/cam-hi.jpg",
# "key": "iJuYzEzNEFSaQq4e0hfE",
# }
# }
# # test run
# Model = EndpointHandler()
# print(Model(data))