Hola,
hoy vengo a contaros como he hecho los template(plantillas) con opencv y python para encontrar las intersecciones de un tablero de go.
Un template (plantilla) es una imagen patron por decirlo de alguna manera, con la cual puedes buscar patrones parecidos dentro de una imagen. Ahora con el ejemplo seguro que lo entendeis mejor.
Bueno, como yo quería sacar las intersecciones de un tablero de go, lo primero que he hecho ha sido sacar una foto de un tablero desde arriba [1] y recortar una intersección para que me haga de template [2]. Después de tener esto y con ayuda de opencv, sacar las intersecciones es bastante fácil, os pongo mi código de ejemplo [3] por si le quereis echar un vistazo. Está comentado y explicado por todos lados. El código que dejo es como el patrón a seguir cuando quieras hacer algo parecido, si quereis el código de como sacar las intersecciones del tablero de go os la dejo aqui [4]. Si ejecutamos [4] con la imagen [1] y el template [2], obtenemos el resultado [5].
Espero que todo esto os sirva, yo en principio quise sacar las intersecciones mediante las intersecciones de lineas sacadas por la transformada de Hough, pero gracias a la ayuda de una profesora de la facultad, Maria José Jiménez, la cual me dijo que mirara templates, he podido hacerlo de esta manera tan fácil.
Un saludo !!
[1] http://tablerogo.wordpress.com/?attachment_id=55
[2] http://tablerogo.wordpress.com/?attachment_id=56
[3] http://tablerogo.wordpress.com/?attachment_id=60
[4] http://tablerogo.wordpress.com/?attachment_id=61
[5] http://tablerogo.wordpress.com/?attachment_id=57
Hola de nuevo,
otra de las cosas que he aprendido hoy, gracias de nuevo a Christian López, es ha crear un parche y aplicarlo. Esto es bastante útil por si te ayudan a mejorar algo en tu código o quieres ayudar a alguien o, si estás aburrido, modificar tú código aplicando parches tu mismo para aprender, como yo haré seguramente con los siguientes cambios que haga en el código.
Crear un parches es tan fácil como, teniendo todo el código descargado con svn y modificado con la mejora (supuestamente tiene que ser mejora, si no en vez de parche podríamos llamarle agujero). Ejecutas lo siguiente para obtener el parche:
svn diff > parche_pepito.patch
Esto lo que haces es crear un archivo donde se encuentran todos los cambios que hemos hecho anteriormente en el código. Ahora, para aplicar el parche a tu código, solo tienes que ejecutar en la carpeta donde se encuentra tu proyecto (teniendo en cuenta que el parche lo has metido en dicha carpeta anteriormente):
patch -p0 -i no-camera.patch
Y todo listo, puedes comprobar que todo ha funcionado haciendo un svn status y comprobando que se han modificado los archivos. Después de eso puedes hacer tu correspondiente commit, el parche ya no lo necesitas, pero puedes guardarlo de recuerdo si quieres, para gustos colores.
Espero que os sirva,
Un saludo !!
He estado estructurando un poco el repositorio de la forja, todo esto ayuda a una mejor organización para el trabajo en equipo y mejor organización del código.
Todo esto ha sido gracias a la ayuda de Christian López, el cual me ha explicado todo lo necesario para que todo quede bonito, ahora os lo comento a todos ustedes por si os sirve de algo.
Para crear carpetas en el repositorio que estamos usando, al ser con subversion, lo mejor es crear las carpetas trunk, branches y tags, cuyo funcionamiento viene muy bien explicado en [1]. Para crear las carpetas es tan facil como colocarse mediante la consola n el directorio raiz de nuestro repositorio y escribir:
svn mkdir trunk branches
Esto nos creará las carpetas principales, ahora, dentro de la carpeta trunk creamos la carpeta src (código de nuestro proyecto) y doc (documentación de nuestro proyecto). Ahora dentro de src creamos la capeta con el nombre de nuestro proyecto. Para ello hacemos lo siguiente:
cd trunk
svn mkdir src doc
cd src
svn mkdir nombre_proyecto
Con esto ya tenemos nuestro repositorio bonito y listo para empezar a meterle código, documentación, y todo lo que queramos. Bueno, antes que nada decir que esto es una forma de estructurarlo, puedes estructurarlo de otras formas, pero personalmente esta que os he puesto aquí es la que más me gusta.
NOTA: en el caso de que ya tengais código metido, creen todas las capetas como está mencionado anteriormente y muevan sus archivos con el comando (svn mv archivos destino/):
por ejemplo: svn *.py trunck/src/nombre_proyecto/
Después de todos los cambios, hagan los cambios con un commit:
svn ci
Y todo listo, espero que esto os sirva a más de uno,
Un saludo !!
[1] http://www.centraldev.net/post.php?id=53
A parte de la posibilidad de cargar ficheros de imágenes, Infant permitirá obtener información y aprender a partir de lo que vea o se le enseñe si se conecta una webcam al PC. Para facilitar esta tarea y distinguir entre lo que le enseñamos y lo que es fondo o información no relevante Infant contará con un algoritmo que analizará las zonas invariables de las diferentes capturas de la cámara creando una imagen de fondo que almacenará los valores de los pixeles que permanecen más o menos constantes a lo largo del tiempo. Después cada una de las imágenes obtenidas se compará con esta imagen de fondo por medio de la comparación de la varianza entre los pixeles próximos de cada pixel de la imagen (con lo que se evitará en gran medida que los cambios de iluminación afecten al resultado). Para realizar esta operación de cada pixel, tanto en la imagen base con en la captura que se trata de obtener se obtendrá una matriz 3 x 3 con los siguientes valores: donde M n,m representa el valor del pixel de la imagen original.Finalmente las dos matrices obtenidas se restan y se obtiene una matriz final en la que si ninguna de las celdas exteriores supera un determinado valor absoluto significa que el pixel pertenece al fondo (y se actualiza la imagen de fondo con el valor del pixel de la imagen nueva) o en caso contrario es parte de un nuevo elemento en pantalla con lo que se añade a la imagen a analizar.A continuación os dejo un video en el que podéis ver los resultados, aunque de momento solo es una prueba del algoritmo en el que en los primeros instantes se crea una imagen de fondo (todavía no he implementado el que se genere con los nuevos valores) y a continuación salgo yo haciendo el tonto y enseñándole cosas: Por cierto, por si queréis hacer algo parecido la captura y el video han sido realizados con RecordMyDesktop.
Hola,
me ha llegado el pedido de arduino Mega [1], con la pantalla LCD estoy intentando crear un reloj para jugar al go, y que a la misma vez detecte las pulsaciones de los botones para que mi programa haga una foto en cada pulsación y detectar los cambios producidos en el tablero.
El reloj quiero que tenga:
Bueno, creo que con todo esto va siendo suficiente, parece que no pero hay que tener en cuenta muchas cosas, espero tenerlo terminado lo más pronto posible.
Un saludo !!
[1]
Ya he conseguido empaquetar correctamente en forma de paquete de Debian lo que llevo hecho del proyecto, en este caso, el Proxy Bluetooth. Me ha costado bastante aprender a empaquetar correctamente porque no entendía del todo cómo funcionaba la creación del paquete. Debido a este éxito, tengo claro que todas las versiones de todos los componentes del proyecto que libere tendrán sus correspondientes tarball (archivo comprimido con un script de instalación) y paquete Debian (muy fácilmente instalable).
Antes de liberar la primera versión del Proxy Bluetooth, voy a esperar un poco para ver si puedo hacerle una mejora bastante importante. De acuerdo con el roadmap que me he trazado (ver sección Roadmap de este blog), liberaré la primera versión de este componente el 12 de diciembre, por lo que será dentro de muy poco.
He puesto en el repositorio Subversion del proyecto un script para generar el tarball de la versión actual en desarrollo (versión provisional) del Proxy Bluetooth y otro script para generar su paquete Debian. No es recomendable generar los paquetes de la versión en desarrollo puesto que ésta es inestable debido a que no está terminada ni probada del todo (por lo que no se garantiza su correcto funcionamiento), pero he puestos los scripts para facilitarme la vida cuando quiera empaquetar las versiones finales a liberar y para que quien quiera tenga la posibilidad de empaquetar los componentes del proyecto en cualquier momento.
Como en cualquier proyecto de gran envergadura lo primero que debemos hacer es un boceto de la arquitectura del sistema. Aquí tenemos el boceto de AcoMaT. Podemos observar que el Asistente obtendrá información de las fuentes indicadas en la anterior entrada y generará información para el alumno y para los profesores. Además de esto el sistema hará más sencilla la vida académica del estudiante ya que, por ejemplo, si necesita hacer algún trámite como puede ser la petición de beca, el asistente indicará la dirección electrónica o dará la opción de descargar las solicitudes en un formato electrónico.
En próximas entradas explicaremos con más detalles los objetivos que persigue AcoMaT, la tecnología que usaremos para implementarlo y las funciones que ofrecerá.
Este blog ha sido creado para ir mostrando las actualizaciones del videojuego de piano desarrollado por Javier Rengel , el cual dispondrá de contenido online que podreis encontrar en esta misma página.
Una vez que el fin de la carrera está más cerca. He retomado el proyecto con más ganas que nunca (Como si fuese mi única obligación hasta el momento) Aprovechando la ocasión, he decidido incluir el proyecto en el 5º … Continue reading →
Today I updated this blog using the plugin Language Switcher for wordpress. It allows to change the language of the blog clicking the flag at the right top of this page. I need to duplicate the php files to make … Continue reading →