Spaces:
Runtime error
Runtime error
import gradio as gr | |
import cv2 | |
import json | |
import numpy as np | |
import glob2 as glob | |
from PIL import Image | |
from pyAAMED import pyAAMED | |
title = """ | |
<h1>Arc Adjacency Matrix based Fast Ellipse Detection</h1> | |
<a href="https://github.com/Li-Zhaoxi/AAMED">Gitub</a> | |
""" | |
def detect_ellipses(img_path): | |
imgC = cv2.imread(img_path) | |
imgG = cv2.cvtColor(imgC, cv2.COLOR_BGR2GRAY) | |
ammed_size = 600 | |
iheight, iwidth = imgG.shape | |
imax = max(iheight, iwidth) | |
iscale = (ammed_size - 1) / imax | |
is_landscape = iwidth >= iheight | |
if is_landscape: | |
iw = imax * iscale | |
ih = iheight * iscale | |
else: | |
iw = iwidth * iscale | |
ih = imax * iscale | |
imgG = cv2.resize(imgG, (int(iw), int(ih))) | |
aamed = pyAAMED(ammed_size, ammed_size) | |
aamed.setParameters(3.1415926/3, 3.4, 0.77) | |
print(ammed_size, iw, ih, imgG.shape) | |
result = aamed.run_AAMED(imgG) | |
imgN = imgG.copy() | |
if len(result) > 0: | |
imgN = cv2.cvtColor(imgN, cv2.COLOR_GRAY2RGB) | |
for e in result: | |
x, y, w, h, a, _ = e | |
imgN = cv2.ellipse(imgN, (y, x), (int(h / 2), int(w / 2)), -a, 0, 360, (0, 255, 0), 3) # image, center_coordinates, axesLength, angle, startAngle, endAngle, color, thickness | |
# from CPP code: | |
# temp.center.x = detEllipses[i].center.y; | |
# temp.center.y = detEllipses[i].center.x; | |
# temp.size.height = detEllipses[i].size.width; | |
# temp.size.width = detEllipses[i].size.height; | |
# temp.angle = -detEllipses[i].angle; | |
return [Image.fromarray(imgN), json.dumps(result.tolist())] | |
examples = [] | |
test_files = glob.glob('./examples/*.jpg') + glob.glob('./examples/*.png') | |
for f in test_files: | |
examples = examples + [[f]] | |
gr.Interface( | |
fn=detect_ellipses, | |
inputs=gr.Image(label="Upload image with ellipses", type="filepath"), | |
outputs=[ | |
gr.Image(type="pil", label="Detected ellipses"), | |
gr.Textbox(label="Detected ellipses") | |
], | |
title=title, | |
examples=examples, | |
allow_flagging='never' | |
).launch( | |
debug=True, | |
server_name="0.0.0.0", | |
server_port=7860 | |
) |