Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpgperui <pgperui@65703dd9-322d-4ecd-a169-f49c4620ba53>2011-06-18 01:46:03 (GMT)
committer pgperui <pgperui@65703dd9-322d-4ecd-a169-f49c4620ba53>2011-06-18 01:46:03 (GMT)
commit938b102e5f19ec374b366e873a7b654bcb9b3f58 (patch)
tree39bff72925bcd9609924b66eda7bf87c17f2a221
parentacb14f1baccb0a6c3e011811fca6ece74fd2efc7 (diff)
git-svn-id: svn+ssh://lulu.fing.edu.uy/ens/home01/pgperui/repoSVN@186 65703dd9-322d-4ecd-a169-f49c4620ba53
-rw-r--r--Utilidades/bin/python/CalibradorColor.py2
-rw-r--r--Utilidades/bin/python/TocarAnimalesPUI.py158
2 files changed, 54 insertions, 106 deletions
diff --git a/Utilidades/bin/python/CalibradorColor.py b/Utilidades/bin/python/CalibradorColor.py
index e99c263..5cf4dc3 100644
--- a/Utilidades/bin/python/CalibradorColor.py
+++ b/Utilidades/bin/python/CalibradorColor.py
@@ -5,7 +5,7 @@ from pygame import *
vconf = "v4l2src device=/dev/video0 ! videorate ! video/x-raw-yuv,width=320,height=240,framerate=5/1 ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"
count = 0
-config_nameCalibrador = "Data/MarkersCalibradorColor.dat"
+config_nameCalibrador = "Data/CalibradorColor/MarkersCalibradorColor.dat"
rangosEscalaColor = PuiModule.RangosColorApuntador
usarAlgoritmoRapido = 1
mostrarDebugAR = 0
diff --git a/Utilidades/bin/python/TocarAnimalesPUI.py b/Utilidades/bin/python/TocarAnimalesPUI.py
index e99c263..67977ba 100644
--- a/Utilidades/bin/python/TocarAnimalesPUI.py
+++ b/Utilidades/bin/python/TocarAnimalesPUI.py
@@ -3,33 +3,29 @@ import pygame, sys, os, time
import PuiModule
from pygame import *
+#Configuracion del pipeline de Gstreamer
vconf = "v4l2src device=/dev/video0 ! videorate ! video/x-raw-yuv,width=320,height=240,framerate=5/1 ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"
-count = 0
-config_nameCalibrador = "Data/MarkersCalibradorColor.dat"
-rangosEscalaColor = PuiModule.RangosColorApuntador
+#Archivo de configuracion Multi Marker de Artoolkit. Define la posicion relativa de los marcadores
+config_multi_markers = "Data/TocarAnimalesPUI/MarkersTocarAnimales.dat"
+#Archivo de calibracion de la camara, siempre usamos el mismo y no ha presentado problemas
+cparam_name = "Data/camera_para.dat"
+#Archivo de configuracion para la deteccion del apuntador. Este archivo fue generado mediante la utilidad CalibradorColor
+calibracion_apuntador = "Data/calibracionApuntadorAmarilloCompleta.con"
+
+cant_historia = 4
+cantElementosCargados = -1
usarAlgoritmoRapido = 1
mostrarDebugAR = 0
-aplicarMascara = 0
-frameSize = (320,240)
+idObjetoPUISeleccionado = -1
+idObjetoPUIActual = -1
-h_bins = 30 #El histograma de HUE lo dividimos en 30 partes iguales
-s_bins = 20 #El histograma de SATURATION lo dividimos en 20 partes iguales
-v_bins = 20 #El histograma de BRIGHTNESS lo dividimos en 20 partes iguales
+frameSize = (320,240)
-id_marcador =0
-tipoMascara = PuiModule.TIPO_MASCARA_BINARIA
err_deteccion = 0
-cantidad_muestras= 6
-res_aplicar_mascara = 0
-muestra = 0
-
-aplicar_mascara=1
-aplicar_nueva_mascara=1
-tomar_muestra=0
thresh = 100
-factorProporcionMaximoH = 10
-porcentajeMinimoRuido = 7
+
+
pui = None
dataImagen = None
@@ -41,21 +37,6 @@ size = (640,480)
screen = pygame.display.set_mode(size)
surface = pygame.display.get_surface()
-def initRangosColor():
- rangosEscalaColor.hmin = 1 #Teoricamente seria correcto que hmin fuera 0. Lo ponemos en 1
- rangosEscalaColor.hmax = 360 #Porque los negros totales y los blancos totales son convertidos
- rangosEscalaColor.smin = 0 #con H=0 y eso lleva a que se introduzca ruido en el histograma
- rangosEscalaColor.smax = 100
- rangosEscalaColor.vmin = 0
- rangosEscalaColor.vmax = 100
-
-def desplegarRangosColor(rangos):
- print '--------Rangos de Color--------\n'
- print 'Hue: ['+rangos.hmin+','+rangos.hmax+']\n'
- print 'Saturation: ['+rangos.smin+','+rangos.smax+']\n'
- print 'Brightness: ['+rangos.vmin+','+rangos.vmax+']\n'
- print '--------------------------------\n'
-
def desplegarDataImage(imageData):
global running,screen,frameSize,aplicar_mascara,aplicar_nueva_mascara,tipoMascara,pui,mostrarDebugAR,tomar_muestra
print '14'
@@ -101,89 +82,56 @@ def desplegarDataImage(imageData):
-def calibrar():
- global tomar_muestra,pui, id_marcador, muestra, aplicar_mascara, aplicar_nueva_mascara, tipoMascara, mostrarDebugAR
-
- print '7\n'
- if tomar_muestra:
- print 'Tomo la muestra!!!!!\n'
- err_tomarMuestra = pui.tomarMuestraApuntador()
- if err_tomarMuestra==PuiModule.ERROR_TOMAR_MUESTRA_FORMA_NO_IMPLEMENTADA:
- sys.stderr.write("Error, no se pudo tomar muestra. Forma no implementada\n")
- elif err_tomarMuestra==PuiModule.ERROR_TOMAR_MUESTRA_OK:
- print 'Muestra tomada OK\n'
-
- tomar_muestra=0
- id_marcador+=1
- muestra+=1
- else:
- print '8\n'
- dataImagen = pui.capturarPyImageAR()
- print '9\n'
- if aplicar_mascara:
- if aplicar_nueva_mascara: #Calculo la nueva mascara y la aplico
- print '10\n'
- err_deteccion = pui.detectarYCalcularPosicionTodosMultiMarkers()
- print '11\n'
- if err_deteccion==PuiModule.DETECCION_CORRECTA:
- res_aplicar_mascara = pui.aplicarNuevaMascaraCalibrador(id_marcador,tipoMascara)
- print pui.getFPSAndResetCount()
- if res_aplicar_mascara==PuiModule.MASCARA_APLICADA:
- print 'Se aplico la mascara correctamente\n'
- aplicar_nueva_mascara = 0
- else:
- print '12\n'
- print 'err_deteccion= '
- print err_deteccion
- print '\n13\n'
-
- else: #No calculo nueva mascara pero la aplico
- pui.aplicarMascaraCalibrador(tipoMascara);
-
-# pui.desplegarImagenAR(mostrarDebugAR)
- if not dataImagen == None:
- desplegarDataImage(dataImagen.data)
- print '15'
- pui.capNext()
-
def main():
- global pui, aplicar_mascara,aplicar_nueva_mascara,tomar_muestra,muestra,cantidad_muestras,jugar,factorProporcionMaximoH,porcentajeMinimoRuido,running
+ global pui,running,cantElementosCargados,cant_historia,usarAlgoritmoRapido,calibracion_apuntador,config_multi_markers,cparam_name,vconf,err_deteccion,idObjetoPUISeleccionado
- aplicar_mascara=1
- aplicar_nueva_mascara=1
- tomar_muestra = 0
pui = PuiModule.Pui()
- initRangosColor()
- pui.getModuleInfo()
print '1\n'
- pui.initPuiConCapturaDeVideo(PuiModule.MODO_MULTI_MARKERS_CALIBRADOR,"",config_nameCalibrador,"Data/camera_para.dat",vconf,usarAlgoritmoRapido,pui.NORMAL_SPEED_LOOP,1.0);
- #pui.initARConVideo(config_nameCalibrador,"Data/camera_para.dat",vconf,usarAlgoritmoRapido,pui.NORMAL_SPEED_LOOP,1.0)
+ pui.initPuiConCapturaDeVideo(PuiModule.MODO_MULTI_MARKERS,calibracion_apuntador,config_multi_markers,cparam_name,vconf,usarAlgoritmoRapido,pui.NORMAL_SPEED_LOOP,1.0);
+
print '2\n'
- pui.abrirVentanaGrafica()
+ #Si queremos usar la funcionalidad de PUI para desplegar el video tenemos que abrir la ventana grafica
+ #pui.abrirVentanaGrafica()
pui.capStart()
- pui.initPropiedadesCalibracionSoloApuntador(PuiModule.FORMA_APUNTADOR_CIRCULO,1,360,0,100,0,100,h_bins,s_bins,v_bins,1)
- print '3\n'
- pui.setDebugCalibracion(False)
- print '4\n'
- pui.capStart()
- print '5\n'
+ cantElementosCargados = pui.leerConfiguracionObjetosPUI("Data/TocarAnimalesPUI/ObjetosPuiTocarAnimales.config",10);
+ print 'Se cargaron ' % cantElementosCargados % ' elementos'
+ pui.imprimirPropiedadesObjetosPUI();
+ print '3\n'
+
while running:
- if muestra<cantidad_muestras :
- print '6\n'
- calibrar()
- elif not jugar :
- print 'se tomaron todas las muestras\n se calculan los resultados....\n'
- pui.calcularResultadosCalibracionApuntador(factorProporcionMaximoH,porcentajeMinimoRuido)
- desplegarRangosColor(pui.getResultadosRangosColor())
- print 'fin de la calibracion'
- jugar=1
- else:
- print 'Jugando'
+ dataImagen = pui.capturarPyImageAR() #capturo imagen
+ err_deteccion = pui.detectarYCalcularPosicionTodosMultiMarkers() #Detecto los marcadores y calculo las posiciones
+ if err_deteccion==PuiModule.DETECCION_CORRECTA: #No hubo error al detectar los marcadores
+ idObjetoPUISeleccionado = pui.detectarSeleccion()
+ if idObjetoPUISeleccionado >= 0:
+ print '&&&&&&&&&&& COLISION CON MARCADOR ' %idObjetoPUISeleccionado % ' &&&&&&&&&&&&&&&'
+ correspondenciaCorrecta = pui.esRelacionCorrecta(idObjetoPUIActual,idObjetoPUISeleccionado)
+ actualizarPantalla()
+ #A continuacion se muestran los diferentes codigos de error que pueden ser devueltos por PUI
+ #elif err_deteccion == PuiModule.ERROR_NINGUN_MARCADOR_DETECTADO:
+ #no se detecto ningun marcador, eventualmente se podria alerta al usuario
+ # si se reitar esta situacion varias iteraciones seguidas
+ #print 'no se detectan marcadores...\n'
+ #elif err_deteccion == PuiModule.ERROR_DETECTANDO_MARCADOERS:
+ #error en el algoritmo de Artoolkit al detectar marcador....
+ #elif err_deteccion == PuiModule.ERROR_CALCULANDO_MATRIZ_TRANSFORMACION:
+ #error en el algoritmo de Artoolkit al calcular la matriz de transformacion
+ #que nos da la posicion de cada marcador. Este codigo de error es muy comun
+ #elif err_deteccion == PuiModule.ERROR_IMAGEN_NULL:
+ #Por algun motivo la imagen es NULL, no deberia pasar nunca...
+ #else:
+ #error desconocido
+ if not dataImagen == None: #si se pudo obtener el frame entonces continuo
+ desplegarDataImage(dataImagen.data)
+ print '15'
+ pui.capNext()
+
+
if __name__ == "__main__":
main()