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-17 20:43:31 (GMT)
committer pgperui <pgperui@65703dd9-322d-4ecd-a169-f49c4620ba53>2011-06-17 20:43:31 (GMT)
commit79c8351b34e4cd919976e3d0fe327c84c64ca870 (patch)
tree7de9d2ededeb681875c45950f33fb105c9204192
parent59b0ac8e4c791b31f33377bf2e04187bf9a984f0 (diff)
git-svn-id: svn+ssh://lulu.fing.edu.uy/ens/home01/pgperui/repoSVN@184 65703dd9-322d-4ecd-a169-f49c4620ba53
-rw-r--r--Utilidades/bin/python/TocarAnimalesPUI.py189
1 files changed, 189 insertions, 0 deletions
diff --git a/Utilidades/bin/python/TocarAnimalesPUI.py b/Utilidades/bin/python/TocarAnimalesPUI.py
new file mode 100644
index 0000000..e99c263
--- /dev/null
+++ b/Utilidades/bin/python/TocarAnimalesPUI.py
@@ -0,0 +1,189 @@
+#! /usr/bin/env python
+import pygame, sys, os, time
+import PuiModule
+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"
+rangosEscalaColor = PuiModule.RangosColorApuntador
+usarAlgoritmoRapido = 1
+mostrarDebugAR = 0
+aplicarMascara = 0
+frameSize = (320,240)
+
+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
+
+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
+
+running = True
+
+#Variables de pantalla
+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'
+ pg_img = pygame.image.frombuffer(imageData,frameSize, "RGB")
+ print '15'
+ screen.blit(pg_img, (0,0))
+ pygame.display.flip()
+ print '16'
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ running = False
+ elif event.type == pygame.KEYDOWN:
+ if event.key == pygame.K_ESCAPE:
+ running = False
+ elif event.key == K_a: #aplicar mascara
+ aplicar_mascara = 1 - aplicar_mascara
+ elif event.key == K_n: #nueva mascara
+ aplicar_nueva_mascara = 1 - aplicar_nueva_mascara;
+ aplicar_mascara = 1;
+ elif event.key == K_u: #tipo de mascara
+ if tipoMascara==PuiModule.TIPO_MASCARA_BINARIA :
+ tipoMascara=PuiModule.TIPO_MASCARA_ATENUANTE
+ print 'Usando mascara ATENUANTE!\n'
+ else:
+ tipoMascara=PuiModule.TIPO_MASCARA_BINARIA;
+ print 'Usando mascara BINARIA!\n'
+ elif event.key == K_t: #set threshold
+ print '*** %s (frame/sec)\n' % (pui.getFPS())
+ print 'Threshold Actual = %s' % ( pui.getARThreshold() )
+ user_input = input('*************** Ingrese nuevo Threshold ******************')
+ print 'Threshold ingresado = %s' % (user_input)
+ pui.setARThreshold(user_input);
+
+ elif event.key == K_d: #set debug image
+ mostrarDebugAR = 1 - mostrarDebugAR
+ pui.desplegarImagenAR(mostrarDebugAR)
+ elif event.key == K_RETURN:
+ tomar_muestra = 1
+ aplicar_nueva_mascara = 1 - aplicar_nueva_mascara
+ aplicar_mascara = 1
+ else:
+ print 'Evento desconocido!'
+
+
+
+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
+
+ 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)
+ print '2\n'
+ 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'
+
+ 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'
+
+if __name__ == "__main__":
+ main()