miércoles, 27 de febrero de 2013

Tarea #4 - Visión(LAB) - Detectar diagonales - Python

Que tal para esta entrada tenemos que hacer un .py que detectara la lineas diagonales de una imagen.

Para esta tarea me base en la tarea anterior(detectar lineas rectas) pero con unas cuantas modificaciones sencillas.

Se trabaja de la misma manera, calcular los gradientes "X" y "Y" para cada pixel y con ello calcular su  angulo(THETA) y por ultimo(RHO).

Una vez que tengas THETA y RHO estos se acumulan en una lista y si otro pixel tiene una pareja identica esta se va incrementando en uno, al final tendremos una lista CASI proporcional al tamaño de la imagen de la cual solo seleccionaremos las mas votas(que significa que es una recta).

Para esta tarea cambie el diccionario que tenia por una lista porque lo estaba usando de una manera tonta que lo unico que lograba era que hiciera mas comparasiones de las normales. Los diccionarios son mas rapidos que las listas, siempre y cuando se usen correctamente, su desvantaja es que ocupan mas memoria.



Resultados:

original

salida
REFERENCIAS


http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/2013.html (teoría)
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/histograma.py (código python)

martes, 26 de febrero de 2013

Tarea #3 - Vision(LAB) - Detección de lineas - Python

Que tal, para esta entrada se nos encargo hacer un .py que fuera capaz de detectar lineas horizontales y verticales y pintarlas de color rojo.

Para hacer esto se uso el algoritmo de Hough, el cual dice que se recorre toda la imagen pixel por pixel, cuando se detecta un pixel tipo borde, se calcula su RHO y su THETA y se agregan a un lista, si otro pixel vuelve a tener los mismo valores entonces se va acumulando(votando) al final los pixeles mas votados son lo que forman una linea recta.

Para hacer esto se tiene que tomar en cuanta varias cosas, por ejemplo y lo principal, el calculo de RHO y THETA, que los libros nos dicen, mas bien nos muestran la sig. formula.

formula para RHO

donde "x" y "y" son la coordenada del pixel actual y THETA es el ángulo que se forma del Punto de origen(tu lo eliges) hasta el pixel actual y se calcula con la siguiente formula.

formula para THETA

Con esta formula la teoría nos dice que por cada pixel tendremos finitas lineas rectas que crucen por el pixel actual, pero solo tomaremos en cuenta aquellas rectas que tengan un pixel tipo borde como vecino. Aparte de eso, tendremos que llamar o sumar o votar como lo allás entendido mejor, por los mejores candidatos(pixeles) que formen una recta.

Basta de teoría..... pongamos en practica todo lo anterior.

Lo primero que necesitamos en sacar "gx" y "gy" para poder calcular THETA, para esto usamos los gradrientes obtenidos del operador sobel(o cualquier otra mascara) y el calculo de THETA seria "relativamente fácil" :| y una vez que tengas THETA tendrás que normalizarla, también "relativamente fácil" :|

pero bueno, este es la función que lo hace, y los resultados que arrojan los podrán ver un poco mas abajo de esta entrada.



Resultados....

Original


Salida

El programa aun genera mucho ruido y existen pedazos de linea que debería detectar y no lo hace pero en la próxima entrega lo arreglare.


REFERENCIAS

http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/2013.html (teoría)
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/histograma.py (código python)

lunes, 25 de febrero de 2013

Ubicuo #4(LAB) - Una critica constructiva

Alarma inteligente para auto.

La entrada a la cual hago la critica la pueden encontrar aquí.
Ellos en su entrada a base a las encuestas realizadas nos comentan que lo mas viable es un celular como hardware de seguridad.

En lo personal esta idea es perfecta, así te olvidas de estar cargando llaves, tarjetas o cualquier otrao dispositivo pequeño que se pueda perder fácilmente.

Ventajas y Mejoras - Mi punto de vista.

El celular en caso de perderse bastara una llamada para localizarlo y no perder tiempo en estar buscando las llaves porque olvidamos en donde lo guardamos.

El celular ya por ser parte de nuestra vida diaria, podemos configurarlo como nosotros queramos, y si agregamos el bloqueo/desbloqueo por patrón este tendrá una combinación 90% segura.

De las mejoras...
Hacer que carro detecte al celular dentro un rango, y que si el carro no detecta en celular dentro de ese rango, que este no se mueva(no encienda motores).

Colocar un especie de lector en las puertas para que el carro se abra colocando el celular en el sensor.

Para abrir las puertas desde lejos...con el celular enviar instrucciones que el auto pueda interpretar, por ejemplo cuando mandas a tu hijo a sacar una mochila, presionar solo un botón y que este se abra o se cierre.


Seguridad en la computadora

Aqui la liga a la entrada

Esta es una idea estupenda, pero hay que tener varias cosas en cuenta, por ejemplo no podrás prestar la PC a gente de "confianza" al menos que estés con ella en todo momento para desbloquearla es caso de que sea necesario.

También el programa que desarrollen tiene que estar iniciando de forma automática cada ves que inicia el ordenador ya que si por X razón logran saber tu contraseña este sea el quien proteja a tu equipo.

También si lo hacen con reconocimiento de algún tipo de software que este ya lo incluya la PC es muy molesto estar cargando con hardware cada vez que quieras desbloquear tu PC.

Pero la idea me gusta mucho es que la PC se bloque sin presionar alguna tecla o que al presentir que estas cerca se desbloquee servirá demasiado.

Rastreo por GPS

Aqui la liga a la entrada

Esta es una idea terrorífica, pero necesaria. Muchas veces queremos saber la posición exacta de alguien, pero esto da miedo cuando somos el objetivo de alguien.

Esta es una idea genial para el FBI cuando están siguiendo a un delincuente, o quieren seguir el rastro de algún paquete, este tipo de aplicaciones es muy riesgosa que salga al mercado, ya que puede ser usada en nuestra contra y con consecuencias graves.

Tal vez si la tecnología contara con un botón de encendido y apagado y al momento de quererla desactivar este envié un mensaje al rastreador para que autorice la desconexión, estaría un poco mejor y menos riesgosa.

Galería inteligente

Esta idea es inovvadora ya que en el país aun no contamos con este tipo de galerías y seria bien explotarlo, pero como todo lo nuevo, esto siempre trae sus pros y contras, por mencionar algunos tenemos que si al iniciar una grabación por estar enfrente de la escultura te aburres entonces la grabación seguirá corriendo y la siguiente persona que llegue tendrá que escucharla desde donde se quedo y no desde el inicio, ademas de que demasiada tecnología puede asustar a la gente y esto puede ocasionar perdidas en vez de ganancias.

Una vez que el producto allá salido a, un museo por ejemplo, este tendrá que tomar muchas restricciones por ejemplo, hay que tomar en cuenta si el usuario usara su celular como llave, o el museo proporcionara llaves únicas, ademas si se agregan pantallas estas seria lo mismo que una nota, pero con luz.

Esta idea tiene MUCHAS cosas que tomarse en cuenta antes de que sea lanzada como prototipo.

Cama inteligente

Aquí la entrada a la critica.
Presiento que esta idea tendrá mucho éxito :3, yo la usaría.

De las cosas que veo que le faltan mejorar es por ejemplo, cuando se te antojo un sueño en la tarde, y se te olvide poner alarma sera un poco gorroso levantarte a configurar tomando en cuenta el grado de sueño que tienes.
A mi se me facilitaría algo como una aplicación en el teléfono en donde tu por colores o por etiquetas tengas que programar la alarma... por ejemplo tengo una interfaz de horas de sueño para cuando solo necesito descansar pero no quiero dormir toda la tarde, yo presionaría unas 2 veces a un botón "rojo"(por decir un color) y a las 2 horas el sistema me levantaría.

En las mañanas, el sistema ya tendría configurado las alarmas y no tendría problemas en levantarme, pero cuando la siguiente día no vaya a trabajar o estudiar pero el sistema tiene una alarma, tu en la noche tengas un botón de "apagar todo" para dormir como "oso" sin interrupciones de alarmas "falsas".


Casas inteligentes
Aquí la liga a la entrada.

Esta propuesta es de las mas ambiciosas y de las mas grandes en sentido de todo lo que abarcara. Como dicen ellos lo principal serian la seguridad en las puertas, y combinado con algún sensor de presencia esto estaría perfecto, por ejemplo, en caso de no detectar a nadie este cerrara puertas, cerrara tuberias de gas o agua, cortara la luz de algunos aparatos y tuviera un especie de monitor que lee todos los sensores y que puedes ver desde Internet y ademas controlarlos.

También la parte del reciclaje, por ejemplo el agua de los lavamanos, o incluso el agua de la regareda vayan aun deposito de purificación y descontaminación y se vuelvan  reciclar, la única agua que vaya por así decirlo al drenaje fuera la de los sanitarios.

Para la parte de la casa, estaría genial contar con sistema anti-robos, donde deje encerrado al ladron y la casa suelte algún especie de humo que hace que te duermas o que lo electrocute al momento de tocar la chapa de una puerta, todo esa estaría bien.


Llave inteligente para autos


Esta es una idea un poco mas de los mismo, actualmente existen carros chinos que se manejan un una llave con sensor RFID, si el sensor esta dentro del rango el carro abre puertas, baja ventanas, etc. y la llave la puedes tener en los bolsillos. Tal vez que el celular funcione similar a esta llave puede facilitar muchas las cosas porque así te evitarías estar cargando mas aparatos pequeños que se pueden perder fácilmente.

También al momento de estar manejando que la música se sincronice con la biblioteca del celular, para no tener que estar conectando nada, y lo único que tendríamos que hacer es presionar al botón de ON o OFF.

Garage inteligente

Aqui la liga a la entrada de critica.

Esta es una idea genial, porque actualmente lo único que queremos es perder tiempo, esperando a que la puerta se termine de abrir o bajarnos del carro para abrir la puerta, estaría bien que la puerta se abriera siempre que detecte al sensor dentro de un rango... por dar un ejemplo a 10 mts, siempre que detecte al carro hasta 10 mts, este empiece abrir las puertas para no perder tiempo esperando.

Combinar por ejemplo varias ideas, la idea de el código QR esta genial porque así le puedes dar permiso a otra gente que no cuente con el sensor a accesar a tu cochera. Y así no tendrías que estar físicamente dentro del rango para que cochera se pudiera abrir.

jueves, 21 de febrero de 2013

Tarea #2 - Métodos de acoplamiento de texto

Que tal para esta entrada se nos encargo hacer un .py que buscara un patrón en un texto e hizieramos un reporte como conclusiones.

En clase vimos temas de búsqueda de patrones mas aparte escribimos uno en clase y nos llevamos 2 de tarea el Boyer-Moore y el Morris-Pratt. Así que si mas rollo aquí esta el código.

BOYER-MOORE
Es el mejor sistema de búsqueda de patrones en un texto, lo que las comparaciones no las hace 1 por 1 este hace un brinco según... la llamaremos tabla de saltos, para ir descartando palabras en donde no se encuentre el patrón.


La tabla lo que hace es sacar los indices de cada letra del patrón empezando de izquierda a derecha, cuando alla terminado a esa lista de patrón se le agregaran todas las letras del texto que no aparezcan en en patrón e ir contando su indice, NOTA: esta lista no puede contener letras repetidas.

Supongamos que tenemos el texto "GCATCGCAGAGAGTATACAGTACG" y el patrón "GCAGAGAG" entonces la tabla de saltos quedaría de la siguiente forma:

y el pedazo de codigo en donde lo hago es este:


Una vez que tenemos la tabla de saltos lo que procede es aplicar el algoritmo... el cual me base de esta pagina



Knuth-Morris

Este es un poco mas sencillo a cuanto de programación se trata pero no es recomendable porque itera por cada letra del texto buscando el patrón. En caso de equivocarse  salta las veces que tubo que comparar haciendo muchas, pero muchas comparaciones.



Reporte 

Ahora para que quede un poco mas gráfico cual es mejor, corrimos varias veces el .py con largos deferentes de patrones y texto para ver en cuantas iteraciones tardaban en recorrer el texto.

Knuth-Morris

Boyer-Moore

En las gráficas podemos observar que el incremento de Morris es casi similar a la longitud del patrón  en cuanto a Boyer como hace brincos(por así decirlo) estratégicos este tarda casi la mitad del longitud del texto para recorrerlo todo y encontrar llaves en caso de tenerlas.

El cogido completo lo pueden encontrar en mi git.


REFERENCIAS
http://www-igm.univ-mlv.fr/~lecroq/string/node14.html
http://www-igm.univ-mlv.fr/~lecroq/string/node8.html

martes, 19 de febrero de 2013

Tarea #3 - LAB Redes - Cobertura de imagenes con Wavemon

Que tal, para esta semana se nos encargo un mapa sobre las coberturas de red WIFI que detectamos a nuestro al rededor, yo tome como base los router al rededor de mi casa.

Lo primero fue sacar la calidad de la señal de las redes que puedo detectar, esto es muy fácil con wavemon.

Wavemon, nos dice la calidad como la intensidad con la que nos llega la señal y solo basta con escribir "wavemon" en la terminal; así que analizamos las que tenemos alrededor...

Mi casa

Vecino #1

Vecino #2

Vecino #3


Vecino #4

Ahora que ya teníamos la calidad tenia que saber a cuanta distancia estaban los demás módems.

Primero "medí" la distancia de mi cuarto a la sala, que es donde hice la prueba a donde esta el módem.  Fue aproximado y el calculo fue "mental" porque no puedo atravesar paredes así que fue aproximadamente 4 metros y la calidad que me daba(38), para las demás las calcule con regla de 3 simples para saber maso menos en donde estaban localizados.

Ya lo único que faltaba era sacar su rango, así que me estuve moviendo hasta donde lo dejara de detectar para sacar su radio y solo fue cuestión de unas cuantas multiplicaciones para sacar el rango total.

Ahora solo lo marcamos en el google maps para visualizarlo mejor.



El circulo amarillo es el rango de mi casa, los demas son las redes que use para pruebas.


lunes, 18 de febrero de 2013

Tarea #3 - LAB Ubicuo - Campos de estudio

Que tal gente para esta entrada se nos encargo hacer un resumen de los campos de estudio

Esta es una de las formas de retroalimentación que mayor valor tienen, un par se semanas dedicado al estudio puede tener al equipo desarrollador por meses trabajando. 

El poder de los campos de estudio.
Una platica, una visita, una simple observación pueden producir un enorme valor al sistema a desarrollar de los cuales podemos aprender:
  • Terminologia y procesos: ¿Que es lo que hacen los usuarios, como hablan de ello? Los usuarios pueden describir un procesos o dar sus puntos de vista en entrevistas, viéndolos trabajar nos enseñan y aprendemos de cosas que hay están pero que no estamos tomando en cuenta.
  • Contexto: ¿Cuales son las causas externas que afectaran al diseño? Las necesidades del usuario cambian cuando se esta llegando la fecha limite. La gente tiene problemas para describir el contexto de su trabajo, sin embargo, es fácil, para los de afuera observar. 
  • Similitudes y diferencias: Investigar a varios sitios, productos permiten al equipo obtener una cantidad  importante de información sobre los puntos en común, sobre las diferencias que afectan al diseño. Juntamos la lista de diferencias y similitudes, observarlas y compararlas pueden llevar al equipo a enfocarse mejores en las criticas y los requisitos del proyecto. 

Los estudios de campo darán información que el equipo simplemente no puede obtenerla de otra manera.
  • Los desarrolladores/usuarios no pueden describir las actividades en las que se encuentran. Cuando alguien tiene publico entran variantes por ejemplo el nerviosismo y/o variaciones que hace que no pongamos atención en los pequeños detalles. Pero un observador externo con la mente un poco mas despejada puede darse cuenta de varias cosas o detalles que el al desarrollador/usuario no puede a simple vista.
  • La innovación se produce cuando los diseñadores cuando conviven con los usuarios y estos alteran su forma de ver las cosas de forma accidental. Algunos  de los diseños mas innovadores de los últimos 5 años son el resultado de prestar atención a los pequeños detalles al usuario.
  • Interfaces intuitivas son las mas fáciles de construir y que los diseñadores tienen un conocimiento profundo del contexto de los usuarios, la terminogia y los procesos. Esta combinación que componen a una interfaz intuitiva es la mejor para el usuario una vez terminada.

Las organizaciones mas exitosas miran mas allá del proyecto actual, al darse cuenta que el valor de la información obtenida se utiliza en los futuros proyectos. Con esta perspectiva, amortizar los costos a través de muchos proyectos de desarrollo y se convierte en un método muy rentable para la recompilación de información critica.

Cuando nos fijamos en como los diseños mas utilizables fueron desarrollados, vemos algo en común en todos los equipos implicados: todos tenían la información critica que necesitan para crear estos resultados increíbles. Los campos de estudio son la técnica mas eficaz que se usa para conseguir información critica. 

Tarea #3 - Clase - Redes Telecomunicaciones - Sniffear con Xplico

Que tal para esta entrada se nos encargo hacer un ataque WIFI, yo elegí la tarea Sniffear para saber que exactamente es lo que estas viendo.

Equipo necesario
  • Ubuntu 12.10 aunque cualquier otra versión debería funcionar igual.
  • Herramienta Xplico 
  • Servidor Web(apache)
  • gdebi

Instalación

Para poder usar esta herramienta es necesario tener instalado un servidor web, yo ya tenia instalado apache con php5 así que trabajare con el. Si no lo tienen basta con una linea para instalarlo:


Ahora descarguemos Xplico desde su pagina oficial aquí. Como comentario descarguen el ".deb" es mas sencillo de instalar. Para instalar ".deb" solo basta con 2 click arriba del archivo, pero mejor vayamos a la segura instalemos gdebi:


Ahora ya podremos instalar el paquete con toda seguridad bastara con escribir:


y como ultimo tenemos que iniciar nuestro servidor web y después el servidor Xplico:




Ahora si, a Sniffear!!!!!!!!!!

Con nuestro explorador y escribimos la siguiente dirección


nos aparecerá una pantalla como la siguiente


El usuario y host por default es xplico.

Lo primero que tenemos que hacer es crear un nuevo caso en el menú de la izquierda.
Una vez dentro seleccionamos la opción "Live acquisition" y agregamos el nombre y un comentario de referencia(opcional).
Nos aparecerá algo como esto:


damos crear y se mostrara la sig. pantalla:

Ahora hacemos click en nuestro caso, y en la pantalla siguiente en el menú izquierdo seleccionaremos "New Session", pondremos un nombre y daremos "Crear".
Después hacemos click en nuestro caso, aparecerá una ventana nueva donde verán las estadísticas hasta el momento. Lo que nos importa ahora es escoger la interfaz con la que queremos hacer sniffing y damos start, aparecerá un mensaje de Listening at interface: wlan0 


Después de esto solo tenemos que esperar hasta que creamos que esta listo damos Stop y podremos ver todo lo que se capturo. Vamos al menú izquierdo en la pestaña WEB-SITE y podrás observar toda la lista de las paginas visitadas ;) entre MUCHAS cosas mas.


Yo solo lo he dejado activo durante varios segundos por eso la lista es MUY corta, pero puedes dejarlo toda una noche, todo un día y checar el historial de paginas y muchas cosas mas, por ejemplo inbox de Facebook


Hasta aquí la entrada, espero un día leer un poco mas, con un poco mas de tiempo y hacer entradas de este tipo.

jueves, 14 de febrero de 2013

Tarea #1 - Métodos de codificación - Canal de comunicación

Que tal para esta entrada se nos encarga hacer un ".py" que simulara la  transmisión de una palabra binaria.

La idea es generar aleatoriamente una palabra binaria con una densidad de apariciones de ceros o unos definida por el usuario(parámetro de entrada).

Después esa palabra pasa por un canal, el cual tenia que identificar si se envía un cero o un uno, base a eso, y con ayuda de la tabla Q, decidir si recibe un 0 o un 1 y estar guardando ese resultado.
Después de eso compara si la palabra original es igual la palabra resultante, se incrementa el contador de éxito. Este contador no ayudara a sacar la probabilidad de éxitos.


Parámetros


Generador de palabras  binarias:



Transmisor



Comparador



El archivo regresa el porcentaje de éxito que tuvo la palabra a través del canal.



Código completo. 

Estadísticas

 :|





miércoles, 13 de febrero de 2013

Tarea #2 - LAB Visión - Sal y Pimienta - Procesamiento de imagenes - Python

Que tal para esta entrada se nos encargo modificar o agregar a nuestro código, una rutina que agregara degradación por adición de ruido(Sal y pimienta) base a dos parámetros:

  • Intensidad = que tanto porcentaje de la imagen se le agregara sal y pimienta
  • Polarización = que tan negros/blancos se pone un pixel seleccionado.
y otra rutina que quitara filtrara ese ruido.

Antes de comenzar
Mi programa se esta empezando a poner "FEO" son demasiados métodos y por cada tarea esta creciendo considerablemente, pese a esto, esta sera la ultima entrada que estaré modificando este código, el las siguientes trabajare por clases. 

El los avances de la tarea están en mi github.

Un poco de teoría
Les comparto información de relevante que me ayudo a despejar dudas, al final de la entrada en el apartado de REFERENCIAS pondré los links de TODA esta información.

El RUIDO en las imágenes es un deterioro que se puede producir debido a:
  • Pixeles perdidos en un sensor CCD
  • Cuando se comprime o transmite la imagen
  • Inadecuada iluminación de la escena
  • Escáner de documentos
  • Sensibilidad inadecuada de las cámaras, etc.
y su formula:

Para quitar este ruido existen varios métodos:
  • El de la Media(yo utilice este)
  • Media Contraharmonic
  • Mediana
  • Máxima
  • Media de sección
  • Laplaciano
  • Punto medio
  • y otros  
ahora que ya sabemos que es y como quitarla, estamos listos para la explicación.

Explicación

Para la rutina de generar ruido. Mi función recibe 3 parámetros:
  1. pixeles: esta una listas de listas que contienen los valores de todos los pixeles de la imagen.
  2. INTENSIDAD: es un float entre 0 y 1, este es el porcentaje de sal y pimienta en la imagen(mientras mas cerca a 1 mas sal y pimienta)
  3. POLARIZACION: es un float entre 0 y 1, este es que porcentaje de que tan negros o blancos se pone un pixel seleccionado.
En donde lo que hago es recorrer todo los pixeles de la imagen; dentro del FOR compara la INTENSIDAD con un numero RANDOM entre 0-1; si cumple la condición aplicamos POLARIZACION si no el pixel se deja como estaba.



Después aplicamos el filtro de la MEDIA, este método trata de sacar la MEDIA de los pixeles vecinos incluyendo también el pixel actual, las definiciones siempre se entienden mejor con ejemplos.

imagen de 3x3 pixeles

  • Pruebas de escritorio:
    • Para el pixel #1 y sus vecinos:
      • Media pixel #1 = 2
      • Media pixel #2 = 5
      • Media pixel #4 = 11
      • Medio pixel #5 = 14
    • Media de los seleccionados = 8(nuevo contenido del pixel #1)
    • Para el pixel #2 y sus vecinos:
      • Media pixel #2 = 5
      • Media pixel #1 = 2
      • Media pixel #3 = 8
      • Media pixel #4 = 11
      • Media pixel #5 = 14
      • Media pixel #6 = 17
    • Media de los seleccionados = 8(nuevo contenido del pixel #2)
    • Y así consecutivamente hasta terminar con los pixeles de la imagen

Una aclaración antes de mostrar mi código... tuve problemas con los vecinos en diagonal y no me dio chanse de corregirlo, únicamente tome los vecinos en forma de cruz, aunque no es tan perfecto como se esperaba los resultados son notables.


Resultados
CON SAL-PIMIENTA  =>  INTENSIDIDAD = 0.1 & POLARIZACIÓN = 1.0

SIN SAL-PIMIENTA   =>    INTENSIDAD  = 0.1 & POLARIZACIÓN = 0.0

CON SAL-PIMIENTA   =>  INTENSIDAD = 0.9 & POLARIZACIÓN = 0.9


SIN SAL-PIMIENTA  => INTENSIDAD = 0.9 & POLARIZACIÓN = 0.9

Ejecución y tiempos

argv[1] => nombre de la imagen
argv[2] => método a utilizar
argv[3] => intensididad
argv[4] => polarización



El mismo ,py funciona para ambas tareas



Puntos extras

Esta tarea es la misma que lo que hicimos en clase #2(Normalizar y binarizar) así que pongo la liga a la entrada.

Aquí encontraran la explicación detallada.
http://4imedio.blogspot.mx/2013/02/tarea-1-vision-computacional-python.html


REFERENCIAS

liga 1
liga 2
liga 3


martes, 12 de febrero de 2013

Tarea # 2 - Lab - Infografico, protocolos de red


Tarea #2 - Clase - Protolos UDP Python

Los sockets UDP nos sirven para que la conexión no muera en caso de que un mensaje no llegue completo o no llegue totalmente, son muy útiles en chats, videoconferencias, llamadas telefónicas, etc, etc...

Reglas de este ejemplo:

El cliente lee un archivo lo fragmenta en partes de un largo de 10, cada parte se lo manda al server el cual se encarga de juntar las partes y cuando se cumple una condicion imprimir lo que que contenga esa variable en un archivo para liberar la memoria y volver hacer el ciclo.

Lo divido en 10 partes pero en realidad podemos hacerlo en cuantas partes queramos, el objetivo es que si se llegara a perder un mensaje, sea solo una parte y no todo completo..... el server lee lo que sea del cliente que sea.... el se encarga de formar los paquetes y cuando se cumpla una condición guardar en un .dat para liberar su memoria.


El server...


El cliente...

Capturas de Pantalla...


Es este caso, el mensaje es muy corto para guardarlo en un .dat así que se encuentra en memoria... ahora probemos con un mensaje un poco mas largo:


Cada ves que se imprime "GUARDANDO..." el server imprime en un .dat y libera la memoria que usa para recibir. Cada renglon en el cliente "<<" es lo que se envia.... es el texto fragmentado.


Como pueden ver el mensaje no llega del todo completo.... eso es lo que quería que vieran, que aunque no se envía bien la conexión sigue viva.


REFERENCIAS:

http://wiki.python.org/moin/UdpCommunication
http://www.ibm.com/developerworks/linux/tutorials/l-pysocks/section4.html
http://www.wellho.net/mouth/2695_TCP-v-UDP-Client-v-Server-Python-examples.html

domingo, 10 de febrero de 2013

Tarea #1 VIsión Computacional - Python, Convolución discreta


Que tal para esta entrada se nos encargo hacer lo siguiente:

Objetivo
1) subrutina para aplicar una máscara de convolución discreta, de preferencia centralizado al pixel en cuestión;
2) con esa subrutina, calcular por lo menos un gradiente horizontal y un gradiente vertical, posiblemente más o también diagonales, con la posibilidad de combinarlos al tiempo de calcularlos a uno solo o combinando entre múltiples matrices de gradiente una vez terminada la aplicación de todas las máscaras de gradiente:
a) normalización de la matriz resultante de la manera que perciben factible y útil a [0, 255];
b) binarización que deje los bordes como zonas blancas y el resto negro


Antes de empezar
Si están en blanco de que se tiene que hacer (como nosotros al principio) les recomiendo entrar a las siguientes ligas y se refresquen un rato, están muy bien explicadas.
http://docs.gimp.org/es/plug-in-convmatrix.html (español)
http://www.songho.ca/dsp/convolution/convolution2d_example.html (ingles)

El código completo esta disponible en mi git.


Explicación
Ahora supondremos que ya saben lo que se tiene que hacer, así que continuemos.

Lo primero que tenemos que hacer es sacar TODOS los vecinos del PIXEL ACTUAL, yo hice 2 rutinas, una para sacar los vecinos en forma de cruz(arriba, izquierda, derecha, abajo) y la otra para los vecinos en diagonales(izqArriba, derArriba, izqAbajo, derAbajo).


Cada vecino esta en un bloque TRY-EXCEPT, esto para capturar el error(asignar el vecino(pixel) a cero) y el programa no termine.

Como podemos ver, cada rutina regresa 4 valores. Ahora lo que sigue es juntar esas variables(yo lo hice en forma de lista) y después ordenarlas para que queden de la siguiente forma:

Imagen 1

Les muestro el pedazo de código en donde lo hago:

Ahora que ya tenemos la matriz de la forma "imagen 1", es fácil multiplicar por cualquier mascara de 3x3. Por que ambas matices(los vecinos ordenados y la mascara) tienen la misma cantidad de elementos y se encuentran CENTRALIZADO, a que me refiero con "CENTRALIZADO": que el PIXEL ACTUAL se encuentra en el centro de la matriz.

Ahora sigue lo interesante.... la multiplicación de matrices, normalización y binarización.

Como yo lo hice... 
Aclaración: Yo para no batallar tanto, en vez de trabajar con matrices trabaje con listas... digamos que es un amor suicida.

La convolución a grandes rasgos es una suma de las multiplicaciónes de la "matriz X" mas las sumas de cada multiplicación de la "matriz Y". Un poco mas técnico:

Donde
F  = es la nueva imagen
f = imagen original
x = pixel en el eje x de la imagen original
y = pixel en el eje y de la imagen original
g/h = mascara
i = pixel en el eje x de la mascara
j = pixel en el eje y de la mascara


Aquí el pedazo de código en donde lo hago...

Este es la función para normalizar y binarizar.
Donde:
MINN  = (int) = El mínimo pixel localizado hasta el momento
MAXN = (int) = El máximo pixel localizado hasta el momento
RANGO_BINARIZACION = (int) Dato de entrada entre [0- 255]

El programa y sus parámetros
 PARÁMETROS DE ENTRADA                            
argv[1] = (string)nombre de la imagen a procesar  
argv[2] = (int)Rango mínimo - para el umbral      
argv[3] = (int)Rango máximo - para el umbral    
argv[4] = (string) mascara a usar (sobel || prewiit)
argv[5] = (int)Rango para binarizacion            


Todos cuentan con bloque try-except por si los llego a olvidar.


Resultados 


imagen original


Con mascara SOBEL - [DIMENCIONES] 1160 x 547

Convolución con mascara SOBEL


Normalizacion - SOBEL

y sus tiempos:
Umbral este en "0.0" porque para esta prueba fue desactivada


Con mascara PREWIIT - [DIMENCIONES] 1160 x 547


Convolución con mascara prewiit
Normalización - PREWIIT
y sus tiempos



 Binarización
Binarizacion con rango 30

Binarizacion con rango 150


Comentarios
No me gustaron los resultados tal vez aplicando otra formula para normalización saldrían los bordes mas claros... y por lógica la normalización se observaría con bordes mas precisos :|

Otro camino: http://es.wikipedia.org/wiki/Operador_Sobel



REFERENCIAS: 
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/bordes.pdf
y las ligas al principio de la entrada.

viernes, 8 de febrero de 2013

Ubicuo #2(LAB) - Productos emergentes - Oficina personalizada

Que tal, para esta entrada hablaremos de los productos emergentes de las oficinas inteligentes.

Después de investigar un buen rato no encontré una organización como tal que ofrezca este tipo de servicios que estén a punto de salir y que se ofrezcan para renta-venta, tal vez Google podría entrar en esta categoría pero no necesariamente para renta-venta si no mas bien por que ellos cuentan con tecnología de puntamuebles ergonómicos, espacios motivadores para trabajar ademas de motivar el reciclaje, un pocas palabras Google es la oficina del futuro.


foto tomada de aqui

Mejor enfoquemonos en las tecnologías que dominaran el futuro que harán que la oficina revolucione totalmente. 

Los equipos de trabajo

Por la facilidad y para estar cómodo, los equipos de trabajo tiene que ser lo mas portátiles posibles, esto para ahorrar el máximo espacio y a la hora de hacer cambios estos se paren por el tiempo que toma mover todo de lugar. Para este tipo de problemas tenemos varias soluciones que a continuación presentaremos.

    • La "todo en uno" ESPRIMO X913 Touch.


"El Todo en Uno presenta un diseño ergonómico y presume de ofrecer un funcionamiento donde prima la seguridad y el ahorro energético. Integra procesadores de tercera generación Intel Core i3 o i5 y sus prestaciones táctiles le permiten ejecutar Windows 8 con soltura. En cuanto a su seguridad, el equipo incluye una solución de reconocimiento facial, chip de encriptación TPM y la función EraseDisk para hacer borrado de datos."                                                              Fuente original: aqui

Productos Apple 

Estos sin dudas son los mejores e innovadores productos del mercado, Apple también piensa en futuro y para eso ya tiene algunas ideas sobre equipos que ocupen el menor espacio posible. Esto es fundamental cuando se quiere hacer un "actualización(remodelación)" a tu lugar de trabajo, ya no tendrás que cargar demasiadas cosas y perder mucho tiempo lo que equivale a dinero perdido por "movimientos". 





Mesas de trabajo

Estas sin dudas han dado de que hablar, desde el tamaño, la forma, colores y si son o no ajustables. Pero  la que ha dejado de que hablar es la SURFACE de microsoft, con la cual puedes controlar imágenes con los dedos, saber características de un producto solo colocándolo arriba de la mesa y muchas otras mas.

"El precio actual de Microsoft Surface es de $10000 (€7450) por mesa, aunque Microsoft espera que el precio baje de aquí a cinco años, al punto que los podrás tener uno en tu casa. "



y base a esta idea nace otra "nueva" basada en la pelicula Minority Report...


 ...(de nuevo es el punto para microsoft) el cual es una pantalla pared. El articulo menciona:
"Como siempre, puedes mover todo como si estuviese físicamente frente a ti y si tienes una imagen en tu teléfono puedes exportarla a la "pantalla" solo apoyando el móvil en la pared.
Entre algunas de las nuevas cosas se encuentra una especie de inteligencia artificial que funciona como un secretario. No estamos seguros si es una demostración de lo que piensan hacer o si realmente funciona (algo que dudamos seriamente). También hay micrófonos integrados, que permiten tener una videoconferencia con compañeros de trabajo." Articulo completo

Sensores

Leap Motion

Control de la computadora con gestos, es para muchos el futuro y un sensor como este en una oficina sin duda seria exprimido al máximo, el confort de no tener que tocar botones, el controlar todo con un simple movimiento es lo de "moda".  Leap es un sensor segun algunas fuentes 300 veces mas preciso que el kinect de microsoft.

"Consistente en un pequeño dispositivo que sirve para detectar gestos y movimientos corporales, a modo de poder controlar acciones en una computadora al estilo Microsoft Kinect.
El sistema se complementa con el desarrollo de aplicaciones y herramientas pensadas por programadores de todo el mundo."



Carga de baterías por inducción

La carga por inducción podría describirse también como cargar las baterías de los dispositivos de forma inalambrica. Ya no tendremos que cargar nuestro cables nunca mas, esto seria útil cuando en la ofina no cuentas con el tiempo suficiente o se te paso cargarlo por "x" razón, pues esta es una solución magnifica.





REFERENCIAS

http://www.elplanetaurbano.com/index.php/secciones/deco/item/401-las-oficinas-del-futuro
http://www.pymesyautonomos.com/reflexiones/como-sera-la-oficina-del-futuro
http://www.neoteo.com/microsoft-surface-la-mesa-interactiva
http://www.neoteo.com/microsoft-y-la-oficina-del-futuro 
http://www.fayerwayer.com/2013/01/asus-integrara-control-por-gestos-al-estilo-kinect-en-sus-computadoras/
http://www.nosolounix.com/2010/04/carga-de-baterias-por-induccion.html