Python R2


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 😛

Anuncios

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!!!!!!!!!!!!!!!!!!!!!!!

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

Introduccion a Python – OpenCV

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

Vamos a reconocer el rostro de nuestros usuario y dentro de el los ojos y la boca y la nariz. Para esto en esta oportunidad vamos a utilizar una biblioteca llamada opencv.

Acá les dejo el código

#!/usr/bin/python

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

def sincroImg(image,scale):
	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,x,y,scale):
	cv.cvClearMemStorage(storage)
	return cv.cvHaarDetectObjects(
                                   img,
                                   cascade,
                                   storage,
                                   scale,
                                   2,
                                   0,#cv.CV_HAAR_DO_CANNY_PRUNING,
                                   cv.cvSize(x, y))

camara = highgui.cvCreateCameraCapture(0)

fps = 30
pygame.init()
ventana = pygame.display.set_mode((320,240))
pygame.display.set_caption("OpenCV + Webcam Test")
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       ='xml/haarcascade_frontalface_alt.xml'
cascade_name_nariz ='xml/nariz.xml'
cascade_name_ojos  ='xml/ojos.xml'
cascade_name_boca  ='xml/boca.xml'
storage = cv.cvCreateMemStorage(0)

cascade = cv.cvLoadHaarClassifierCascade(cascade_name, cv.cvSize(14,14))
cascade_nariz = cv.cvLoadHaarClassifierCascade(cascade_name_nariz, cv.cvSize(14,14))
cascade_ojos = cv.cvLoadHaarClassifierCascade(cascade_name_ojos, cv.cvSize(22,22))
cascade_boca = cv.cvLoadHaarClassifierCascade(cascade_name_boca, cv.cvSize(25,15))

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

        # face detection
	sincroImg(img1,scale)
        faces = dectect(img1,cascade,storage,50,50,scale)
	b_ojos = False
	b_boca = False
	b_nariz= False
	if faces.total != 0:
		face = faces[0]
		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)
		face_x1 = int(face.x)
		face_y1 = int(face.y)
		face_x2 = int(face.x + face.width)
		face_y2 = int(face.y + face.height)

		ojos  = dectect(img1,cascade_ojos,storage,20,20,scale)
		for o in ojos:
			if o.x > face_x1 and o.y > face_y1 and (o.x + o.width) < face_x2 and  (o.y + o.height) < face_y2:
				cv.cvRectangle(img1,
					cv.cvPoint( int(o.x), int(o.y)),
					cv.cvPoint(int(o.x + o.width), int(o.y + o.height)),
					cv.CV_RGB(0,0,255), 3, 8, 0)
				ojos_x1= o.x
				ojos_y1= o.y
				ojos_x2= o.x + o.width
				ojos_y2= o.y + o.height
				b_ojos=True;
		bocas =[]
		if b_ojos:bocas  = dectect(img1,cascade_boca,storage,60,30,scale)
		for b in bocas:
			if b.x > ojos_x1 and b.y > ojos_y2 and (b.x + b.width) < ojos_x2 and  (b.y + b.height) < face_y2:
				cv.cvRectangle(img1,
					cv.cvPoint( int(b.x), int(b.y)),
					cv.cvPoint(int(b.x + b.width), int(b.y + b.height)),
					cv.CV_RGB(0,255,0), 3, 8, 0)
				boca_x1= b.x
				boca_y1= b.y
				boca_x2= b.x + b.width
				boca_y2= b.y + b.height
				b_boca= True

		narices =[]
		if b_boca:narices  = dectect(img1,cascade_nariz,storage,40,40,scale)
		for n in narices:
			if n.x > ojos_x1 and n.y < boca_y1 and n.y >= ojos_y2 and n.x + n.width < ojos_x2 :
				cv.cvRectangle(img1,
					cv.cvPoint( int(n.x), int(n.y)),
					cv.cvPoint(int(n.x + n.width), int(n.y + n.height)),
					cv.CV_RGB(0,0,0), 3, 8, 0)
				b_nariz = True

	img = adaptors.Ipl2PIL(img1).resize((320,240))

	if b_nariz:
		img.save('img/img'+str(inx)+'.jpg')
		inx+=1

	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))

Espero que les guste 🙂

Aca dejo un tar.gz con todos los xml necesarios y algunos otros para que prueben

Link a haarcascades(XMLs): xml.tar.gz

No se olviden de anotarse al grupo binsd de google 😛

Moviendo la cabeza moviendo el mouse

Posted in Python por Arturo Elias Antón en 17 enero 2009
Tags: , , , , , ,

En esta oportunidad quiero compartir un video de un programita que estoy haciendo para mover el Mouse de la con la cabeza. Aunque verdaderamente es un poco rudimentario funciona bastante bien y espero sus comentarios.
Para mover el Mouse no se necesita más que una WebCam.

http://www.youtube.com/watch?v=Q8_To4EO18w

Acá si bien no esta pulido y es bastante feo, les dejo el código 😉
Download del pyMouse.py

Como siempre espero que les guste 😉

La pyntendo se abarata para la crisis del 2009 ;)

Posted in Python por Arturo Elias Antón en 31 diciembre 2008
Tags: , , , , ,

Para los que no tienen el mágico celular N95 ya pueden mover la pelotita con una linterna. Como muestro en este video donde mi papá me filmo.

El código lo publicare apenas lo tenga mas terminado. Espero que les guste y que vean que tengan un buen 2009

link al video http://www.youtube.com/watch?v=UdMNh9t5YJw

Saludos a todos gracias y feliz año!!!!!!!!!!!!!!!!!!!!!!!!

Página siguiente »