diff options
author | pgperui <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) |
commit | 938b102e5f19ec374b366e873a7b654bcb9b3f58 (patch) | |
tree | 39bff72925bcd9609924b66eda7bf87c17f2a221 | |
parent | acb14f1baccb0a6c3e011811fca6ece74fd2efc7 (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.py | 2 | ||||
-rw-r--r-- | Utilidades/bin/python/TocarAnimalesPUI.py | 158 |
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() |