fjenett's picture
Update app.py
452e6a8
raw
history blame
2.14 kB
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
)