fjenett's picture
Update app.py
9a85ca4
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;
result = result.tolist()
else:
result = []
return [Image.fromarray(imgN), json.dumps(result)]
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
)