Spaces:
Build error
Build error
import gradio as gr | |
import torch | |
import os | |
import requests | |
import json | |
import cv2 | |
from PIL import Image | |
from timeit import default_timer as timer | |
import numpy as np | |
from transformers import AutoModel | |
model = torch.hub.load('ultralytics/yolov5','yolov5s', pretrained=True) | |
#model1 = AutoModel.from_pretrained(model) | |
cnt = 0 | |
def LCR(bbox,x_img, y_img): | |
x1 = bbox[0]/x_img | |
x2 = bbox[2]/x_img | |
if x1 < 0.2 and x2 < 0.2 : | |
location = "Left" | |
elif x1 > 0.8 and x2 > 0.8: | |
location = "Right" | |
elif x1 < 0.2 and (x2 <= 0.8 and x2 >= 0.2): | |
if (x1 + x2) < 0.4: | |
location = "Left" | |
else: | |
location = "Center" | |
elif x2 > 0.8 and (x1 <= 0.8 and x1 >= 0.2): | |
if (x1 + x2) > 1.6: | |
location = "Right" | |
else: | |
location = "Center" | |
else: | |
location = "Center" | |
print(f"x1 {x1} x2 {x2} bbox0 {bbox[0]} bbox2 {bbox[2]} x_img {x_img} LocationLCR {location}") | |
return location | |
def ACB(bbox, x_img, y_img, location): | |
y1 = bbox[1]/y_img | |
y2 = bbox[3]/y_img | |
if location == "Center": | |
if y1 < 0.33333 and y2 < 0.33333 : | |
location = "Above" | |
elif y1 > 0.66667 and y2 > 0.66667: | |
location = "Below" | |
elif y1 < 0.33333 and (y2 <= 0.66667 and y2 >= 0.33333): | |
if (y1 + y2) < 0.66667: | |
location = "Above" | |
else: | |
location = "Center" | |
elif y2 > 0.66667 and (y1 <= 0.66667 and y1 >= 0.33333): | |
if (y1 + y2) > 1.33333: | |
location = "Below" | |
else: | |
location = "Center" | |
else: | |
location = "Center" | |
else: | |
pass | |
print(f"y1 {y1} y2 {y2} bbox1 {bbox[1]} bbox3 {bbox[3]} y_img {y_img} Location{location}") | |
return location | |
#print(bbox[0]) | |
def turn_img_into_fileJSON(frame): | |
start_time = timer() | |
x_img, y_img = frame.size | |
print(x_img,y_img) | |
global cnt | |
objects = [] | |
prediction = model(frame) | |
for det in prediction.xyxy[0]: | |
class_id = int(det[5]) | |
class_name = model.names[class_id] | |
confidence = float(det[4]) | |
bbox = det[:4].tolist() | |
if(confidence >= 0.5): | |
location = LCR(bbox, x_img, y_img) | |
location = ACB(bbox, x_img, y_img, location) | |
# Save the results to the list | |
objects.append({ | |
'Class': class_name, | |
#'BoundingBox': bbox, | |
'Location': location, | |
'Confidence': confidence | |
}) | |
with open('{:05d}.json'.format(cnt) , 'w') as f: | |
json.dump(objects, f) | |
cnt += 1 | |
pred_time = round(timer() - start_time, 5) | |
json_str = json.dumps(objects) | |
return json_str, pred_time | |
#path = [["D:/cuoc_thi/object-detection/download.jpg"],["C:/Users/ACER/Pictures/mydestiny/273536337_788402492117531_8798195010554693138_n.jpg"]] | |
title = "Object-detection" | |
description = "An EfficientNetB2 feature extractor computer vision model to classify images of object." | |
article = "Created by Ryan" | |
# Create the Gradio demo | |
demo = gr.Interface(fn=turn_img_into_fileJSON, # mapping function from input to output | |
inputs="pil", # what are the inputs? | |
outputs=[gr.JSON(label="JSON Output"), | |
#gr.Label(num_top_classes=80, label="Predictions"), | |
gr.Number(label="Prediction time (s)")], | |
#gr.outputs.Label(num_top_classes= 80), | |
#examples=path, | |
title=title, | |
description=description, | |
article=article, | |
live = True) | |
demo.launch() | |
#demo.launch(share=True) |