martes, 26 de febrero de 2013

Laboratorio 4: Cómputo Ubicuo

En esta entrada voy a dar mi punto de vista de los proyectos acerca de las presentaciones de la semana pasada que fue lo de Campo de Estudio.


En este proyecto primero que nada recomiendo que la encuesta solo se realice a personas que tienen o han utilizado un carro ya que si sirve la opinión de personas que no lo han usado pero una información mas factible seria de personas que lo han usado y tienen carro.

La encuesta realizada yo la encuentro bien además que se obtiene una información muy completa del tema, pero un error que se hiso común en varios de los que presentaron fue el utilizar checkbox cuando debieron usar radio button ya que con radio button solo se da la elección de poder elegir solo una de las opciones que se nos brindan.

Su idea es muy buena pero acerca de sobre el nivel de tecnología pues muchas personas no saben mucho acerca de esto  y una buena cosa seria explicar a los usuarios algo acerca de este tema. Otra idea buena seria que contemplaran los precios de las cosas que el usuario le gustaria contemplar por que imaginense si sacan un producto muy caro pues no creo q muchos lo compren.



Proyecto: Seguridad en Computadoras


Este proyecto me pareció muy bueno ya que muchos hemos pasado por cosas asi de que entran a nuestra lap y ponen cosas en nuestro face y entre mas cosas. Lo que recomiendo es que no se hagan por cosas que sean muy fáciles de engañar como reconocimiento de dedo o de cara ya que como se menciono podemos engañar al sistema con solo mostrar una foto. Una de las ideas que recomiendo es  por el reconocimiento de escritura.


También se podrían combinar ciertas cosas para la detección como la de escritura así como la de detección por cámara web .


Proyecto: Oficina Personalizada


La idea me parece muy buena y seria muy padre tener una oficina personalizada y me gusto mucho a lo que llevan su aplicación ya que nos mostraron el ejemplo de una persona que se ahorraría tiempo y esfuerzo apagando todas las luces de oficinas en vez de usar ese tiempo en otras cosas solo picandole a un botón.


Me gusto que las encuestas las hayan hecho a personas que trabaja en una oficina y que piensa de esta idea y acerca de como se mejoraría la oficina.


Aunque se están tomando muchos aspectos la idea me parece increible, mencionaron algo del clima y eso me gusto. Otra idea seria que cuando una persona salga de su ofina o algo por el estilo las luces se apagaran y que las puertas se abrieran cuando intenta salir. 


Proyecto: Localizador de Personas


En mi opinión la idea es muy buena, seria bueno que ya estuviera el enfoque hacia quien se va a realizar en mi opinión me parece una buena idea dejarlo hacia los niños o mascotas ya que es mas frecuente que uno este mas al pendiente de niños por lo pequeño que aun son y de sus mascotas. 



También deben de tomar en cuenta bien hacia que se enfocara para que vayan buscando más información y las necesidades de los usuario hacia las cuales se enfoque por que por ejemplo si es hacia niños los usuario comúnmente serian los padres de familia pero si es a perros podría ser cualquier persona con una edad suficiente para saber manejar este dispositivo.

Proyecto: Casa Inteligente

La idea es muy buena pero la encuesta no es muy precisa que digamos ya que falto especificar en si un producto al cual se enfocara ya que son demasiados y que el usuario solo se enfocara en ciertos, osea la idea es muy buena 

Proyecto: Auto con NFC

Aquí la idea también es muy buena pero creo que deben de enfocar mejor hacia que rango de edad se va a dirigir ya que no solo las personas jóvenes usan carros la mayoría esta en gente de mas edad. 
Y otra seria que el sistema se adaptara a varios usuarios ya que el carro lo pueden usar varias personas.

Proyecto: Garage Inteligente

La idea es muy buena y la encuesta estuvo muy bien, ya basándose en la encuesta deben de especificar hacia que usuario se va a aplicar y que tecnología se usara ya que este debe de estar relacionado con esta tecnología o que en sí sea algo fácil de usar para este mismo.













jueves, 21 de febrero de 2013

Laboratorio 3:

En esta actividad teniamos que encontrar los convex hull de cada una de las figuras en una imagen para esto yo utilice el algoritmo de jarvis:

Codigo
Imagenes






Como vemos en la imagen en la ezquina de arriba solo colorea uno de los pixeles que tiene el convex hull y no pude encontrar el error :(
Tarea 2:

Para la tarea 2 teniamos que realizar el algoritmo  Booyer-Moore y Knuth-Morris-Pratt

Booyer Moore


Los pasos sos los siguientes:


1. Se dan las lpongitudes de los tamaños que tendra el texto donde se busca y la lóngitud del patron a buscar.
2. Se manda a generar el texto donde se busca
3. Se manda a generar el patron a buscar
Los dos anteriore son generados con un random con los numeros de las letras de la a hasta la z con el numero que le pertenece a cada una en la tabla ascii. 
4. Ya generado lo anterior mandamos a invertir el patron (con un reversed en python para regresarla)
 5.Se busca las letras que contiene texto que no se encuentren en patron
6. Manda a quitar las letras repetidas (dejando una tabla para los saltos)
7.Comienza a comparar palabra:
      7.1 Se compara de derecha izquierda la palabra patron con el texto 
      7.2 Si el primer elemento que verifica no es igual se realiza un salto de la palabra patron
      7.3 Si el primer elemento es correcto pero alguno de los siguientes incorrecto se cuenta el numero de pasos que dio hasta llegar al incorrecto y se toman como brinco.
      7.4 Si todos son correctos se toma el salto de la letra principal.


Código

No lo termine :|

martes, 19 de febrero de 2013



Laboratorio 3 Cómputo Ubicuo


Diseño conceptual


El diseño Conceptual es la primer fase del proceso de diseño, se basa en la aproximación al diseño centrado en el usuario, de las necesidades que el usuario ocupa, las capacidades que tiene para adquirir el producto y expandir el conocimiento acerca de las especificaciones del producto. 



El objetivo del Diseño conceptual es llegar a una propuesta que satisfaga los requerimientos funcionales. Se acerca a diseño del producto desde una comprensión de como trabajan los clientes y en que espacio se desarrollan. 



La entrada para un diseño coceptual es:



1. Planteamiento del problema revisado


2. Requisitos (en el puesto)
3. Declaración de Entregables

El diseño conceptual busca responder a los objetivos sin salirse de los límites de presupuesto, considera la cobertura y desglose geográficos requeridos.

Fases del diseño conceptual:

Las fases son una serie de actividades mediante la cual se identifican las necesidades de información, que sirven para poder determinar:


  • El marco conceptual
  • Los instrumentos para la capacitación de los datos
  • Los criterios de validación para la revisión y depuración de inconsistencias
  • El esquema para la presentación de resultados



El marco conceptual

Es el ordenamiento de temas, categorías, variables y clasificaciones al cual se referira los datos de objeto de capacitación, incluido en el glosario con las definiciones formales de cada unos de los conceptos utilizado.


Los instrumentos para la capacitación de los datos

Los instrumentos de capacitación son los formatos que se utilizan para el registro de los datos.


Los criterios de validación para la revisión y depuración de inconsistencias

En la fase de capacitación y procesamiento de la información pueden detectarse problemas de omisión, multirespuesta o inconsistencia, es neceario definir con anticipación los criterios de validación de los datos que son reglas de naturalezaconceptual para rvisar y corregir los datos que así lo requieran.

El esquema para la presentación de resultados


Esat es finalmente la fase dle diseño conceptual cubre la determinación del esquema para la presentación de resutados, que es un planteamiento general de los productos, sus contenidos, formas y medios en que se presentarán las estadísticas para fines de divulgación.

El diseño conceptual incorpora seis macroactividades:

  • Identificación de necesidades de información
  • Integración del Marco Conceptual
  • Diseño del esquema para la presentación de resultados
  • Diseño y prueba de instrumentos de capacitación
  • Definición de criterios de validación
  • Documentación del diseño conceptual



Referencia
Link1
Link2


lunes, 18 de febrero de 2013

Tarea2: Detección de formas

En está entrada tenemos que detectar formas en una imagen a partir de la tarea 1, lo que debemos de tener primero para comenzar es aplicarle convolucion a la imagen y después de eso normalizarla y binarizarla.

Imagen a utiliar:


Imagen aplicando convolución:


Imagen normalizada:


Imagen binarizada:



Ahora que tenemos lo anterior basandome en el código que realizo la Dra. Elisa del bfs detecte las formas y las pinte de un color cada una. El bfs lo que realiza es buscar los vecinos y agregarlos a una cola (los vecinos tienen q ser del mismo color que el pixel original), cada vez q cheka un pixel sus vecinos de ese pixel se agregan a la cola.


Cuando la imagen esta completamente pintada sacando su porcentaje de cada uno de las formas pinte la más grande de color gris:




El código es el siguiente del bfs y para pintar las formas:



Código para pintar de gris la forma con más porcentaje:


Después coloco los centros de masa de cada una de las formas:

Para colocar estos centros me base en el método de las áreas:



A cada pixel lo tome como una área y su ordenada y su abscisa como x y como y de la ecuación anterior.

Para poder realizar esto cada vez que recorria la imagen pintando pixel por pixel del mismo color agregue su ordenada y su abscisa a dos listas y para sacar su centro de masa:

en x= sum(abscisa)/float(num_pixels)
en y=sum(ordenada)/float(num_pixels)

El área de cada pixel es 1.



Les agrego la étiqueta a cada uno de ellos

Para añadir la étiqueta solo utilice el label de TKinter y lo acomode alado del centro de masa de cada forma.



Código:




Y al final en la términal imprime los id y el porcentaje de cada forma:


Código:

El código esta completo en mi repositorio: Link

 Más imagenes




miércoles, 13 de febrero de 2013


Laboratorio 2: Visión Computacional

En esta actividad tenemos que realizar las siguientes actividades:


Parte Obligatoria:
  • Generar ruido sal y pimienta en una imagen
  • Eliminar el ruido sal y pimienta 
Parte Opcional:

Generar bordes por medio de


  • Diferencia entre una imagen en escala de grises y la misma filtrada
  • Normalizar el resultado de lo anterior
  • Binarizar la imagen

Para realizar la actividad seleccione la siguiente imagen:




El método que utilice fue el siguiente:
  • Los parámetros intensidad y polarización son dados desde la línea de comandos
  • Genero un random y si ese random es mayor a la intensidad el píxel se le agrega sal o pimienta
  • Para agregar sal o pimienta genero otro random donde es de 0 ó 1 si cae 1 genero sal y si cae 0 genero pimienta.
  • La aplico al píxel

Código


Imagen generada

Intensidad=0.01




Intensidad=0.1



Eliminar sal y pimienta
Para poder quitarla yo lo que hice fue usar el filtrado para sacar la media de los vecinos.
Con un umbral de que solo entrara en el rango posible donde se puede encontrar sal y pimienta.


Código
Imagen generada
Intensidad=0.001

Como vemos no lo quita completamente sino que se se ve como borrosito.

Aplicamos Diferencia
La diferencia se obtiene de la imagen a escala de grises - imagen filtrada.

Código
Imagen obtenida


Aplicamos normalización

Para aplicar normalización se hace de la siguiente manera:
De la imagen que nos arrojo la diferencia seleccionamos el valor del píxel mas alto y mas bajo:

 r = maximo-mínimo
 prop = 255.0/r
 p =int(floor((p-minimo)*prop))
El resultado lo aplicamos al píxel

Código:
Imagen Obtenida
En este caso la normalización hace los bordes un poco mas blancos


Aplicamos binarización:

La binarización consiste en solo poner un píxel en color blanco(255) o negro(0)  por  medio de un umbral que es dado por la línea de comando

Código
Imagen generada



martes, 12 de febrero de 2013

Tarea 1 Clase: Detección de Bordes

En esta tarea tenemos que detectar lo que son los bordes en una imagen, para lo cual se realiza lo siguiente:


  • Primero convertimos la imagen a escala de grises
  • Le aplicamos filtro
  • Aplicamos convolución
  • Aplicamos normalización
  • Aplicamos binarización
La imagen original es:



Escala de grises: En esta parte se convierte la imagen en escala de grises.

Código
Imagen obtenida:


Le aplicamos filtro:

Para usar el filtro ya trabajamos con la imagén en escala de grises
  1. Seleccionamos los vecinos de cada uno de los pixeles
  2. Sumamos la escala de grises q le pertenece a cada pixel vecino
  3. Sacamos un promedio de la suma de lo anterior
  4. Y lo asignamos al pixel
Código:

Imagen obtenida





Aplicamos convolución

Para aplicar convolución utilizamos el operador de sobel, aplicamos el gradiente horizontal y vertical al mismo tiempo obteniendo la magnitud del gradiente, para más información sobre este tema.

Código
Imagen obtenida



Aplicamos normalización

Para aplicar normalización se hace de la siguiente manera:
De la imagen que nos arrojo la convolución seleccionamos el valor del pixel mas alto y mas bajo:

 r = smaximo-minimo
 prop = 255.0/r
 p =int(floor((p-minimo)*prop))
El resultado lo aplicamos al pixel

Código:
Imagen obtenida







Aplicamos binarización

Le damos al programa un valor el cual ayudara a binarizar la imagen, por ejemplo valor=34
si el velor del pixel es mayor al valor 34 el pixel se hace blanco si es menor el pixel se hace negro.

Código:
Imagen obtenida





Tiempo que tardo en ejecutarse escala de grises = 1.02590990067 segundos
Tiempo que tardo en ejecutarse filtro = 2.71544289589 segundos
Tiempo que tardo en ejecutarse convolucion = 2.23032712936 segundos
Tiempo que tardo en ejecutarse normalizar = 2.07841897011 segundos
Tiempo que tardo en ejecutarse binzarizar = 0.44579911232 segundos


miércoles, 6 de febrero de 2013

Laboratorio de Visión Computacional:

Tarea 1:

En esta entrada se nos pidio que a una imagen le aplicaramos lo de escala de grises, después el umbral y por último filtro.

La imagen a aplicarle lo anterior sera la misma para los tres para poder ver las diferencias:




Escala de Grises 

Para la conversión a escala de grises:



  1. Recorremos la imagen pixel por pixel
  2. Por cada pixel sacamos su r,g,b ((r,g,b) = image.getpixel((i,j)))
  3. Sacamos un promedio(escala = (r+g+b)/3)
  4. Ese promedio se asigna al r,g y b del pixel (pixeles[i,j]=(escala,escala,escala))

La imagen que nos arroja es la siguiente







Umbral

Pasos:



  1. Se definen los umbrales uno minimo y uno maximo
  2. Recorremos la imagen pixel por pixel
  3. Por cada pixel sacamos su r,g,b ((r,g,b) = image.getpixel((i,j)))
  4. Sacamos un promedio(promedio = int((r+g+b)/3))
  5. Si promedio<=umbral_minimo: promedio = 0
  6. Si promedio>=umbral_maximo: primedio = 1 (Si el umbral no se encuentra entre lo anterior se queda con su mismo valor de grises)
  7. Asignamos al pixel (pixeles[i,j]=(promedio,promedio,promedio))
Imagén arrojada, fue probada con un umbral minimo=45 y maximo=139


Otra prueba de umbral: 

umbral minimo=45 y maximo=139

Código:



Filtro

Pasos:

Para usar el filtro ya trabajamos con la imagén en escala de grises
  1. Seleccionamos los vecinos de cada uno de los pixeles
  2. Sumamos la escala de grises q le pertenece a cada pixel vecino
  3. Sacamos un promedio de la suma de lo anterior
  4. Y lo asignamos al pixel
La imagen arrojada




Código:





Repositorio
https://github.com/alice-rdz/vision-computacional

martes, 5 de febrero de 2013

Actividad 1: Laboratorio de Redes de Comunicación 

En esta primera actividad se tenia que buscar un ejemplo de un estándar y yo escogí el ejemplo de las memorias para celular y abarcare algo sobre memorias de cámaras digitales.


Tarjetas de memoria para celular 



Los formatos de tarjeta de memoria para celulares es un tema complicado, ya que son muy variados y muchos no son compatibles entre si.

Basicamente se pueden dividir en 3 grupos:



  •  Multimedia Card
  • Secure Digital
  •  Memory Stick




MMC  (Multimedia Card)






Estas tarjetas se encuentran cada vez menos importantes y no fueron desarrolladas para la telefonía celular, son las mas economicas y actualmente su uso es poco comùn ya que  pocos modelos de celulares vienen con compartimientos de este tipo.



  • Su tamaño a aproximado es de 24x32x1,5 mm
  • se utiliza principalmente en telefonos nokia como el N-GAGE, 6255, 6230 y algunos smartphones
Algunas variantes:

RS-MMC (Reduced Size – Multimedia Card)



  •  tamaño 24x16x1,5 mm
  • ya no se lanzan teléfonos con slots para éstas.
  • puede usarse en cualquier ranura MMC ó SD

Dual-Voltage MultimediaCard (DV-MMC)


  • Las tarjetas de tamaños normal y reducido de la versión 4.x del estándar MMC, se comercializan como  MMCmobile respectivamente.
  •  soportan voltaje dual 
  • Introducidas en 2005

MicroMMC

  •  MMC de tamaño micro: 14mm × 12mm × 1.1mm
  • soporta voltaje dual, es retrocompatible con MMC, y puede usarse en ranuras de tamaño normal MMC y SD con un adaptador mecánico
  • soportan las opciones de alta velocidad

SD card  (Secure Digital)

El formato fue inventado por Panasonic.

Caracterìsticas:
  • dimensiones de 32 mm x 24 mm x 2,1 mm
  • Existen dos tipos: unos que funcionan a velocidades normales, y otros de alta velocidad 
Variantes:

MINI SD
Es una SD, pero con medidas inferiores, con una dimensiòn de  20x21x1.4 mm.
un adaptador miniSD  permite la compatibilidad con todos los dispositivos equipados con una ranura de tarjeta SD.

MICRO SD
Es un formato de tarjeta de memoria flash más pequeña que la MiniSD.
Dimensiones:  15 × 11 × 1 mm.
También son conocidas como Transflash.

Memory Stick

Memory Stick Pro Duo
El tamaño es un poco menor que las tarjetas SD 

Memory Stick Micro (M2)
mide 15x12.5x1.2 mm


Conclusión:

A mí punto de vista pienso que se han creado diferentes tipos de memorias mas que nada para hacerlas más pequeñas ya que así se ahorran mas espacio, además dle espacio tienen más portabilidad y ayudan a que el diseño de los celulares sean más pequeños. Aparte de que existen diferentes tipos de memoria ya que cada marca lanza una diferente dependiendo de las necesidades de cada una.



Bibliografia:

lunes, 4 de febrero de 2013

Tarea 1: Clase Redes de Telecomunicación

Advanced Sockets Application Program Interface (API) for IPv6
RFC 3542


En la actualidad la portabilidad de las aplicaciones que utilizan sockets IPv4 es bastante alta, esto se debe a que la mayoria de las implementaczzziones partió de una base común, el código fuente Berkeley.

Con IPv6, no hay ninguna base de código fuente común que puedan usar los ejecutares y la posibilidad de divergencia en este nivel entre diferentes implementaciones es alta. Es necesario una estandarizacion para evitar una falta de portabilidad entre las aplicaciones que utilizan IPv6 raw sockets.

2. Estructuras comunes y definiciones


En esta parte hablamos acerca de Las definiciones de las constantes y estructuras básicas necesarias para aplicaciones utilizar primas sockets IPv6. La API asume que los campos en los encabezados del protocolo se dejan en el orden de bytes de red que es big-endian para los protocolos de internet, si no es el caso los campos se comvierten en tiempo de ejecución usando algo como htons() o htonl(). Dos nuevos archivos de cabecera se definen: netinet ip6.h="" y netinet icmp6.h="".

2.1 Estructura ip6_hdr

Al incluir se define una nueva estructura, e definen cabeceras de extensión para IPv6: 


  • Authentication header
  •  Encapsulating Security Payload header 
  •  Routing header
  •  Type 0 Routing header
  •  Fragment header


Las cabeceras ateriores se les define una estructura menos a las dos primeras, además de que se agregan dos opciones de cabecera:



  •  Hop-by-Hop options header 
  •  Destination options header


IPv6 define muchos nuevos valores para el siguiente campo de cabecera y se definen unas nuevas constantes al incluir "netinet in.h=""". "/netinet"

2.2 Opciones de IPv6

 Las opciones de IPv6 también se obtienen incluyendo y son las siguientes:

 Jumbo Payload 

Optio NSAP Address Option
 Tunnel Limit Option
 Router Alert Option

2.3. Estructura icmp6_hdr 



Al igual que en lo anterior se define una nueva estructura y se definen nuevos valores para el campo de cabecera pero esto se hace añadiendo "netinet/icmp6.h".

2.4Pruebas de direccionamiento de macros

EL API básico define algunos macros para probar una dirección IPPv6 para ciertas propiedades, extiende definiciones adicionales con marcos de dirección de prueba, se define añadiendo "netinet/in.h".

int IN6_ARE_ADDR_EQUAL (const struct in6_addr *const struct in6_addr *);

Devuelve un valor diferente a 0 si las direcciones son iguales sino devuelve el 0.

2.5 Protocolos de archivos


Para IPv6 se definen los sigueintes nombres de protocolos con sus valores que se muestran:

  •  hopopt 0 # hop-by-hop opciones para ipv6
  • ipv6 41 # ipv6  
  • ipv6-route 43 # encabezado de enrutamiento para ipv6
  •  ipv6-frag 44 # fragmento de encabezado de IPv6
  • esp 50 # seguridad de carga útil para encapsular IPv6
  • ah 51 # cabecera de autenticación para ipv6
  •  ipv6-icmp 58 # ICMP para IPv6
  •  ipv6-nonxt 59 # sin encabezado siguiente para ipv6
  • ipv6-opts 60 # Opciones de destino de IPv6




3. IPv6 Raw Sockets

Los conectores directos pasar por alto la capa de transporte, con IPv6 estos conectores su utilizán para ICMPv6 y para leer y escribir los datagramas IPv6.

Los objetos de datos auxiliares se utilizan para transferir las cabeceras de extensión e información Límite HOP. Si una aplicación necesita acceder al paquete IPv6 completa, alguna otra técnica, como el enlace de datos interfaces de BPF o DLPI, se debe utilizar.

Todos los campos con excepción de la etiqueta de flujo en la cabecera IPv6 pueden cambiarse mediante los datos auxiliares y las opciones de socket de la solicitud de salida.

Esta API no define el acceso al campo de etiqueta de flujo, porque hoy no hay uso estándar del campo.

3.1 Checksums

El kernel calcula e inserta el ICMPv6 checksum para ICMPv6 raw sockets, ya que esta suma de comprobación es oblogatoria.

Para otros raw IPv6 sockets la aplicación debe establecer la opción new IPV6_CHECKSUM socket para que el kernel calcule y almacene la suma de comprobación para la salida y verificar el cheksum recibido en la entrada, y descarta el paquete si la suma de comprobación es un error., la suma se incorporará el pseudo-encabezado IPv6.

3.2 ICMPv6 Tipo de Filtrado

ICMPv6 es un superconjunto de ICMPv4, que también incluye la funcionalidad de IGMPv4 y ARPv4, un conector directo ICMPv6 potencialmente puede recibir mensajes de muchos más que sería recibida con una toma de ICMPv4 raw socket.

Para transferir extraños mensajes ICMPv6 desde el kernel hasta el usuario puede incurrir en importantes gastos. Por lo tanto esta API incluye un método de filtrado de mensajes ICMPv6 por el campo de tipo de ICMPv6.

4.ICMPv6 Verificación de paquetes recibidos

Una aplicación puede realizar comprobaciones adicionales de validez del contenido de los mensajes ICMPv6 y descartar paquetes mal formados. La pila de protocolos no se ha de descartar paquetes ICMP si el tipo es desconocido para la pila.

5.  El acceso a IPv6 y encabezados de extensión

Las aplicaciones deben ser capaces de controlar el contenido de encabezado IPv6 cabecera y la extensión cuando se envía, así como ser capaz de recibir el contenido de estos encabezados.

Esto se hace mediante la definición de los tipos de opciones de socket que se pueden usar tanto con setsockopt y con datos auxiliares.

La siguiente información opcional se pueden intercambiar entre la aplicación y el kernel:

1. El envío / recepción de interfaz y fuente / dirección de destino,
2. El límite de saltos,
3. Dirección del siguiente salto,
4. La clase de tráfico,
5. Enrutamiento de cabecera,
6. Hop-by-Hop Opciones de cabecera, y
7. Opciones de destino de cabecera.

En primer lugar, para recibir cualquiera de esta información opcional en un UDP o conector sin procesar, la aplicación debe llamar a setsockopt ().


Para más información: Link