|
|
import gradio as gr |
|
|
import numpy as np |
|
|
import cv2 |
|
|
from ultralytics import YOLO |
|
|
import base64 |
|
|
|
|
|
|
|
|
class MeasureSize: |
|
|
def __init__(self, img): |
|
|
self.img = img |
|
|
self.totalArea = 0 |
|
|
self.totalObjects = 0 |
|
|
|
|
|
|
|
|
def loadArucoSettings(self): |
|
|
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_5X5_50) |
|
|
parameters = cv2.aruco.DetectorParameters() |
|
|
detector = cv2.aruco.ArucoDetector(dictionary, parameters) |
|
|
|
|
|
corners, ids, rejected_img_points = detector.detectMarkers(self.img) |
|
|
|
|
|
try: |
|
|
aruco_perimeter = cv2.arcLength(corners[0], True) |
|
|
except: |
|
|
aruco_perimeter = 1 |
|
|
|
|
|
|
|
|
|
|
|
return parameters, dictionary, corners, aruco_perimeter |
|
|
|
|
|
|
|
|
|
|
|
def crop_square(img, size, interpolation=cv2.INTER_AREA): |
|
|
h, w = img.shape[:2] |
|
|
min_size = np.amin([h,w]) |
|
|
|
|
|
crop_img = img[int(h/2-min_size/2):int(h/2+min_size/2), int(w/2-min_size/2):int(w/2+min_size/2)] |
|
|
resized = cv2.resize(crop_img, (size, size), interpolation=interpolation) |
|
|
|
|
|
return resized |
|
|
|
|
|
|
|
|
def show_preds_image(pil_image): |
|
|
img_original = np.array(pil_image) |
|
|
img_original = img_original[:, :, ::-1].copy() |
|
|
|
|
|
img = crop_square(img_original, 640) |
|
|
ms = MeasureSize(img) |
|
|
|
|
|
parameters, aruco_dict, corners, aruco_perimeter = ms.loadArucoSettings() |
|
|
|
|
|
img = cv2.aruco.drawDetectedMarkers(img, corners) |
|
|
|
|
|
return img, { |
|
|
'aruco_perimeter': aruco_perimeter |
|
|
} |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
outputs_image = [ |
|
|
gr.components.Image(type="numpy", label="Output Image"), |
|
|
gr.components.JSON() |
|
|
] |
|
|
|
|
|
interface_image = gr.Interface( |
|
|
fn=show_preds_image, |
|
|
inputs=gr.Image(type="pil"), |
|
|
outputs=outputs_image, |
|
|
title="ARUCO detector", |
|
|
) |
|
|
|
|
|
gr.TabbedInterface( |
|
|
[interface_image], |
|
|
tab_names=['Image inference'] |
|
|
).queue().launch() |
|
|
|
|
|
|
|
|
|