Ejercicio integrador

Armar una función detectora de guantes y probarla con el guante verde

Hasta ahora logramos detectar el guante rojo. Vamos a intentar detectar el guante verde.

En lugar de cambiar los rangos en el otro cuaderno, como ejercicio final de este tutorial, tenĆ©s que implementar una funciĆ³n llamada locate_object que reciba una imagen y los rangos de color, y devuelva la posiciĆ³n del objeto con ese color en la imagen. De esta forma tendremos bien organizado el cĆ³digo para detectar otros objetos en un futuro.

La funciĆ³n sĆ³lo debe hacer lo que se viĆ³ en el otro tutorial; convertir a hsv, filtrar por color, luego erosionar, luego calcular el centro de masa del objeto, y se puede copiar el cĆ³digo utilizado anteriormente.

In [1]:
#IMPORTS DEL CUADERNO ANTERIOR Y FUNCIONES UTILES

import matplotlib.patches as patches
# comando de Jupyter para que las imagenes se muestren automaticamente 
%matplotlib inline

#numpy es la libreria de arreglos de python (la llamaremos np)
import numpy as np

# el modulo pyplot de matplotlib (que llamaremos plt) nos permite mostrar imƔgenes
import matplotlib.pyplot as plt

#el modulo matplotlib.colors nos permite transformar el espacio de color de una imagen
import matplotlib.colors

#el modulo io de skimage sirve para cargar y guardar imagenes
from skimage import io

def dibujar_cuadrado(position):
    size=70
    canvas = plt.gca()
    size_x,size_y=(size,size)
    position_reversed=(position[1]-size_y/2,position[0]-size_x/2)
    rectangle=patches.Rectangle(position_reversed, size_x,size_y, fill=True)
    canvas.add_patch(rectangle)
    
In [3]:
def erode(segmentation_mask):
    #IMPLEMENTAR
    return 0 # retornar mascara de segmentacion erosionada

def segment_by_color(image_hsv,range_h,range_s,range_v):
    #IMPLEMENTAR
    return 0 # retornar mascara de segmentacion

def calculate_mass_center(mask):
    #IMPLEMENTAR
    return np.array([0,0]) #retornar posicion del centro de masa de la mƔscara

def locate_object(image_rgb,range_h,range_s,range_v):
    
    #convertir la imagen de rgb a hsv
    #IMPLEMENTAR
    
    #generar la mĆ”scara de segmentaciĆ³n en base al color
    #IMPLEMENTAR
    
    #erosionar la mƔscara
    #IMPLEMENTAR
    
    #calcular centro de masa de la mĆ”scara para encontrar la posiciĆ³n del objeto
    #IMPLEMENTAR
    
    return np.array([0,0]) # retornar posiciĆ³n

green_range_h=(0/255, 0/255)
green_range_s=(0/255, 0/255)
green_range_v=(0/255, 0/255)

image = io.imread('guante.png')/255

green_glove_position=locate_object(image,green_range_h,green_range_s,green_range_v)
print("Las coordenadas del centro de la mano con el guante verde son:")
print(green_glove_position) # deberĆ­a imprimir algo similar a [570,1170]
plt.imshow(image)
dibujar_cuadrado(green_glove_position)
Las coordenadas del centro de la mano con el guante verde son:
[0 0]