YOLOR / app.py
karolmajek's picture
:bug: trying to solve runtime error in :hugging: spaces; detach!
52e322a
from PIL import Image
import torch
from numpy import random
from utils.general import (non_max_suppression, scale_coords)
from utils.plots import plot_one_box
from models.models import *
from utils.general import *
import gradio as gr
import requests
import gdown
url = 'https://drive.google.com/u/0/uc?id=1Tdn3yqpZ79X7R1Ql0zNlNScB1Dv9Fp76&export=download'
output = 'yolor_p6.pt'
gdown.download(url, output, quiet=False)
url1 = 'https://cdn.pixabay.com/photo/2014/09/07/21/52/city-438393_1280.jpg'
r = requests.get(url1, allow_redirects=True)
open("city1.jpg", 'wb').write(r.content)
url2 = 'https://cdn.pixabay.com/photo/2016/02/19/11/36/canal-1209808_1280.jpg'
r = requests.get(url2, allow_redirects=True)
open("city2.jpg", 'wb').write(r.content)
conf_thres = 0.4
iou_thres = 0.5
def load_classes(path):
# Loads *.names file at 'path'
with open(path, 'r') as f:
names = f.read().split('\n')
return list(filter(None, names)) # filter removes empty strings (such as last line)
def detect(pil_img,names):
img_np = np.array(pil_img)
img = torch.from_numpy(img_np)
img = img.float()
img /= 255.0 # 0 - 255 to 0.0 - 1.0
# Inference
pred = model(img.unsqueeze(0).permute(0,3,1,2), augment=False)[0].detach()
# Apply NMS
pred = non_max_suppression(pred, conf_thres, iou_thres, classes=None, agnostic=False)
# Process detections
for i, det in enumerate(pred): # detections per image
if det is not None and len(det):
# Rescale boxes from img_size to im0 size
det[:, :4] = scale_coords(img_np.shape, det[:, :4], img_np.shape).round()
# Print results
for c in det[:, -1].unique():
n = (det[:, -1] == c).sum() # detections per class
# Write results
for *xyxy, conf, cls in det:
label = '%s %.2f' % (names[int(cls)], conf)
plot_one_box(xyxy, img_np, label=label, color=colors[int(cls)], line_thickness=3)
return Image.fromarray(img_np)
with torch.no_grad():
cfg = 'cfg/yolor_p6.cfg'
imgsz = 1280
names = 'data/coco.names'
weights = 'yolor_p6.pt'
# Load model
model = Darknet(cfg, imgsz)
model.load_state_dict(torch.load(weights)['model'])
model.eval()
# Get names and colors
names = load_classes(names)
colors = [[random.randint(0, 255) for _ in range(3)] for _ in range(len(names))]
def inference(image):
image = image.resize(size=(imgsz, imgsz))
return detect(image, names)
title = "YOLOR P6"
description = "demo for YOLOR. To use it, simply upload your image, or click one of the examples to load them. Read more at the links below.\nModel: YOLOR-P6"
article = "<p style='text-align: center'><a href='https://arxiv.org/abs/2105.04206'>You Only Learn One Representation: Unified Network for Multiple Tasks</a> | <a href='https://github.com/WongKinYiu/yolor'>Github Repo</a></p>"
gr.Interface(
inference,
[gr.inputs.Image(type="pil", label="Input")],
gr.outputs.Image(type="numpy", label="Output"),
title=title,
description=description,
article=article,
examples=[
["city1.jpg"],
["city2.jpg"]
]).launch()