Spaces:
Sleeping
Sleeping
File size: 2,129 Bytes
7eebac0 42a8761 9f95f84 97f0d9d 9f95f84 9c14df6 9f95f84 870f731 97f0d9d 9f95f84 97f0d9d 9f95f84 97f0d9d 42a8761 870f731 bcbdd06 42a8761 09c4a22 42a8761 3f8e34c e036d14 42a8761 a9852e7 9021e4d 42a8761 e036d14 513f538 9021e4d e1b1c67 42a8761 3ea24a6 42a8761 931bb21 42a8761 3ea24a6 931bb21 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import gradio as gr
import cv2
import numpy as np
def preprocess(img):
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite("1_gray.png", img_gray)
# Blur the image
img_blur = cv2.GaussianBlur(img_gray, (3, 3), 1)
cv2.imwrite("2_blur.png", img_blur)
# Detect edges with Canny
img_canny = cv2.Canny(img_blur, 50, 50)
cv2.imwrite("3_canny.png", img_canny)
# Dilate the edges
kernel = np.ones((3, 3))
img_dilate = cv2.dilate(img_canny, kernel, iterations=2)
cv2.imwrite("4_dilate.png", img_dilate)
# Erode the dilated edges
img_erode = cv2.erode(img_dilate, kernel, iterations=1)
cv2.imwrite("5_erode.png", img_erode)
return img_erode
def find_tip(points, convex_hull):
length = len(points)
indices = np.setdiff1d(range(length), convex_hull)
for i in range(2):
j = indices[i] + 2
if j > length - 1:
j = length - j
if np.all(points[j] == points[indices[i - 1] - 2]):
return tuple(points[j])
def infer(image_in):
img = cv2.imread(image_in)
contours, hierarchy = cv2.findContours(preprocess(img), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
peri = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.024 * peri, True)
hull = cv2.convexHull(approx, returnPoints=False)
sides = len(hull)
if 6 > sides > 3 and sides + 2 == len(approx):
arrow_tip = find_tip(approx[:,0,:], hull.squeeze())
if arrow_tip:
cv2.drawContours(img, [cnt], -1, (0, 255, 0), 3)
cv2.circle(img, arrow_tip, 3, (0, 0, 255), cv2.FILLED)
cv2.imwrite("Image_result.png", img)
return "Image_result.png", "1_gray.png", "2_blur.png", "3_canny.png", "4_dilate.png", "5_erode.png"
gr.Interface(
fn=infer,
inputs=gr.Image(
sources=["upload"],
type="filepath"
),
outputs=[
gr.Image(),
gr.Image(),
gr.Image(),
gr.Image(),
gr.Image(),
gr.Image(),
]
).launch() |