valenottaviano's picture
Update app.py
edcb1b5
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
# self.pixel_cm_ratio = aruco_perimeter / 14 # 24 antes
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()