|
from huggingface_hub import hf_hub_download |
|
from typing import Dict, List, Any |
|
from ultralytics import YOLO |
|
import json |
|
|
|
class EndpointHandler(): |
|
def __init__(self, path=""): |
|
hf_hub_download(repo_id="Drazcat-AI/nectar", filename="yolov8_nectar/runs/detect/train/weights/best.pt") |
|
self.model = YOLO(hf_hub_download(repo_id="Drazcat-AI/nectar", filename="yolov8_nectar/runs/detect/train/weights/best.pt", local_files_only=True)) |
|
|
|
def predict_objects(self, image_path): |
|
results = self.model(image_path, imgsz=800) |
|
predictions = [] |
|
for box in results[0].boxes: |
|
class_id = results[0].names[box.cls[0].item()] |
|
cords = box.xywh[0].tolist() |
|
cords = [round(x) for x in cords] |
|
conf = round(box.conf[0].item(), 2) |
|
prediction = { |
|
"label": class_id, |
|
"score": conf, |
|
"box":{ |
|
"x": cords[0], |
|
"y": cords[1], |
|
"width": cords[2], |
|
"height": cords[3]} |
|
} |
|
predictions.append(prediction) |
|
predictions_array = {"predictions": predictions} |
|
|
|
return predictions_array |
|
|
|
def __call__(self, event): |
|
if "inputs" not in event: |
|
return { |
|
"statusCode": 400, |
|
"body": json.dumps("Error: Please provide an 'inputs' parameter."), |
|
} |
|
|
|
image_path = event["inputs"] |
|
|
|
try: |
|
predictions = self.predict_objects(image_path) |
|
return { |
|
"statusCode": 200, |
|
"body": json.dumps(predictions), |
|
} |
|
except Exception as e: |
|
return { |
|
"statusCode": 500, |
|
"body": json.dumps(f"Error: {str(e)}"), |
|
} |