martes, 30 de abril de 2013

Lab #9

Alarma Inteligente

Sobre la alarma inteligente en mi opinión van muy bien las pruebas que se estuvieron realizando faltaría ver como se comporta lo del gps que les falta por incorporar y ver si se podrían hacer algunas pruebas sobre esto también para ver como responde y como lo toman los usuarios.


Computadora Inteligente

Para este proyecto habría que mejorar la amigabilidad que tendrá la interfaz con el usuario, sobre todo evitar que falle la detección del usuario real y valla a estar teniendo problemas con esto lo que terminaría por hacer que se dejara de usar el programa en si.



Oficina Inteligente

Para el equipo de la oficina inteligente me pareció muy buena la presentación que tienen hasta ahora de como se vería creo que era algo como la interfaz y es importante tomar en cuenta los puntos que tocaron sobre que los mismos trabajadores puedan editar sus perfiles sin ocupar gran conocimiento sobre computadoras.


Despertador Inteligente

Mi sugerencia para este equipo es que tomen en cuenta la reto-alimentación que recibieron en su ultima presentación  sobre los tonos de la alarma si son muy molestos la gente dejara de usar la aplicación y optara por otro despertador, aunque la idea sea despertar no tiene que tener un sonido molesto, estaría bien una opción de poder elegir música favorita o algo por el estilo para despertar cada quien dependiendo del sonido que sea de su agrado.


Casa Inteligente

Para casa inteligente por experiencia propia sugiero ir buscando el material que usaran ya que lo de conexión bluetooth puede llegar a ser bastante conflictivo dependiendo del modulo que vallan a usar por lo que seria bueno comprarlo de una ves y realizar pruebas para ver si funciona del modo que ellos lo ocupan sino al final tendrán problemas.



Car NxP

En mi opinion este equipo va muy bien, han avanzado bastante y están incorporando detalles de usabilidad los cuales son importantes para su proyecto.


Garage Inteligente

Para el garage inteligente faltaría aclarara alguna opción de acceso en caso de que no haya luz como los garages eléctricos que se pueden levantar con facilidad sin luz ademas de aclarar un poco mas el tema de seguridad.

jueves, 25 de abril de 2013

Run-lenght encoding(RLE)

El método run-length encoding es uno de los algoritmos mas simples de compresión de datos sin perdida, aunque solamente es efectivo en cadenas muy repetitivas o de gran aparición, seria útil para algunas imágenes animaciones pero en archivos que no son muy repetitivos probablemente tenga un efecto negativo y incremente el tamaño embez de comprimirlo.

Para el ejemplo usare la cadena:

MMMMMMMMMMMMMMMBBBBBFFFFFSSSSMMMMMMM

Compresión

Para la compresión lo que hay que hacer es ir contando las letras que se repiten en la cadena y poniendo el numero de repeticiones después de ella hasta que ocurra un cambio a otra letra y repetir el proceso.

15M5B5F4S7M

Esto reduce una cadena de 36 caracteres a 11 caracteres, si bien no aplica para todos los casos en algunos ejemplos podría ser bastante útil por ejemplo una foto en blanco y negro solo contiene 2 tipos de valores que se repiten a lo largo de toda la imagen por lo cual este método seria bastante útil.

Descompresión

Para la descompresión es muy simple ya que es bastante intuitivo el método por lo que solo hay que quitar los números y poner la letra de la derecha el numero de veces que este señalado. Volviendo a la cadena original.

Se utiliza el diccionario que se genero donde se contiene la cantidad de repeticiones de cada letra
15M5B5F4S7M

MMMMMMMMMMMMMMMBBBBBFFFFFSSSSMMMMMMM

Fuentes




Codigo Adaptativo-Huffman

La tarea de esta semana para la clase de teoría de información consistió en idear alguna forma de compresión Huffman de una manera adaptativa. Esto quiere decir que el programa no tiene como entrada la frecuencia de las letras y los datos que requiera los generara por si solo.

El método que intente implementar es bastante sencillo no se realmente si este bien lo que hace es en base de palabras que se den como entrada primero se dividen las letras se obtiene su frecuencia se ordenan y se genera un archivo donde se almacenan las letras divididas y su aparición esto sera utilizado mas adelante.

Una ves que se recorren todas las palabras y ya se tienen todas la frecuencias se binariza cada letra según su frecuencia y esto se almacena en otro archivo para después poder decodificarlo.

El código no esta terminado pero esa en si es mi idea falta agregar el cambio a binario y decodificarlo.

En cuanto a pruebas habría que ver que tan eficiente resulta en cuanto a tiempo de compresión y decompresion con palabras largas y cortas talves cambiando para tomar archivos de texto como entrada y así poder probarlo mas fácilmente  ademas de ver si realmente la compresión en cuanto a peso de archivo es efectiva o no esto cuando este terminado realmente ._.

miércoles, 24 de abril de 2013

Gráficas-Histogramas Lab Vision

La tarea de esta semana para lab de Visión Computacional consistió en realizar gráficas de intensidad en base a los histogramas tomados de la tarea anterior, esto nos sirvió para poder detectar los agujeros en la tarea anterior.  Para realizar las gráficas utilice gnuplot y los datos generados con el programa anterior.

Para generar los histogramas se creo el siguiente código:


Esto nos genera archivos .dat con 2 datos primero el pixel revisado y su intensidad quedando el archivo con el siguiente formato:




Para no ser tan repetitivo código relevante para generar todo esto y los cruces todo esta publicado en la entrada de clase:
http://m8sem.blogspot.mx/2013/04/deteccion-de-agujeros.html


Para las gráficas simplemente se realizo un script que se llama desde el código y nos genera las gráficas según sean los datos de los archivos .dat:


Ejemplos





 


 















martes, 23 de abril de 2013

Lab #8


An Evaluation Of The Comprehensibility and Usability Of a Design Method For Ubiquitous Computing Applications

Technical Report
Giovanni Iachello, Gregory Abowd
College of Computing and GVU Center
Georgia Institute of Technology
August 17, 2005

https://smartech.gatech.edu/handle/1853/8449

Introducción

En los últimos años se han propuesto diseños que ayudarían en la lucha contra la privacidad y problemas relacionados a la seguridad de las aplicaciones de computación ubicua. Se han llevado a cabo extensos estudios sobre el tema que han demostrado la deficiencia que se tiene en este campo. En un estudio que se presenta en este pdf se realizo con 6 estudiantes de posgrado, en este los estudiantes tuvieron  la opción de utilizar un método de diseño para completar un ejercicio.  Los investigadores analizaron las entregas escritas con indicadores cuantitativos y
se realizaron entrevistas de seguimiento. Los resultados sugieren que el método de diseño es comprensible y utilizable por diseñadores sin experiencia. Los participantes comentaron que el método podría ayudar especialmente en el diseño de los aplicaciones exploratorias con los interesados ​​divergentes, la ampliación de la cobertura del proceso de diseño y generando razones más fuertes para las decisiones de diseño.

Proceso a seguir en el estudio


El objetivo de este estudio fue el de la verificación de los siguientes dos tesis:

1. El método de proporcionalidad es comprensible y utilizable por los diseñadores sin experiencia.
2. Diseñadores inexpertos llegan a conclusiones similares como diseñadores experimentados. La hipótesis es que iban a identificar a los mismos problemas de diseño principales y llegar a conclusiones similares sobre estas cuestiones como los diseñadores expertos.
Se contrataron a tres grupos (de dos estudiantes cada uno) La contratación se hizo mediante el envío de mensajes de correo electrónico de las descripciones de los dos proyectos a toda la clase, antes de una conferencia en la que se hizo el reclutamiento.


Se pidió a cada grupo para diseñar (no aplicar) la gestión de la información, las políticas de organización y la privacidad y los aspectos de seguridad sensibles a la de la interfaz de usuario de un sistema de apoyo a la respectiva aplicación. Se pidió a los grupos para justificar sus decisiones técnicas de diseño y de organización y
legislación de referencia, la regulación local y otras políticas, según proceda. Además, se alentó
seguir el método de diseño de proporcionalidad por el análisis de la seguridad y los requisitos de privacidad. El uso de el método de diseño no es obligatoria, sin embargo. Se pidió a los participantes para justificar su elección si optado por no utilizar el método.
Al comienzo del estudio, cada participante firmó los formularios de consentimiento y completó un cuestionario evaluar su experiencia con técnicas de ingeniería de requisitos, estándares de seguridad de la información, la legislación y el dominio Ubicomp.

Resultados


Se identificaron 10 indicadores cuantitativos para evaluar la integridad de los informes finales escritos (que no considerar las presentaciones orales en este análisis). Estas métricas se basan en el número de ocurrencias de los siguientes elementos de análisis:

  •  Las amenazas expresadas;
  •  Escenarios de uso;
  •  Comparaciones con otras aplicaciones similares ya existentes;
  •  Grupos de interés identificados;
  •  Los requisitos establecidos;
  •  Opciones de diseño establecidas;
  •  Problemas de diseño abierto (es decir, puntos de diseño que se han planteado por los participantes, pero no hay ninguna conclusión se alcanzó, en espera de más información o de la verificación de alguna otra hipótesis);
  • Componentes de la arquitectura del diseño;
  • Los elementos específicos de la legislación hace referencia;
  • Indicios de la necesidad de evaluaciones más (por ejemplo, nuevas encuestas, entrevistas, etc.)










Detección de agujeros

Para esta semana la tarea consistió en la detección de agujeros a partir de una imagen, esto es importante ya que existen muchas maquinas que realizan procesos parecidos como el corte de metal por medio de lazer entre otras cosas en la industria. El proceso para realizar la tarea consistía en elaborar un histograma para detectar en una imagen por medio de lineas verticales y horizontales los posibles agujeros en la imagen, una ves hecho esto había que repintar el agujero y etiquetarlo.


Lo primero que se hizo fue elaborar los histogramas separando los pixeles verticales y horizontales y almacenando toda esta información en 2 archivos .dat para utilizarlos posteriormente ademas que esto sera util para la tarea del laboratorio de esta semana.


Esto nos genera 2 archivos .dat con información de esta manera:
 

Ya con los 2 archivos .dat generados, procedemos a sacar los mínimos de los mismos datos obtenidos:


Posteriormente dibujamos las lineas que nos marcaran las intersecciones en la imagen:


Ejemplos






Al principio tuve problemas con algunas imágenes y en algunas se resolvió usando filtros en algunas otras continué con problemas de marcar demasiadas rayas donde no era necesario.


Código completo en mi repositorio:








miércoles, 17 de abril de 2013

Lab Elipses

En base a la tarea de clase de visión  la tarea para laboratorio consistió en partiendo de la detección de elipses realizada en la clase rellenar los elipses de algún color.

La entrada de clase es la siguiente:

http://m8sem.blogspot.mx/2013/04/deteccion-de-elipses.html

ahí se explica todo sobre la detección de elipses por medio de formulas aunque el requisito era método cuerda-tangente ._. con el cual tuve problemas y fue por lo cual opte por método de formulas.

El codigo completo se encuentra en mi repositorio:

https://github.com/rodo2043/VisionComputacional/blob/master/Todo.py

Para el rellenado de los elipses simplemente después de detectarse si la figura es un elipse en la función de elipses:


Si en efecto la figura que se reviso es un elipse se regresa el color que tiene actual mente la figura para ser
rellenada por un color amarillo predefinido esto en la funcion formas:




Como es un try si no se regresa ningún color simplemente se pasa por alto el for de repintado.

Ejemplo:






martes, 16 de abril de 2013

Lab #7

Real-time Localization in Outdoor Environments using Stereo Vision and Inexpensive GPS

Autor: Agrawal, M.


Introducción:

La habilidad de un robot mobil de poder localizarse a si mismo es una parte crucial en su operación y navegación  Un robot que navega usando mapas debe ser capaz de localizarse a si mismo. Consecuentemente, a habido un considerable esfuerzo en trabajar en este problema. El problema de mapeo y localización del robot se conoce como SLAM. SLAM a sido satisfactorio en interiores y ambientes estructurados  pero por otra parte el problema esta en los ambientes exteriores donde sigue abierta la investigación sobre el tema. Si bien es cierto que para ambientes exteriores se pueden utilizar GPS o algún otro sistema de navegación  el problema es que el costo y el tamaño de los mismos limitan el poder ser utilizados en robots pequeños. El SLAM trabaja con diferentes tipos de sensores como lo son sonares y lazers de rango. Mientras que el sensor sonar es rápido y económico su detección es pobre, el láser tiene buen alcance y es preciso pero es lento. El objetivo del proyecto dentro de la investigación era diseñar un sistema de localizacion no muy costoso utilizando visión de stereo y complementarlo con un sensor GPS de bajo costo. El sistema stereo de visión esta diseñado de una forma que provee detección de obstáculos dentro de algunos metros ademas de contar con una cámara para ayudar en su localización.

Foto de robot que diseñaron:

¿Como funciona el sistema?


El sistema de odometria visual utiliza las pistas de función para estimar el movimiento relativo entre dos marcos. Las esquinas son detectadas en la imagen izquierda, detectando  y marcando los puntos atravez de los marcos. Estos puntos son después triangulados en cada marco. 3 de estos puntos son utilizados para estimar la orientación. Por ultimo un filtro de Kalman es utilizado para combinar la localización global y los datos obtenidos del GPS. 

Trabajos Relacionados

La estimación de movimiento relativo a partir de un vídeo es un problema bastante estudiado en la gama de visión computacional. Las aproximaciones para una estimación del movimiento relativo se basan en la densidad óptica  cuando se compara con vídeo monocular, la estimación de movimiento relativo es relativamente fácil y tiende a ser mas estable y tener un mejor comportamiento. Otra de las ventajas de utilizar cámaras  es que no hay que preocuparse sobre la escala ambigua presente en cámaras monoculares. 

Resultados

Se probo el sistema diseñado en un exterior,debido a que el GPS solo es eficaz 3 o 4 metros para poder validar los resultados se movió el robot a un circuito ciclado de entre 50 a 100 metros, ya que el punto de partida es el mismo de meta esto servirá como indicativo para encontrar errores de localización


Imagen de los resultados obtenidos

Como se puede ver el sistema es bastante preciso y la variacion es mínima.








Detección de Elipses

La tarea de esta semana consistió en realizar un programa capaz de identificar elipses a partir de una imagen.

Para esta tarea se utilizaron algunos conceptos anteriores como lo son la detección de figuras y centros: Dejo las ligas a las entradas que pienso que son de importancia y utilidad.



Se utilizan estos conceptos anteriores para dividir la imagen en figuras y tener los centros que nos ayudan a obtener puntos claves requeridos para saber si alguna de las figuras es en realidad un elipse o no. 

Lo que hice fue lo siguiente, lo primero que hice fue encontrar el vértice y co-vertice de las figuras dentro de la imagen esto con la finalidad de cumplir con una formula del elipse, para esto cree 2 funciones una que partiendo del punto cuente los pixeles del centro de la figura moviéndose atreves del eje x hasta donde termina la figura, de igual manera y con otra función lo hice para el eje y.





Ya con estos datos simplemente cree una función llamada elipse en donde con los datos que ya contamos que son el vértice y co-vértice que representaran en la siguiente formula a y b.

Formula de Área Área = Pi * A * B 

Y al igual como lo había hecho anteriormente con la tarea de círculos comparamos el área obtenida con la de la figura que ya conocemos y podemos saber si se cumple la formula del elipse en caso de ser cierto podemos obtener otros datos como el foco,excentricidad y su ecuación. Para identificar los elipses puse que se pintaran de color amarillo y marcar su centro.


Ejemplos:


Imagen original:












Codigo completo:
https://github.com/rodo2043/VisionComputacional

Fuentes:

jueves, 11 de abril de 2013

Huffman Coding-Generating a Huffman tree

The Huffman coding algorithm its a enconding algorithm used for lossless data compression. It is used to build binary trees with a minimum weighted path lenght from given weights of values or frequencys. Huffman data compression is a simplified version of what some daily use programs like winzip or tar do.


¿How to build the tree?

I will use a tutorial to explain the process of building the tree if you want to see the source tutorial go to Tutorial

1. From a set of numbers or letters we create a table in one side we put the letters or numbers(value) on the other side the frequency or apperance.

Example:




2. We take our table or list and sort it by frequency from the lowest value to the highest value.



3. After we sort the list we will take lowest elements and add them to create a parent node just like this:


as you can see from the previous table we took values a and b which have the lowest frequency values from the table and we join them together to create a parent node with the value ab and frequency 12.

4. After creating the node we remove the values used to create it from the list or table and add the new parent node into the list, so we will end up with this:



we can see that the value and frequency of a and b not longer appear on the table and the new node with the new frequency appears on the list.

5. Repeat the process combining the two lowest elements to get something like this:





new list:





6. Keep doing this until you end up with only one element left in the list:





As you can see we end up with one element 102 so we are done.

7. The last element becomes the root of the huffman tree.


Coding and Decoding


1. To generate a Huffman code from the tree we will tranform all branches into values(starting from the top) left ones take a 0 value and right ones a 1 value.

            
2. So if we want the encoding value of (a) we go thru the tree and the value will be 0010.
and with these values we can see or represent the bits used to calculate the percentage of compression rate each letter has.

Video





If you still dont understand how to do it look at this video:

Code



As you can see the code isn't complete i had some troubles creating the nodes adding the lowest values.

Sources:




martes, 9 de abril de 2013

Retroalimentacion de avances

En esta entrada se realizara una realimentacion en base a lo presentado por cada equipo, sus requerimientos en base a hardware y software. El objetivo de esta entrada es sugerir a cada equipo alguna mejora que se pueda realizar a cada proyecto.

Equipo#1(Sergio,Alex,Cristhian,Roberto Valenzuela)

Proyecto:Alarma Inteligente

En cuanto al avance de este equipo se manejo lo que fue una estructuración de como se trabajara el proyecto, lo dividieron en 2 partes y ademas eliminaron y agregaron algunas cosas interesantes como las notificaciones al celulares ademas tomaron en cuenta algunos factores como salir rápido de emergencia de la casa tener un sistema para evitar que el auto se bloqueara.

Sugerencia:

Lo que yo sugiero a este equipo es verificar mas las situaciones que se podrían presentar como la mencionada de una emergencia o cuando se pierde el sistema de identificación, hay que tomar todos estos factores en cuenta que si bien no son muy comunes podrían suceder.


Equipo#2(Rene,Raul,Ivan)

Proyecto:Casa Segura

En cuando al proyecto de la casa segura, el equipo esta decidiendo que puntos de la casa se trabajaran en base a las encuestas que realizaron. Y ya a partir de esto verán el material que se requerirá por lo que la idea todavía esta muy al aire.

Sugerencia:

Mi sugerencia para este equipo es que revisen primero todos los proyectos realizados en base a este tema en semestres pasados ya que hubo un semestre que este tema se cubrió bastante, podrían unir todos estos proyectos reciclarlos y añadir cosas que no se hayan trabajado antes.


Equipo#3(Obed,Ave,Pedro,Jona)

Proyecto:Computadora Inteligente

El proyecto de computadora inteligente ya tiene bien definidos el material que utilizara, como se espera que la mayoría de las computadoras cuenten con una cámara web sera el único requerimiento que deberá tener la computadora para que pueda funcionar correctamente.  A partir de esto podrán autentificar si la persona que esta sentada frente a la computadora es una persona autorizada y por ende garantizar la seguridad del a computadora.

Sugerencia:

En sugerencia a este equipo en el caso del pausado de vídeos si la persona se aleja de la computadora y auto bloqueo abria que garantizar y tener bastante cuidado en este aspecto ya que si alguien se mueve y la camara lo pierde de vista y se bloquea por esta razon seria bastante molesto para el usuario por lo que abria que tomar tiempos


Equipo#4(Osvaldo,Triana,Lupe,Esteban)

Proyecto:Oficina Personalizada

El equipo de oficina personalizada propuso algunas nuevas cosas en su ultima presentación como lo fueron las llaves de la oficina, ademas de mencionar algunos materiales que podrían utilizar para la verificación de cada usuario.

Sugerencia:

Una idea que creo les podría servir podría ser que si es una oficina la cual tiene un horario estipulado que se sigue pueden saber el orden de las personas y por ende la personalización para cada una, se podrían sacar similitudes entre usuarios continuos de esta manera ahorarrian tiempo y trabajo al dispositivo que haga el cambio de todos los dispositivos a personalizar.



Equipo#5(Omar,Saul,Isaias)

Proyecto:Localizacion por bluetooth o gps

Este proyecto ya esta bastante claro y definido en cuanto a lo que se quiere hacer lo único que falta aclarar por completo es el material que utilizaran se presentaron varias cosas que podrían servir.

Sugerencia:

Como al inicio se habían enfocado a lo que era detección de personas y al parecer se utilizaran brazaletes sugeriría tomar en cuenta cuando el objeto persona o lo que vallan a identificar se deje de mover en caso de que sea una persona esto podría tomarse como que se retiro el brazalete o algo le paso al a persona, entonces seria un factor a considerar.


Equipo#6(Cecy,Roberto,Ramon)

Proyecto:Alarma(Despertador) Inteligente

El proyecto del despertador ya tienen bien clara la idea y con ayuda del estudio de campo lograron recaudar información importante sobre el modo de pensar de la gente, por lo que se centraran mas en lo que es la alarma en un smartphone con personalización sin embargo sin dejar aparte lo que habían dicho anteriormente de revisar los movimientos de la persona en la cama.

Sugerencia:

En cuanto a la detección de movimiento en la cama habría que hacer un estudio bien detallado sobre esto aunque no tengo bien claro aun lo que buscan con esto.


Equipo#7(Abraham,Rafa,Sosa,Juan Carlos)

Proyecto:CarNXP

El proyecto del carroNXP es básicamente una personalización del auto y control del auto en si la idea ya esta bastante clara y definida.

Sugerencia:

En cuanto a sugerencia en cuanto este equipo lo unico que podria decir seria en cuanto al material verificar que tan costoso es todo lo que quieren utilizar y talves podrian reducir costos.