Spaces:
Sleeping
Sleeping
File size: 1,921 Bytes
7eebac0 42a8761 9f95f84 97f0d9d 9f95f84 97f0d9d 9f95f84 870f731 97f0d9d 9f95f84 97f0d9d 9f95f84 97f0d9d 42a8761 870f731 bcbdd06 42a8761 09c4a22 42a8761 bcbdd06 42a8761 bcbdd06 42a8761 af04d71 bcbdd06 42a8761 931bb21 42a8761 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 |
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, (5, 5), 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_NONE)
for cnt in contours:
peri = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.025 * 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"
gr.Interface(
fn=infer,
inputs=gr.Image(
sources=["upload"],
type="filepath"
),
outputs=gr.Image()
).launch() |