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]