Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas
Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas

martes, 6 de marzo de 2018

Pygame I: Las bases.

Vamos a empezar esta serie de tutoriales sobre Pygame, como ya introduje la semana pasada, no pretendo hacer una guia completa de creación de videojuegos, simplemente vamos a presentar unas bases para que podamos integrar las cosas que hemos aprendido con OpenCV a Pygame, y así poder programar juegos al estilo Eye Toy de Play Station 2.

En este primer tutorial, mostraré la configuración inicial del juego, cargaremos musica y un sprite, con esto será suficiente para poder entender como  funciona pygame.

Para descargar pygame, usaremos la herramienta pip, de la que ya hemos hablado anteriormente:

Windows, en CMD: python -m pip install pygame
Linux, en la terminal: pip install pygame

Documentación de Pygame, https://www.pygame.org/docs/ref/display.html
El sprite utilizado:



Sin más y como siempre, pasamos al codigo, sobre el mismo código pondré los comentarios, creo que os resultará más práctico:


'''
Created on 2 mar. 2018

@author: Juanp
'''

import pygame
from pygame.locals import *

#Constantes

W = 680
H = 460

AZUL_CLARO = (190,220,255)


def main():
    
    #Iniciamos pygame:
    
    pygame.init()
    pygame.font.init()
    pygame.mixer.init(frequency=22050, size=16, channels=2, buffer=4096)
    clock = pygame.time.Clock()
    SCREEN = pygame.display.set_mode((W,H))
    
    #La funcion fill, nos sirve para definir el color de fondo
    
    SCREEN.fill(AZUL_CLARO)
        
    #Cargamos los archivos de juego y definimos variables
    
    sprite = pygame.image.load('globo.png').convert_alpha()
    mus_fondo = pygame.mixer_music.load("loopvint.mp3") #Importante diferenciar entre musica y sonido del juego
    pygame.mixer.music.play(loops=0, start=0.0)        
    
    running = True
    
    #Bucle del juego
    
    while running:
        
        #Mostramos el sprite en pantalla
        
        SCREEN.blit(sprite,(W/2,H/2))
                  
          
        
    
        #Eventos de juego, por el momento solo cerramos la aplicacion usando la ventana
        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                running = False
                
    
        #Actualiza pantalla    
        pygame.display.update()            

main()


La pantalla deberia mostrar algo así:

miércoles, 28 de febrero de 2018

OpenCV y Python V (BackgroundSubstractor)

 


Extraer el fondo de una imagen es bastante sencillo, y nos proporciona una gran herramienta para los desarrollos posteriores y eliminar zonas de la imagen que no necesitamos reconocer, asi facilitamos reconocer los elementos moviles de nuestras capturas.

Imaginemos una cinta transportadora, los elementos van pasando pero el fondo siempre es fijo, esta herramienta nos permite eliminar todos los elementos, y poderlos clasificar uno a uno.


Sin más, os muestro el código y luego comentamos:
import cv2


def main():
    
    cap = cv2.VideoCapture(0)
    mog2 = cv2.createBackgroundSubtractorMOG2()
    cv2.BackgroundSubtractorMOG2.setDetectShadows(mog2,False)

    
    while(cap.isOpened()):
        
        ret, original = cap.read()
        mask = mog2.apply(original)        
        mask = cv2.erode (mask,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations = 2)
        
        cv2.imshow('Original',original)
        cv2.imshow('Mask',mask)
        
        k = cv2.waitKey(25) & 0xff
        if k == 27:
            break
        
    cap.release()
    cv2.destroyAllWindows()

main()

Vamos a obviar las partes que ya hemos tratado en otros tutoriales y centrarnos en lo que nos ocupa:

En la siguiente linea asignamos a una variable mog2, la función para extraer el fondo:
mog2 = cv2.createBackgroundSubstractorMOG2()

MOG2, por defecto "intenta" identificar las sombras, que a la hora de mostrar la mascara en pantalla nos la indica en gris, algo así:



Pero a mi no es algo que me guste, asi que lo quitamos usando la siguiente linea de código:

cv2.BackgroundSubtractorMOG2.setDetectShadows(mog2,False)

Una vez dentro del bucle, asignamos a mask, la captura aplicandole el MOG2:

mask = mog2.apply(original)

Después, limpiaremos la imagen de ruido, aplicandole el filtro "erode", esto también es opcional, si quereis vosotros mismos probad como funciona si no lo aplicais, simplemente borrando la linea:

mask = cv2.erode (mask,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations = 2)

Y  bien, en esto consiste substraer el fondo de la imagen, en los proximos tutoriales, que espero que sean pronto, haremos un inciso para explicar cómo funciona en un modo muy básico la libreria pygame, para despues aplicarlo a OpenCV, programando un minijuego basado en este mismo tutorial.

Un juego donde explotaremos globos usando nuestro cuerpo al puro estilo PSCamera de Play Station 2.



miércoles, 3 de diciembre de 2014

OpenCV y Python III ( Reconocimiento por clasificadores HAAR)

El tercero de la serie lo voy a enfocar al reconocimiento de imágenes siguiendo HAAR cascade.
Si habéis probado los ejemplos, hay uno el facedetect, que como su nombre indica detecta los rostros en una imagen, aparece la imagen de nuestra querida Lena con un rectangulo en la cara en la cara.

Como simple curiosidad buscáis en la wikipedia a Lenna, veréis la historia de esta imagen.


viernes, 21 de noviembre de 2014

OpenCV y Python I (Instalación y ejemplo)

El contenido de este blog normalmente gira entorno a la idea de realizar un proyecto robótico, algo que he buscado desde que de pequeñito vi la peli de Cortocircuito, es una de esas cosas que forman parte de la lista de "Cosas que debo hacer antes de morir"


Y claro, mi hipotético futuro superrobot tiene que ver y entender según que cosas, como llamarme papá al verme... ahí es cuando entra OpenCV, una librería de visión artificial que empezaremos a utilizar con estos tutoriales.

En este post, aprenderemos a instalarla en Python y dejarla lista para usar, y ya de paso cargaremos un ejemplo de los que lleva para comprobar que funciona.


jueves, 24 de julio de 2014

Raspberry Pi (Encendido de un led por servidor)

Bueno, siguiendo con el anterior tutorial sobre como instalar el servidor Apache, PHP y MySQL. Hoy vamos a ver como crear una web propia desde la que podemos encender un led desde cualquier dispositivo conectado a interntet.
Si sustituimos ese led y ponemos un relé conectado a una lámpara de casa, tendremos un sistema domótico, y si lo conectamos a una bomba de agua podremos automatizar el regado de nuestras plantas...

Aquí tocaremos Python, Html y Php, si tenemos algo de idea de programación en estos lenguajes perfecto, tampoco será muy complicado ya que con unas nociones basiquisimas de ellos, nos arreglamos.
Es un proyecto sencillo, no una web cargada de estilos en css, colorines y demás.. eso ya cada uno.

Utilizaremos los pines de salida de la Raspbery para conectar el led, haremos un pequeño script en Python para su encendido, luego haremos un sencillo botón en Html enviando la información a otro script de Php que llamará al script de Python para finalmente encender el led, y todo esto cargado en nuestro servidor hará el led se encienda.


Esquema de conexión del led
                                                                                               
Después de esta pequeña introducción, empecemos.

Descargaremos la librería GPIO para Python desde Raspberry pi, con esta libreria podremos acceder a los pines GPIO:.

sudo wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.1.0.tar.gz
tar zxf RPi.GPIO-0.1.0.tar.gz
cd RPi.GPIO-0.1.0
sudo python setup.py install

Crearemos los scripts para el encendido y apagado, podemos hacerlos en un editor externo y luego ponerlos en la carpeta "var/www/", o bien desde el shell de Raspberry:

sudo nano /var/www/on.py 

En el editor introduciremos el siguiente código para el encendido del led, y guardamos.
 
import RPi.GPIO as GPIO
GPIO.setup(7, GPIO.OUT);
GPIO.output(7, False);

Y para el apagado, creamos otro script:

sudo nano /var/www/off.py 

Introducimos:

import RPi.GPIO as GPIO
GPIO.setup(7, GPIO.OUT);
GPIO.output(7, True);

Creamos el archivo html, si entráis en "index.html", veréis que ya hay algo escrito, es la página de prueba de Apache, borramos sin problema.


sudo nano /var/www/index.html


<html><head> Control de led por servidor:
<form action="" method="post">
<input checked="" name="led" type="radio" value="1" />On
<input name="led" type="radio" value="2" />Off
<input name="Ok" type="submit" value="enviar" />
</form>
<?php
if ($_POST['on'] {
exec("sudo python /var/www/on.py")
}else{
exec("sudo python /var/www/off.py")
}
</head></html>

Debemos otorgar permisos para poder utilizar el comando exec de PHP, lo haremos de la siguiente forma:


sudo chmod 775 /var/www/
sudo usermod -a -G www-data pi
sudo visudo 
 
Agregamos una ultima linea:
www-data ALL=(root) NOPASSWD:ALL

Y reiniciamos el servidor:
sudo /etc/init.d/apache2 restart

Después de esto estaremos listos para probar el encendido y apagado del led desde cualquier pc, o incluso desde nuestro móvil, entrando a la dirección IP de nuestra Raspberry.
A partir de aquí, podríamos dejarlo más bonito diseñando un poco mejor la página, utilizando unas imágenes que muestren el estado actual del led. Por mi parte prefiero ver lo realmente necesario para funcionar, y luego perfilar hasta conseguir el diseño óptimo.

miércoles, 16 de julio de 2014

Raspberry ( Apache + PHP + MySQL)

Buenas a todos, en el siguiente tutorial mostraré cómo podemos configurar nuestro propio servidor web en Raspberry pi.

Para empezar, desde la linea de comandos de Raspbian, instalaremos Apache, que para quien no lo conozca es un servidor HTTP de codigo abierto y multiplataforma.

Una buena practica cada vez que vamos a instalar algo nuevo es comprobar que nuestros repositorios están actualizados.

sudo apt-get update 


Instalación

Empezamos instalando Apache:

sudo apt-get install apache2 apache2-doc apache2-utils

Y las librerias requeridas, entre ellas las de PHP:

sudo apt-get install libapache2-mod-php5 php5 php-pear php5-xcache

La conexión a la base de datos de MySQL:

sudo apt-get install php5-mysql

Instalamos MySQL, activando antes la interfaz loopback:

sudo ifup lo
sudo apt-get install mysql-server mysql-client


Comprobación

Desde cualquier navegador introducimos la IP de Raspberry, y nos tiene que salir una página con el título Its works!

Ahora comprobamos que funciona php, para ello crearemos un archivo de extension php en la carpeta "/var/www" Aquí pondremos siempre el contenido a mostrar desde el navegador.

sudo nano /var/www/test.php

Escribimos el siguiente texto y guardamos:

<?php phpinfo(); ?>


En el navegador de nuevo, introducimos nuestra IP seguida de "/test.php", y veremos que nos sale información sobre la version de PHP.






sábado, 12 de julio de 2014

Raspberry pi. Primeros pasos (Instalación de SO)


Ya tenemos nuestra Raspberry pi, antes de comprarla hemos visto videos, leido tutoriales y visto cientos de proyectos divertidos para realizar... Y ahí la tienes delante de la mesa sin saber por donde empezar. Por lo menos es lo que me ocurrió a mi.




Bien, puedes ir pensando que quieres hacer, si quieres un centro multimedia, una televisión inteligente, un centro de videojuegos retro...  pero de momento vamos a trastear.

Le instalaremos el sistema operativo para ello, Raspbian es la opción que elegí, y no decepcionó:

Para ello necesitaremos:
     -Una tarjeta SD, se recomienda una de 8Gb o más.
     -Cable microusb, yo utilizo el cargador del movil.
     -Cable HDMI
     -Teclado y ratón.
     -TV
     -Y por supuesto la Raspberry pi.


Nos descargamos la última distribución de Raspbian.


http://downloads.raspberrypi.org/raspbian_latest









Si trabajamos en windows, nos descargaremos Win32 Disk Imager para poder grabar la imagen del sistema operativo en la SD.

1.- Descomprimimos la imagen en nuestro disco.
2.- Instalamos Win32 Disk Imager
3.- Insertamos microSd en el pc, y nos quedamos con la letra de la unidad.
4.- Abrimos el Disk Imager y seleccionamos la unidad.(1)
5.- Seleccionamos el archivo de imagen (2).
6.- Apretamos a write (3), y esperamos a que cargue la imagen a la micro.


Una vez finalizado podremos extraerla e introducirla en la Raspberry, conectarla a un monitor, conectar un teclado y comenzar a utilizarla.

Nombre de usuario: pi
Password: raspberry

Para entrar al modo grafico teclearemos:
startx



En el proximo tutorial, configuraremos Raspbian para entrar mediante SSH de forma remota.