Python R2


OpenCv+Gtk+Glade+Thread

Posted in General,OpenCV,Python por achauque en 13 noviembre 2009

La idea de este pequeño código publicado es entender un poco más sobre los Thread en Python. Básicamente es una ventana con un widget para imágenes y 3 botones (play, stop y capture).

La idea es ver en una ventana (GTK) las imágenes del cámara en “tiempo real”, para lo cual me valgo de los threads

El ejemplo trabaja con Opencv. Lo que por el momento no he podido lograr es terminar el hilo de ejecución para liberar el dispositivo. Por lo cual es bienvenida cualquier sugerencia para poder terminar la clase.

DOWNLOAD

Anuncios

Primeros pasos: Python+GTK+MySQL+Glade

Posted in Python por achauque en 5 noviembre 2009

En principio quiero agradecer por el espacio para poder expresarme!
Hace un par de meses empece a investigar sobre OpenCV y Python. Hoy estoy desarrollando un proyecto que me ha permitido escribir un par de funciones que espero les ayuden.
Estoy abierto a cualquier sugerencia para mejorar las funciones y ampliar la biblioteca.
Básicamente son 2 funciones que permiten cargar un control TreeView y un ComboBox a partir de consultas SQL.
El archivo comprimido cuenta con todo lo necesario para poner a funcionar un ejemplo basico:
* un script.sql para crear y cargar una tabla de usuario.
* un gui.glade para poder editar la interface grafica.
* y los *.py con el codigo Python.

DOWNLOAD

Python + Cairo

Posted in Python por Arturo Elias Antón en 15 mayo 2009
Tags: , , , , , ,

Estaba en casa arreglando mi cuarto cuando de pronto me encontre con una nota de la revista  mundo linux donde decia

“Cairo es una completa librería gráfica que permite la renderización tanto a pantralla como a impresora de gráficos en 2D. El trabajo con gráficos vectoriales, la integración con GTK+ y OpenGL son características fuertes. Si a esto le sumamos la utilización de un lenguaje como Python, la productividad está asegurada “

De esta misma nota saque un Script de demo que pondré aquí.

import cairo
WIDTH, HEIGHT = 600, 400

def draw_spiral (ctx, width, height):
	wd = 0.02 * width
        hd = 0.02 * height

        width  -= 2
        height -= 2
        ctx.move_to( width + 1, 1-hd)

        for i in range (9):
        	ctx.rel_line_to(0, height - hd * (2 * i - 1))
                ctx.rel_line_to(-(width - wd * (2 * i)),0)
                ctx.rel_line_to(0,- (height- hd * (2 * i)))
                ctx.rel_line_to(width - wd * (2 * i + 1),0)
	ctx.set_source_rgb(0,0,1)
        ctx.stroke()

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, WIDTH,HEIGHT)
ctx = cairo.Context(surface)

ctx.set_source_rgb(1,1,1)
ctx.set_operator(cairo.OPERATOR_SOURCE)
ctx.paint()

draw_spiral(ctx,WIDTH,HEIGHT)
surface.write_to_png('spiral.png')

Como siempre espero que les guste en la próxima integrare Cairo con GTK+ pero como eso no estaba en la revista me va a llevar mas tiempo jejejeje 😛

Beta – PyWars 2.0.1

Posted in Python por Arturo Elias Antón en 5 mayo 2009
Tags: , , , , , ,

Hola a todos aca les dejo el servidor de pyWars-Beta que tiene todo para desarrollar un bot para el próximo torneo. La principales diferencia con el pyWars 1.0 son

  • Se puede disparar en diagonal.
  • Un solo disparo por Bot. (uno de cada Bot en la pantalla)
  • Se puede ver la contienda en un visor en 3D.
  • Otra diferencia es que el Visor se separo totalmente del servidor.

Aclaración: El visor Oficial para el torneo seguirá siendo el 2D.

bueno espero que propongan fechas y modalidad.

Link a descarga:  http://www.binsd.com.ar/descarga/pyWars-2.0.0.1-Beta.tar.gz

Para los que no estan en tema les cuento que pyWars es un juego para programadores.

Cada Programador (jugador) debe programar una clase que herede de  Bot. Un Bot es un cuadradito de color rojo o azul.
Los Bot en  esta versión solo podran tener un disparo en pantalla. El primer Bot que logra darle a su contrario ganara. en caso de que esto choquen empataran.

Al bajar el servidor se bajaran también los visores y algunos Bot de demostración.

Espero sus comentarios y propuestas.

Mouse Facila escrito en Python con OpenCV para Linux

Posted in Python por Arturo Elias Antón en 3 mayo 2009
Tags: , , , , ,

R2-mouse es un pequeño proyecto que presente en la Flisol de Carmelo 2009. No es mas que la evolución de los proyectos de mouse y openCV anteriores. Para poder correr este proyecto necesitaremos instalar:

  • python-opencv
  • python-xlib
  • PIL
  • pyGame

Descarga

Espero que les guste.

Como crear los XML haartraining para OpenCV

Posted in Python por Arturo Elias Antón en 28 abril 2009
Tags: , , , , , ,

En esta oportunidad les quiero mostrar un documento de un miembro de la lista de binsd. Gracias a él ya no quedaran misterios para que nuestra camara detecte cualquier objeto.

Bueno les dejo el documento de Chauque, Esteban Alejandro. Download

Gracias Alejandro!!!!!!!!!!!!!!!!!!!!!!!

Mi visita a la FLISOL de Carmelo 2009

Posted in Python por Arturo Elias Antón en 27 abril 2009
Tags: , ,
logo flisol

Hoy solo publicare mi experiencia en la FLISOL de Carmelo 2009.
La verdad que le viaje empezó medio complicado ya que viaje por la Cacciola una lancha del tigre y tuvimos un pequeño inconveniente y nos tuvieron que cambiar de lancha en el agua. Igual quiero dejar claro que el servicio de Cacciola es muy bueno más allá de los enojos del momento jejej. Luego al llegar a Carmelo me estaba esperando Jose Mignone y Fabian la verdad dos tipazos que hicieron que  estemos cómodos todo el tiempo tanto a mi como a mi viejo que me acompaño todo el viaje. Fuimos primero al hotel Urbano donde dejamos los bolsos y de ahi a ADEC, el instituto que era el responsable de la organización de esta FLISOL. En ADEC nos encontramos con Diego y Damián de ahi nos fuimos a comer a un barcito de la plaza central llamado FayFay que estaba muy bueno. Diego nos contó un par de historias muy entretenidas. De ahi a hotel a dormir.
El día de la charla nos levantamos con mi viejo y fuimos a desayunar en el hotel habia de todo para desayunar la verdad muy bueno.  De ahi fuimos a la escuela N° 6, donde se hacia el evento (FLISOL Carmelo 2009),  Conocí primero a Rodolfo que dio una charla copada de Ubuntu donde presento el entorno y algunas aplicaciones que ya vienen instaladas por defecto. En ese ínterin se nos cortó Internet y dimos un par de vuelas con Jose, Fabian y Damián  para ver como poder hacerla andar. Luego de este problemita  me tocaba hablar a mí. Yo presente un par de proyectos propios escritos en  Python y explique como programar un juego muy simple ya que apunte la charla a la educación ya que la gente que había era chicos y maestros.
De ahi nos fuimos a comer a Piccolino pidan un combinado se los recomiendo. A la tarde acompañe a Federico en su charla de Pippy un entorno de desarrollo para chicos que viene en el OLPC que da el plan ceibal. Quiero hacer un párate en esto de la OLPC y decirle a todos, que la verdad Uruguay me dejo sorprendido por su alto compromiso con el Software Libre y el funcionamiento de este plan Ceibal que funciona en todas las escuelas publicas. Y muy bien.
Al otro día volvimos a desayunar en el hotel y ahi nos encontramos nuevamente con Fabian quien me facilito las instalaciones de ADEC para poder dejar mi notebook y mi celular cargando para el viaje y de ahi nos fuimos a conocer con él y mi viejo la playa. Luego se sumo Jose quien la verdad le tengo que agradecer muchísimo ya que a pesar de tener familia de afuera en su casa fue un anfitrión todo el tiempo espectacular. Los 4 nos fuimos a comer al refugio donde tienen que pedir Pamplona.

Queria agradecer a Jose por darme la posibilidad dar la charla y decirle a todos no dejen de conocer Carmelo.

Fotos del evento click

Jugando con Automatas en Python (AFN -> AFD)

Después de tanto tiempo de no escribir y ya preparando la charla para dar en la FLISOL de  Carmelo me puse a jugar un poco con autómatas (Talvez muestre algo de esto allá). Este script lo que hace es bastante simple transforma un autómata finito no determinista a un autómata finito determinista. 😉 Saludos y espero que les guste.

#!/usr/bin/python
# Clase AFN para transformar un AFN en un AFD

class AFN:
    def __init__(self,AFN):
        self.AFN = AFN
        self.SimbolosDelLenguaje =  self.LenguajeDeAFN()
        self.AFD = self.ToAFD()
    def Transaccion(self,e,t):
        return filter(lambda s:s[0]==t,filter(lambda s:s[0]==e,self.AFN)[0])[0][1]

    def EstadoInicial(self):
        # retorna una lista con el unico estado inicial
        return filter(lambda s:len(s)>=4 and s[3]=='>',self.AFN) #simpre tendria que ser uno por definicion de automatas

    def LenguajeDeAFN(self):
        # simbolos del lenguaje del AFN
        return [l[0] for l in  filter(lambda s:len(s)==2,self.AFN[-1])];

    def EstadosTratados(self):
        return [e[0] for e in  self.AFD] # los estados de llegada que fueron tratados

    def EstadosNoTratados(self):
        return map(lambda e:e[1],filter(lambda s:s[0] in self.SimbolosDelLenguaje and s[1] not in self.EstadosTratados(),self.AFD[-1]))

    def ToAFD(self):
        self.AFD =[]
        vecEstTmp= self.EstadoInicial()

        while len(vecEstTmp) <> 0:
            self.AFD.append( vecEstTmp[0])
            for estado in self.EstadosNoTratados(): #se recorren todos los estados que no fueron tratados
                TransaccionDelAFD=[] #en este vector se calculara los  las transacciones del AFD resultantes
                for simbolo in self.SimbolosDelLenguaje: # recorro para todos los simbolos del lenguaje
                    nuevoEstado=[]                       # defino nuevoEstado para armar el nuevo estado del AFD
                    for e in estado:                     # calculo la union con los conjuntos de llegada de todos los estados
                        for t in self.Transaccion([e],simbolo):
                            if t not in nuevoEstado:
                                nuevoEstado.append(t)
                        nuevoEstado.sort()

                    TransaccionDelAFD.append([simbolo,nuevoEstado])

                vecEstTmp.append([estado]+TransaccionDelAFD)

            vecEstTmp.pop(0)

        #busco los estados de Aceptacion y le pongo el *
        estasdosDeAceptacion = [l[0][0] for l in filter(lambda s:len(s)>=4 and s[-1]=='*',self.AFN)] #estados de Aceptacion
        for e in self.AFD:
            Aceptacion = False
            for ea in estasdosDeAceptacion :
                        if not Aceptacion:
                            Aceptacion =  ea in e[0]
            if Aceptacion and '*' not in e: e.append('*')

        return self.AFD

AUT = AFN(
        [
        [ [1], ['a',[1]] ,['b',[1,2]],'>'],
        [ [2], ['a',[] ] ,['b',[3]  ]],
        [ [3], ['a',[3]] ,['b',[3]  ],'*']
        ]#tabla de trancicion marcando con una -> el estado inicial y con * los estados favorables
        )

for l in  AUT.AFD:
    print l

Mi notebook me conoce!!! (eigenface – python)

Posted in Python por Arturo Elias Antón en 13 febrero 2009
Tags: , , , , , ,

Del script de la entrada anterior más  “eigenface” (autocaras)  logre hacer que mi computadora solo se desbloquee cuando yo y solo yo (un problemita egocéntrico) estoy enfrente de ella.
Acá les dejo un tar.gz para que lo bajen y lo vean.  Dentro de el hay un archivo help con los pasos que tienen que tener para poder  usarlo.

link: http://www.binsd.com.ar/descarga/eigefaces.tar.gz

recordad que solo funciona gnome.

Para implementar eigenface : http://www.owlnet.rice.edu/~elec301/Projects99/faces/

como simpre espero sus comentarios y qe les guste!!!!

Mi notebook se bloquea cuando no la miro!!! OpenCV – Python

Posted in Python por Arturo Elias Antón en 10 febrero 2009
Tags: , , , , , ,

Con este pequeño script y el haarcascade: haarcascade_frontalface_alt.xml nuestra PC/notebook con gnome se bloqueara cuando no la miremos y si pasamos el ultimo parametro con “true” se activara volver a mirarla sin pedirnos ninguna contraseña.
El xml lo podran sacar del archivo zip que se puso en el post anterior “Introduccion a Python – OpenCV ”

#!/usr/bin/python

import pygame
import Image
import sys
import os
from pygame.locals import *
import opencv
from opencv import adaptors
from opencv import highgui,cv

scale = 2
def sincroImg(image):
	image_size  = cv.cvGetSize(image)
	grayscale   = cv.cvCreateImage(image_size, 8, 1)
	image_small = cv.cvCreateImage(cv.cvSize(cv.cvRound(image.width/scale),cv.cvRound(image.height/scale)), 8, 1)
	cv.cvCvtColor(image, grayscale, cv.CV_BGR2GRAY)
	cv.cvResize(grayscale,image_small,cv.CV_INTER_LINEAR)
	cv.cvEqualizeHist(grayscale, grayscale)
    	return grayscale

def dectect(img,cascade,storage):
	cv.cvClearMemStorage(storage)
	return cv.cvHaarDetectObjects(
                                   img,
                                   cascade,
                                   storage,
                                   scale,
                                   2,
                                   cv.CV_HAAR_DO_CANNY_PRUNING)

camara = highgui.cvCreateCameraCapture(0)

fps = 30
pygame.init()
ventana = pygame.display.set_mode((320,240))
pygame.display.set_caption("Lock-See")
screen = pygame.display.get_surface()

print "OpenCV version: %s (%d, %d, %d)" % (cv.CV_VERSION,
                                               cv.CV_MAJOR_VERSION,
                                               cv.CV_MINOR_VERSION,
                                               cv.CV_SUBMINOR_VERSION)

cascade_name       = sys.argv[1]
storage = cv.cvCreateMemStorage(0)
cascade = cv.cvLoadHaarClassifierCascade(cascade_name, cv.cvSize(14,14))

paramTime = 10
paramClave = "false"

if len(sys.argv) >= 3: paramTime = int(sys.argv[2])
if len(sys.argv) == 4: paramClave = sys.argv[3]

print "Lock-See v0.1"
print paramTime,",",paramClave

scale = 2
notPresent = 0
while True:
	img1 = highgui.cvQueryFrame(camara)

        # face detection
	sincroImg(img1)
        faces = dectect(img1,cascade,storage)
	if faces.total != 0:
		if (notPresent !=0) and paramClave == "true":
			 os.system("gnome-screensaver-command --deactivate")

		notPresent = 0
		for face in  faces:
			cv.cvRectangle(img1,
				cv.cvPoint( int(face.x), int(face.y)),
				cv.cvPoint(int(face.x + face.width), int(face.y + face.height)),
				cv.CV_RGB(255,0,0), 3, 8, 0)
	else:
		notPresent += 1
		if notPresent >= paramTime:
			os.system("gnome-screensaver-command --lock")

	img = adaptors.Ipl2PIL(img1).resize((320,240))
	pgimg = pygame.image.frombuffer(img.tostring(), img.size, img.mode)
    	screen.blit(pgimg, (0,0))
    	pygame.display.flip()
    	pygame.time.delay(int(1000 * 1.0/fps))

Como siempre espero que les guste y cualquier duda solo tienen que preguntarme a mi mail o consultarlo en el grupo binsd

Saludos y espero que les guste.

Antes que nada quiero decir que me parecio mas util el bloqueador por bluetooth de javier perez

Página siguiente »