miércoles, 22 de mayo de 2013

Presentación Final



Detección de flash (cámaras) en museos


  

Propósito 

El propósito del proyecto es la detección de flash de las cámaras mediante técnicas de visión computacional, estos serán grabados con una cámara y se extraerá la imagen y se procesara para tener como resultado, la ubicación de donde proviene el flash.





Justificación

Principalmente el aspecto científico, la luz tan potente del flash puede deteriorar una pintura valiosa. El Xenon, presente en los tubos de flash se utiliza para pruebas de envejecimiento acelerado en distintos productos. Los flash causan que ciertos pigmentos de las pinturas se rompan y pierdan su vibración y color.

Otro aspecto es el económico, así se aseguran que las fotos no tengan la calidad necesaria para venderse.





Descripción textual


El programa detecta el flash de las cámaras en una secuencia de imágenes. Se procesa la imagen para saber de dónde proviene el flashazo.


Diseño del software






Pasos:


Una vez que se detectan pixeles blancos en la imagen, se toma una captura.






Teniendo la imagen con mucha iluminación, se aplica escala de grises a la imagen.




Se aplica binarización a la imagen para obtener los puntos más blancos, y se identifican los puntos blancos.




Se aplica dilatación y se marca la ubicación de donde proviene el flash en la imagen original.





Herramientas/librerias utilizadas

La librería utilizada para el proyecto fue OpenCV para Python, esto para habilitar la cámara web.

Numpy, para realizar los cálculos de las imágenes.


Técnicas de visión utilizadas

  • Escala de grises
  • Binarización
  • Dilatación
  • Diferencia


Evaluación de Desempeño

Se realizaron pruebas en cuanto a rendimiento/calidad y la resolución más óptima para el equipo utilizado era (640, 480).
Entre más variación de colores tenía el entorno más tarda en procesar.




Se utilizó un equipo con estas características:

Procesador: Core 2 Duo.

Memoria RAM: 3 Gb.

Sistema Operativo: Linux Ubuntu



Tiempo de ejecución



Debilidades

Una de las principales debilidades es cuando existan varias personas en la misma zona con cámara y tomen foto al mismo tiempo.


Trabajo a futuro

Mejorar detección, eliminando el ruido en la imagen.

Implementarlo con las cámaras utilizadas en los museos.


Repositorio





Video:







Presentación:


martes, 21 de mayo de 2013

Laboratorio 14


Retroalimentación - Presentación Final


Computadora inteligente

Se pudieron haber hecho pruebas con diferente iluminación, o personas parecidas a pedrito, utilizando una fotografía de él haber si el sistema lo reconoce en imagen.
En general me parece un buen proyecto.

CarNXP

Los elementos que utilizan hacen un proeycto muy completo, pero como mencionan, si hubieran dedicado más tiempoel proyecto hubiera terminado como lo esperaban. 

Despertador inteligente

A futuro podrían agregar muchas funciones, como lo mencionaron, hábitos, etc. pero lo demás me parecio bien, terminaron como lo habían planeado.

Galería inteligente


Creo que pudieron haber mejorado el sonido e iluminación, para hacer el sistema mas accesible.


Casa segura

Creo que si hubieran publicado imagenes del avance se podría entender mejor el proyecto, tambien si se hubiera utilizado bluetooth en la conexión hubiera una mejor usabilidad.
Pudieron haber publicado un demo del avance actual.

Garage Inteligente 


El uso de historial es muy útil para saber cuando se utilizó. Su objetivo se cumplió como lo plantearon, creo que este proyecto tiene mucho potencial en agregar nuevas funcionalidades a futuro.
La aplicación móvil tiene lo necesario, además que el usuario no requiere utilizar un dispositivo extra como un control.
Si hubieran mostrado un demo se hubiera entendido un poco más todas las funciones del proyecto.

Localizador

Creo que falto explicar mejor el funcionamiento del sistema, además de mostrar un video con el funcionamiento del sistema.

Oficina

Me parecio muy buen proyecto, el uso de token aumenta la seguridad del sistema.
El uso de sensores hacen el proyecto más atractivo a las personas, al igual que el uso de lectores RFID


Laboratorio 13


Retroalimentación Personal

Para esta entrega se nos pidío una retroalimentación personal acerca de nuestro trabajo en el proyecto de la materia Ubicomp.

El proyecto consiste en un sistema de seguridad en un automóvil, el cual tiene sensores y en caso de que se active, se enviara una señal al hogar y se emitira una alarma dentro de la casa, además se enviará una notificación al celular.
Cuenta con una llave que cierra/abre el circuito, para que el usuario encienda/apage la alarma.
Tambien teníamos planeado agregar localización GPS al automóvil, pero por falta de tiempo en comprar el material y no organizarnos adecuadamente no terminamos este módulo.

Que se pudiera haber hecho mejor?
Principalmente la organización, dejamos todo casi para alultimo y no nos dio tiempo de organizarnos mejor para repartir anticipadamente las partes del proyecto.

Análisis de lo que se hizo
Se hizo la primera parte del proyecto, que era la alarma dentro del automóvil mediante sensores y las alarmas/notificaciones.
Yo me enfoque en el arduino bluetooth dentro del automóvil, el cual enviaba la notificación al celular y al hogar, para emitir la alarma.
Los demás se enfocaron en otras cosas, como la interfaz de la aplicación en android, la alarma del hogar, etc.

Que falto de hacerse
Falto la localización GPS, ya que debido al tiempo no pudimos realizarlo.

Coordinación del equipo
No fue la adecuada, ya que no teníamos mucho tiempo de juntarnos a planear, avanzar el proyecto, ya que varios del equipo hacemos prácticas profesionales y otros tienen clase entre semana.




Laboratorio 12


Plan de negocios

Dispositivo que controla la iluminación y calefacción.

La idea del proyecto es un dispositivo para interconectar los sistemas de iluminación y calefacción con un control ambiente, de manera que en función de la evolución del momento del día y sus características, este sistema reaccione y pudiese variar la temperatura y condiciones de luz en una vivienda o edificio, de manera continua e imperceptible.

Hardware
El proyecto ocuparía de los siguientes elementos:
  • Sensor de temperatura
  • Sensor de iluminación
  • Arduino
  • Control
Software

El software a utilizar sería de Arduino, Processing.

Objetivo del proyecto

Principalmente es que la temperatura y la iluminación se adapte a las condiciones del lugar en que éste, y el usuario sea quien decida cual sería la temperatura adecuada e iluminación para que el sistema varie/reaccione ante un cambio de temperatura o iluminación externa.

Comercialización

Se planea que este proyecto sea dirigido a casa domésticas o algun lugar en donde varie la temperatura/iluminación externa y está implique cambiar la temperatura/iluminación manualmente; como lo son restaurantes.

Mercado potencial

El mercado potencial sería trato con el cliente directamente, ofreciendoles precios económicos.


martes, 14 de mayo de 2013

Laboratorio 11



Retroalimentación - Presentación de Privacidad

Computadora inteligente
Este sistema no tiene muchas vulnerabilidades, ya que solo se utiliza en el equipo del usuario y no manda la información por ninguna vía.
Se podría utilizar otro sistema que complemente la seguridad y no solo sea el de la foto ya que sus familiares tienen rasgos muy similares y podrían ver sus archivos personales.

Localizador inteligente

La idea de encriptar la memoria externa me parece buena idea, ya que alguien podría obtener tu memoria externa (MicroSD, etc), y así nos aseguramos que un tercero obtenga datos a través de la memoria externa. Además al utilizar la memoria externa no nos consumimos la memoria interna del teléfono. 

Oficina personalizada
Convendría mencionar a donde se van los datos que generan, el uso de credenciales de identificación aumenta la seguridad/privacidad del sistema. Creo que bastaría con el uso de credenciales, no sería necesario el reconocimiento facial.


Galería inteligente
En este proyecto no utilizan datos personales, sólo utilizan datos en general para sacar estadísticas. Se tendría que informar al usuario que se sacan datos estadísticos al estar presente en el museo.

Cama inteligente
El envíar información a un servidor creo que si es algo riesgoso, el uso de credenciales para accesar a él si aumenta su seguridad, pero habría que informar al usuario en donde se localizará el servidor y quienes tendrían acceso a él.

Casa inteligente o seguridad en el hogar
El uso de niveles creo que no sería lo adecuado, El uso de alertas cuando se valla a guardar información creo que no es lo más óptimo ya que puede que le resulte molesto al usuario, tal ves un mensaje en las opciónes mencionando que información se guarda sería lo mejor.

Carro NFC
Este sistema no tendría problema alguno en cuanto a la privacidad, creo que el único problema sería si se pieden los tags.

Garage Inteligente 
Solo habría que mencionar al usuario que se harían con los datos que se enviarán al servidor (con qué finalidad).


jueves, 9 de mayo de 2013

Detección de esquinas

Para esta entrega se pidió detectar esquinas, esto mediante el método de diferencia de filtro mediano.


  • Primero se realiza la escala de grises
  • Después se utiliza un filtro medio
  • Ya con el filtro, se realiza es sacar la diferencia entre la imagen de escala de grises y la imagen que se genero con el filtro medio
Código:
def normalizar(image, maxv):
mat = image.load()
ratio = 255.0/maxv
for x in range(image.size[0]):
for y in range(image.size[1]):
mat[x, y] = int(mat[x, y]*ratio)
return image
def diferencia(izq, der):
output = izq.copy()
matO = output.load()
matI = izq.load()
matD = der.load()
maxv = 0
for x in range(output.size[0]):
for y in range(output.size[1]):
cord = (x, y)
matO[cord] = fabs(matI[cord]-matD[cord])
if matO[cord] > maxv:
maxv = matO[cord]
return normalizar(output, maxv)
def nuevo_visitados(size):
visitados = dict()
for i in range(size[0]):
for j in range(size[1]):
visitados[i,j] = False
return visitados
def promediar_esquinas(image):
esquinas = list()
mat = image.load()
for x in range(image.size[0]):
for y in range(image.size[1]):
if mat[x, y] == 255:
points = dfs_promedio(mat, (x, y), image.size)
promedio = [0.0, 0.0]
for p in points:
promedio[0] += p[0]
promedio[1] += p[1]
promedio = (int(promedio[0]/len(points)), int(promedio[1]/len(points)))
esquinas.append(promedio)
for cord in esquinas:
mat[cord] = 255
return esquinas
view raw esquinas.py hosted with ❤ by GitHub



Imágenes/resultado:







martes, 7 de mayo de 2013

Laboratorio 10



Título: On Privacy Evidence for UbiComp Environments
Broadening the Notion of Control to Improve User Acceptance
Autores: Rafael Accorsi · Matthias Bernauer
Año: 2007

En esta investigación se habla sobre las razones que hay detrás de una mentalidad negativa, los estudios a menudo apuntan a la falta de transparencia en la recolección y la utilización de los datos personales: Los usuarios temen el hecho de que se oculte la vigilancia a través de tecnologías Ubicomp.
Y esto se debe a que este escepticismo es una consecuencia de un control incompleto mecanismos ofrecen a los usuarios en entornos Ubicomp.
Los usuarios no sólo deben ser conscientes o capaces de regular la recolección y la utilización de los atributos personales, sino también de supervisión del sistema, es decir, ser capaz de obtener credibilidad evidencia de que el entorno de hecho se comporta como se esperaba.

Introducción
En la investigación, los obstáculos a la adopción generalizada de ambientes Ubicomp, no se nos deja con cuestiones técnicas, sino con cuestiones sociológicas, es decir, una falta de aceptación. Impulsado por predicciones pesimistas, como la "muerte de la vida privada" y "la privacidad como un bien de lujo", los usuarios tienen un efecto negativo de actitud en la interacción con entornos Ubicomp. Un número de estudios corroboran esto mostrando que los usuarios  utilizando tecnologías Ubicomp les da miedo, como las etiquetas RFID, sensor redes y técnicas para correlacionar los datos multimodales, ya que pueden ser mal utilizados para la vigilancia, lo que conduce a la pérdida de control sobre sus datos personales.
Para hacer frente a este problema, la investigación sobre métodos de la colección de atributos personales y su uso está ganando cada vez más en el impulso y relevancia. Su objetivo es permitir a los usuarios a revelar selectivamente a los consumidores de datos, posiblemente, lo que les permite formular políticas en las que atributos recogidos pueden o no pueden tener acceso. Su razón de ser es, pues, para transmitir un sentido de control a los usuarios, donde se encuentra el "control" de la regulación de la divulgación atributo o, más en general, la exposición del usuario.

Descripción general de nuestro enfoque
Para llevar a cabo pruebas de privacidad, la siguiente técnica de bloques de construcción son esenciales: una política lingüística para la expresión de propiedades privacidad; vistas de registro para permitir que la visualización de la actividad registrada; un registro seguro para garantizar la autenticidad de los datos registrados, en particular, para mejorar la credibilidad de las pruebas de privacidad,  y un proceso de auditoría automatizada para el control del cumplimiento de políticas. En las próximas secciones, se presenta en estos bloques de construcción, poniendo énfasis en las condiciones técnicas necesarias para llevar a cabo auditorías automatizadas, un tema central en la producción de pruebas privacidad.



  
Tenga en cuenta que el almacenamiento seguro de los datos del registro y la generación de puntos de vista de registro se realiza en un entorno UbiComp que podrían ser poco fiables. A pesar de que ignorar aquí, nuestro trabajo también incluye una confianza adecuada modelo basado en plataformas de computación de confianza. La idea es que los demonios responsables de la explotación segura y Ver registro de generación se encapsulan en un entorno limitado de confianza, que controla la ejecución de estos procesos. Antes de recuperar la vista del registro, un usuario (es decir, el proceso de que se ejecuta en su nombre) lleva a cabo una certificación a distancia para asegurar que la caja de arena, así como el encapsulado demonios están en su lugar. (Esto no se puede garantizar que todos los eventos se comunican al demonio de registro, sólo que el demonio se ejecuta con seguridad.) Una versión ampliada de este artículo profundiza en estos aspectos técnicos.
  
Registro seguro y registro de Visitas
Los datos de registro es una fuente central de información en la consideración de pruebas particularres y enfoques para comprobar el cumplimiento de las normas en general. En contraste con  archivos "estáticos”, como documentos de texto u hojas de cálculo, archivos de registro permiten reconstruir la dinámica de un sistema, es decir, la curso de los acontecimientos que condujeron a un estado particular.
Para ser creíbles, los datos de registro debe presentar la integridad, es decir, datos de registro son precisos (las entradas no han sido modificados), completar (entradas no se han eliminado) y compacto (las entradas no se han añadido ilegalmente para el archivo de registro), y ser confidencial en que las entradas de registro no se puede almacenar en texto claro, por esos datos del registro puede ser fácilmente duplicada.
Por otra parte, las técnicas para garantizar estas propiedades necesitan evidencia de manipulación, es decir, los intentos de manipular ilegalmente datos de registro son detectables a un verificador, y con visión integridad, es decir, si un atacante logra romper en al tiempo t, los datos de registro almacenados antes de t no puede ser comprometida.
En base a [1], se resume la realización de un seguro servicio de registro que cumpla con estos requisitos.



Suponiendo  que cada aplicación lleva a cabo su propio registro, consideramos un BBox archivo de registro adicional que puede ser visto como un cuadro negro del sistema. Se recibe eventos desde, por ejemplo, los archivos de registro de transacciones y de funcionamiento de las bases de datos, las decisiones de los monitores de referencia y otros dispositivos de detección.
La comunicación entre estos dispositivos y los coleccionistas están asegurados usando criptografía asimétrica. En recibir un mensaje de registro, cada registro de eventos Dj es (simétrica) encriptado con una clave criptográfica evolución Kj obtenida de un maestro de clave secreta Aj y un campo de índice Wj. (W se utiliza para describir el usuario al que se refiere la entrada.) Una cadena de hash y se asocia la entrada anterior Ej-1 y EJ. Este procedimiento se representa en la figura. 3, donde los números corresponden a:

1. Aj = hash (Aj-1) representa la clave de autenticación de la entrada del registro j. La confidencialidad de A es esencial ya que se utiliza para cifrar las entradas de registro. Por lo que suponemos que el cálculo del nuevo valor irremediablemente
sobrescribe el valor anterior, y que se almacena A0 de una manera segura, posiblemente fuera de línea.

2. Kj = hash (Wj, Aj) es la clave de cifrado con que la entrada de registro jth es encriptada. Esta clave es basado en el índice Wj, por lo que sólo corresponde
usuario accede a una entrada.

3. {Dj} Kj es el cifrado Dj entrada de registro.

4. Yj = hash (YJ-1, {Dj} Kj , Wj) es el valor j de la cadena hash. Cada eslabón de la cadena hash se basa en el valor cifrado correspondiente de los datos de registro.
Esto asegura que la cadena puede ser verificada sin el conocimiento de la Dj entrada del registro actual.
El registro de entrada resultante Ej = Wj, {Dj} Kj , Yj consiste del índice Wj, la entrada de registro cifrado {Dj} Kj y el Yj cadena de valor hash. Teniendo en cuenta la generación de pruebas privacidad, se define la forma de un evento registrado D.

Cumplimiento de Auditorías y Prueba de privacidad
Vistas del Log serían suficientes, al menos en teoría, para realizar el sentido holístico de control que sostenemos en este trabajo: usuarios puede navegar a través de las entradas y comprobar si su políticas de privacidad se han cumplido o no. Pero esto es más fácil de decir que de hacer: vistas de los registros incluyen incluso en pequeñas experimentos de miles de entradas y sus interrelaciones no son claras y difíciles de reconstruir, con independencia de la cantidad de esfuerzo que ponemos en mejorar su legibilidad.
Para hacer frente a este problema, desarrollamos un método para auditorías de cumplimiento automatizado para comprobar el cumplimiento de políticas. Dado un P política y una vista log L = (S, M), que primero definir un ν transformación que tiene P y devoluciones el conjunto de reglas V = {v1,. . . , Vn}, de tal manera que cada vi V denota la violación de una norma de P.
Cada vi violación es después se comprueba contra la pista de auditoría S.
Para definir ν, definimos primero en Def. 4 la polaridad de un gobernar y en Def. 5 negación de las disposiciones y obligaciones

Conclusión
Se aboga por un control de sistemas UbiComp, comprenda la regulación de la recolección y el acceso a atributos y la supervisión del cumplimiento de las políticas.
Para ello, se deben introducir pruebas de privacidad como medio de cumplimiento demostrable. Y así mismo él objetivo de mejorar la aceptación de sistemas UbiComp y fomentar la disposición de los usuarios a utilizar los servicios de estos sistemas. La evidencia de privacidad es un primer paso para ir en una dirección prometedora y muchas cuestiones pertinentes se mantienen a ser investigados.



jueves, 2 de mayo de 2013

Detección de polígonos

En esta entrega se pidio identificar, clasifica y etiquetar polígonos.



El procedimiento para detectarlo es
  • Cargar la imagen
  • Convertirla a escala de grises
  • Aplicar convolución discreta
  • Aplicar BFS

Código:

def convolucion(im, g):
w, h = im.size
pix = im.load()
out_im = Image.new("RGB", (w, h))
out = out_im.load()
for i in xrange(1, w-2):
for j in xrange(1, h-1):
suma1, suma2, suma3 = 0, 0, 0
for n in xrange(i-1, i+2):
for m in xrange(j-1, j+2):
if n >= 0 and m >= 0 and n < w and m < h:
suma1 += g[n - (i - 1)][ m - (j - 1)] * pix[n, m][0]
suma2 += g[n - (i - 1)][ m - (j - 1)] * pix[n, m][1]
suma3 += g[n - (i - 1)][ m - (j - 1)] * pix[n, m][2]
out[i, j] = int(suma1), int(suma2), int(suma3)
out_im.save('output.png', "png")
return out_im
def normalize(im):
w, h = im.size
pix1 = im.load()
im2 = Image.new("RGB", (w, h))
pix2 = im2.load()
max_ = 0
min_ = 256
for i in range(w):
for j in range(h):
if pix1[i, j][0] > max_:
max_ = pix1[i, j][0]
if pix1[i, j][0] < min_:
min_ = pix1[i, j][0]
#print max_, min_
prop = 256.0/(max_ - min_);
for i in range(w):
for j in range(h):
curr = int(math.floor((pix1[i, j][0] - min_)*prop))
pix2[i, j] = curr, curr, curr
im2.save('output.png', "png")
return im2
def bfs(im, origen, color, rewrite_file="output_bfs.png"):
pix = im.load()
w, h = im.size
q = []
coords = []
q.append(origen)
original = pix[origen]
while len(q) > 0:
(x, y) = q.pop(0)
actual = pix[x, y]
if actual == original or actual == color:
for dx in [-1, 0, 1]:
for dy in [-1, 0, 1]:
i, j = (x + dx, y + dy)
if i >= 0 and i < w and j >= 0 and j < h:
contenido = pix[i, j]
if contenido == original:
pix[i, j] = color
coords.append((i, j))
q.append((i, j))
im.save(rewrite_file, 'png')
return im, len(coords), coords
view raw poligonos.py hosted with ❤ by GitHub



En la imagen resultante solo logre detectar la línea.

martes, 30 de abril de 2013

Laboratorio 9


Retroalimentación - Presentación de Usabilidad

Computadora inteligente

Hubiera sido bueno hacer pruebas a los diferentes tipos de usuarios, como lo son niños, jóvenes, adultos. Además se pudo haber hecho más interactiva la prueba del sistema.


Oficina personalizada

Pudieron haber hecho preguntas más enfocadas a usabilidad no dudas sobre las especificaciones de la tarjeta. También convendría dejar al usuario que realizara algunas pruebas del sistema.


Galería inteligente

Se pudieron haber hecho más pruebas, en donde no solo abarquen la vitrina; sino poner diferentes vitrinas en donde en algunas tengan sonido, u otra funcionalidad.


Cama inteligente

Las pruebas de usabilidad empleadas fueron las más aptas a este sistema, porque lo principal es evaluar al usuario en cuanto a su comportamiento, y en ese sentido lograron sacar los resultados sin ningún problema..


Casa inteligente 

Debieron meter más énfasis a la interfaz de la aplicación móvil, ya que es el control que utilizará el usuario, por lo tanto ocuparía tener un buen diseño (colores, imágenes, etc.).


Carro NFC

Las pruebas de accesibilidad creo que fueron las adecuadas, para que los usuarios tengan una mejor visibilidad de la aplicación.


Garage Inteligente

Falto hablar más acerca de la seguridad, en cuanto a las pruebas utilizadas me pareció bien reconocer a un familiar o conocido

jueves, 25 de abril de 2013

Laboratorio 7

En este laboratorio se hablara sobre el preprocesamiento de la detección de agujeros.
Se mostraran los histogramas que se generaron.

def binarizado(im, umbral):
w, h = im.size
pix = im.load()
out = Image.new('RGB', (w, h))
out_pix = out.load()
for i in range(w):
for j in range(h):
r, g, b = pix[i, j]
if r > umbral:
out_pix[i, j] = (255, 255, 255)
else:
out_pix[i, j] = (0, 0, 0)
out.save('imgbin.png', 'PNG')
return out
def histogram(im, orientation = VERTICAL):
tmp = im.copy()
pix = np.array(tmp.convert('L'))
if orientation == VERTICAL:
return [sum(x) for x in zip(*pix)]
else:
return [sum(x) for x in pix]
if __name__ == "__main__":
im = Image.open(argv[1]).convert('RGB')
im = binarize(im, 90)
vertical = histogram(im, VERTICAL)
horizontal = histogram(im, HORIZONTAL)
horizontal = list(smooth(np.array(horizontal)))
vertical = list(smooth(np.array(vertical)))
Estos son los datos generados de forma Horizontal:

0 21675
1 21675
2 21675
3 21675
4 21675
5 21675
6 21675
7 21675
8 21675
9 21675
10 21675
11 21666
12 21520
13 21342
14 21106
15 20648
16 20415
17 20222
18 20113
19 20014
20 19906
21 19826
22 19718
23 19666
24 19641
25 19670
26 19721
27 19826
28 19934
29 20043
30 20157
31 20325
32 20595
33 21045
34 21622
35 21674
36 21675
37 21675
38 21675
39 21675
40 21672
41 21613
42 21573
43 21521
44 21395
45 21257
46 21028
47 20517
48 20172
49 19919
50 19769
51 19654
52 19499
53 19371
54 19231
55 19246
56 19344
57 19506
58 19810
59 20164
60 20809
61 21059
62 21103
63 21143
64 21196
65 21297
66 21439
67 21658
68 21675
69 21675
70 21675
71 21671
72 21554
73 21409
74 21171
75 20698
76 20414
77 20196
78 20038
79 19908
80 19796
81 19703
82 19616
83 19548
84 19476
85 19432
86 19361
87 19313
88 19264
89 19177
90 19120
91 19150
92 19171
93 19320
94 19366
95 19414
96 19476
97 19528
98 19600
99 19690
100 19801
101 19927
102 20077
103 20250
104 20439
105 20800
106 21500
107 21667
108 21675
109 21675
110 21675
111 21675
112 21675
113 21675
114 21675
115 21675
116 21675
117 21675
118 21675
119 21675
120 21675
121 21675
122 21675
123 21675
124 21675
125 21675
126 21675
127 21675
view raw horizontal.txt hosted with ❤ by GitHub

En 
Vertical:

0 32640
1 32640
2 32640
3 32640
4 32640
5 32640
6 32640
7 32640
8 32631
9 32509
10 32460
11 32340
12 31871
13 31462
14 31204
15 30901
16 30618
17 30243
18 29838
19 29450
20 29183
21 29325
22 29902
23 30094
24 29998
25 29905
26 29778
27 29681
28 29648
29 29589
30 29509
31 29422
32 29414
33 29393
34 29375
35 29284
36 29256
37 29236
38 29289
39 29369
40 29542
41 29541
42 29416
43 29394
44 29436
45 29492
46 29622
47 29795
48 30062
49 30418
50 30500
51 30591
52 30754
53 30960
54 31285
55 31606
56 31600
57 31732
58 31858
59 31910
60 31948
61 32019
62 32081
63 32181
64 32310
65 32564
66 32637
67 32640
68 32640
69 32640
70 32640
71 32640
72 32640
73 32640
74 32640
75 32640
76 32640
77 32640
78 32640
79 32640
80 32640
81 32640
82 32640
83 32640
84 32640
view raw vertical.txt hosted with ❤ by GitHub

Imagen binarizada:




Imagen Final:


martes, 23 de abril de 2013

Detección de agujeros


Para esta tarea se nos pidió detectar agujeros en una imagen.
Los agujeros que se detecten se deben marcar con un borde morado oscuro y un relleno morado claro.

• Un tono ligeramente diferente en cada agujero.
• Se marca el centro de cada agujero con un punto amarillo.
• Al centro de cada agujero se agrega una etiqueta del ID del agujero.
• El programa imprime un listado que indica para cada ID el tamaño del
agujero (como porcentajes del tamaño de la imágen).
• Publicación en el blog siguiendo las instrucciones de siempre.




Código:

def ag_hist():
linx = []
liny = []
sumx = []
sumy = []
width, height = imagen.size
total = width * height
pixels1 = imagen.load()
addsx = 0
for i in range(height):
addsx = 0
for j in range(width):
addsx = addsx + pixels1[j, i][0]
sumx.append(addsx)
maximox = max(sumx)
minimox = min(sumx)
addsy = 0
for i in range(width):
addsy = 0
for j in range(height):
draw = ImageDraw.Draw(imagen)
addsy = addsy + pixels1[i, j][0]
sumy.append(addsy)
def obtenerMayor(histograma):
votos = dict()
for pos, val in histograma.iteritems():
if val in votos:
votos[val] += 1
else:
votos[val] = 1
e = sorted(votos.items(), key=itemgetter(1))
mayor = e[len(e)-1]
return mayor
def generaHistogramas(imagen):
pixeles = imagen.load()
x,y = imagen.size
imagen_nueva = Image.new("RGB", (x, y))
hx = dict()
hy = dict()
for j in range(y):
sumax = 0
for i in range(x):
p = pixeles[i,j]
prom = math.ceil(( p[0] +p[1] + p[2] ) / 3.0)
imagen_nueva.putpixel((i,j),(int(prom),int(prom),int(prom)))
if i in hy:
hy[i] += prom
else:
hy[i] = prom
sumax += prom
if j in hx:
hx[j] += sumax
else:
hx[j] = sumax
return hx, hy, imagen_nueva
view raw agujeros.py hosted with ❤ by GitHub










Laboratorio 8


Usabilidad del sistema de navegación móvil en instalaciones comerciales


INTRODUCCIÓN

Primero se tiene que considerar que servicios tienen los usuarios en su móvil, debemos considerar qué servicios son los preferidos por los usuarios, las funciones del servicio, la interfaz de la operación, y la vista de la pantalla. Por ejemplo, los servicios humanos de navegación en ambientes al aire libre rara vez requieren aviso a los usuarios sobre los movimientos verticales o posicionales. Sin embargo, en los espacios públicos cerrados, donde es imposible el uso de GPS, como las instalaciones comerciales, los usuarios pueden utilizar los ascensores y escaleras eléctricas para ir a la ubicación de destino.

Para un estudio de usabilidad, se realizó un experimento de campo en los centros comerciales para investigar la posibilidad de utilizar el servicio de navegación interior en un móvil. Nuestro sistema de navegación interior podría ser desarrollado de manera que puede guiar a un usuario alrededor de las instalaciones comerciales. Por otra parte, el sistema debe ser evaluada los usuarios típicos.
Se describe el uso de un sistema de navegación en el interior un teléfono inteligente para utilizar la información de posición en un ambiente interior, y los resultados del experimento.

CARACTERÍSTICAS DE LA NAVEGACIÓN INTERIOR

Se desarrolló un sistema de navegación interior teniendo en cuenta la usabilidad. El servicio del sistema de navegación interior tiene las siguientes características.
● Se muestra la posición actual del usuario en un mapa del piso.
● Cambia el mapa de piso de acuerdo con la posición del usuario.
● Mostrando rutas desde una posición actual a un destino.

La figura muestra la posición actual de un usuario (círculo) en el centro de la pantalla de visualización. A medida que el usuario se mueve de izquierda a derecha en el piso, la posición del usuario en la pantalla se actualiza el sistema de navegación. Por otra parte, cuando el usuario se mueve a otro piso, el sistema reconoce automáticamente el piso actual y cambia el terminal de usuario del mapa para el mapa del piso.


  
Normalmente, una ruta de navegación se muestra en un mapa del piso en la pantalla del terminal, como se muestra en la figura. (a). Cuando el usuario alcanza los puntos de eventos de navegación, tales como una intersección en la ruta o en frente de una escaleras eléctricas o un ascensor, (b) se muestra en la pantalla junto con un pitido. La pantalla presenta orientación para dirigir al usuario hacia el destino. La orientación se muestra el uso de multimedia: el lenguaje natural, las imágenes (por ejemplo, iconos, flechas), y fotografías del lugar. En consecuencia, el usuario puede llegar al destino simplemente siguiendo la orientación. Asesoramiento por el anuncio de la pantalla incluye a la derecha, giro a la izquierda, baja cambiando a través de escaleras mecánicas o la llegada del ascensor, y el destino.






En los últimos años, los servicios de información de posición, tales como los servicios de navegación han recibido mucha atención en el contexto de la vida civil, vida en el hogar, la industria, etc. En situaciones al aire libre, sistemas de navegación para automóviles que especifican propia posición y que proporcionan instrucciones para el destino son útiles como un sustituir a los navegantes humanos a tales lugares. Por otra parte, cuando los sistemas avanzados de información de tráfico se aplican a los sistemas de navegación para automóviles, sino que también es posible muestran una ruta con la consideración de  información de tráfico y accidentes relacionado con la presente.
Sin embargo, debido a que los sistemas tienen dificultades para recibir señales del Sistema de Posicionamiento Global (GPS) en el entorno de interior, se proponen algunos sistemas de posicionamiento alternativos para utilizar el GPS en los lugares en los que es imposible recibir una señal GPS de los satélites reales. Los PseudoliteGPS y GPS Re-radiación. Los sistemas son bien conocidos como sistemas alternativos para utilizar GPS.
Pseudolito-GPS es un sistema que utiliza un transmisor que emite la señal de pseudo-GPS generados por simulaciones. Sin embargo, el sistema tiene dificultades para recibir señales a corta distancia y en lugares distantes de la antena transmisora.
Por otra parte, es difícil de obtener con precisión la sincronización de tiempo correcta entre el sistema y los satélites GPS. El GPS Sistema de Re-radiación recibe señales GPS reales en abierto zonas de campo, luego las envía con un cable, y transmite a ambientes interiores. El sistema no puede ser utilizado en
áreas que no pueden también recibir señales GPS al aire libre. Además, es necesario instalar muchos GPS que reciben antenas al aire libre para elevar la precisión de seguimiento de posición.
Por lo tanto, varios métodos no GPS se aplican a menudo a sistemas de posicionamiento en interiores. Activo Bats y Cricket son técnicas que pueden detectar posiciones mediante la recepción de señales enviado desde dispositivos transmisores. Típicamente, estos sistemas aumentan el número de dispositivos instalados si las áreas para reconocer la posición del usuario se convierten amplio.
En la práctica, RADAR, PlaceLab, Ekahau, y AirLocation II son ​​los métodos que utilizan la fuerza de la radio campo eléctrico de las señales Wi-Fi. La mejora de esos métodos de precisión de posicionamiento es difícil porque el campo eléctrico
la fuerza se vuelve inestable para cambiar de Wi-Fi de radio potencia de transmisión. Ubisense utiliza la banda ancha de ultra la tecnología (UWB) para el posicionamiento, pero es imposible reconocer las auto-posiciones de los usuarios en su propio portátil dispositivos.
Hemos desarrollado un sistema de posicionamiento en interiores en consideración de las deficiencias de los sistemas descritos anteriormente.
El sistema puede funcionar en un terminal de información portátil tal como un teléfono celular mediante la recepción de señales de baliza de radio de dispositivos de baliza instalados en el medio ambiente. El sistema funciona de forma autónoma y sin acceso al servidor, el dispositivos de baliza instalados pueden ser accionados mediante pilas conectados a los dispositivos. En consecuencia, nuestro sistema también preserva la privacidad del usuario.


CONCLUSIÓN

Se desarrolló un sistema para cubrir servicio de navegación que se destina para los teléfonos inteligentes, sino también en los teléfonos celulares.
Por otra parte, se presentaron los resultados de un experimento en Yokohama Landmark Plaza para un sistema de navegación interior realizado con dispositivos de baliza.
Yokohama Landmark Plaza tiene un blow-by, en el centro de cada planta por encima de la planta baja, lo que significa que es difícil para los usuarios que utilizan el servicio de reconocer el movimiento a otro piso. En el edificio, muchos clientes vienen a tiendas y restaurantes, la gente está pasando por el uso de
los pasajes..
Se obtuvieron útiles opiniones sobre el sistema de navegación y servicios de información de posición, tales como la interfaz, su capacidad de operación, y la información de la pantalla. Por otra parte, se confirmó el correcto funcionamiento del servicio de navegación utilizando la información de posición de interior en este entorno real.

Bibliografía:


jueves, 18 de abril de 2013

Laboratorio 6

Para esta entrega de laboratorio se pidio identificar los elipses y marcarlos con un ID/círculo, y sacar porcentaje de los elipses que se detectaran en la tarea anterior.

La detección de elipses se encuentra en mi entrada anterior.

Código:

def det_centro(image):
ellipses = list()
pic = image.load()
for x in range(image.size[0]):
for y in range(image.size[1]):
if pic[x,y] == 255:
ellipses.append((x,y))
ellipses = cluster_edges(ellipses)
centers = list()
print len(ellipses)
for i in ellipses:
x, y = (0, 0)
for j in i:
x += j[0]
y += j[1]
x = int(float(x)/len(i))
y = int(float(y)/len(i))
centers.append((x, y))
return centers
def det_elipse(image_name, output="output.png", size=(128, 128)):
image = Image.open(image_name)
original_image = image.copy()
image.thumbnail(size, Image.ANTIALIAS)
border_points, gradient_values = border_detection(image, output="output.png", umbral=60)
imageEllipse = find_centers(image, border_points, gradient_values, output)
imageEllipse.save('grayscale_'+output)
filtro_umbral(imageEllipse, umbral = 130)
centers = det_centro(imageEllipse)
pic = image.load()
dimensiones = list()
for c in centers:
actual = list(c[:])
horizontal = 0
while pic[tuple(actual)] != (255, 255, 255):
actual[0] += 1
horizontal += 1
if horizontal > size[0]:
break
actual = list(c[:])
vertical = 0
while pic[tuple(actual)] != (255, 255, 255):
actual[1] += 1
vertical += 1
if vertical > size[1]:
break
dimensiones.append((horizontal, vertical))
razon = list(image.size)
image = original_image
razon[0] = float(image.size[0]) / razon[0]
razon[1] = float(image.size[1]) / razon[1]
draw = ImageDraw.Draw(image)

Etiquetas e identificación en elipses.




Porcentaje:



martes, 16 de abril de 2013

Detección de elipses

En esta entrega se nos pidio detectar elipses en una imagen.
Para realizar esta detección es necesario realizar la detección de bordes, en tareas anteriores ya hemos realizado esto.
Primero realizaremos la detección de bordes y se crea un filtro de estos puntos con respecto a los diferentes gradientes.




Se calcula centro:


def calcula_centro(pixel1, pixel2, grad1, grad2, image, draw_line):
tang1 = [grad1, pixel1[1]-(grad1*pixel1[0])]
tang2 = [grad2, pixel2[1]-(grad2*pixel2[0])]
x = float(tang2[1]-tang1[1]) / (tang1[0]-tang2[0])
y = tang1[0]*x+ tang1[1]
interseccion = (x, y)
medio = ( (pixel1[0]+pixel2[0])/2, (pixel1[1]+pixel2[1])/2 )
if (interseccion[0]-medio[0]) != 0:
m = (interseccion[1]-medio[1] ) / (interseccion[0]-medio[0])
else:
m = 1000
b = medio[1] - (m*medio[0])
center_line = [m, b]
if (interseccion[0]-medio[0]) < 0.0:
direccion = 1
else:
direccion = -1
draw_line.draw(center_line, inicio = medio[0], direccion = direccion)





Se detecta elipse:

def deteccion_elipse():
image = Image.open(image_name)
original_image = image.copy()
filtro_umbral(imageEllipse, umbral = 130)
centers = detecta_centro(imageEllipse)
pic = image.load()
dimensiones = list()
for c in centers:
actual = list(c[:])
horizontal = 0
while pic[tuple(actual)] != (255, 255, 255):
actual[0] += 1
horizontal += 1
if horizontal > size[0]:
break
actual = list(c[:])
vertical = 0
while pic[tuple(actual)] != (255, 255, 255):
actual[1] += 1
vertical += 1
if vertical > size[1]:
break
dimensiones.append((horizontal, vertical))
razon = list(image.size)
image = original_image
razon[0] = float(image.size[0]) / razon[0]
razon[1] = float(image.size[1]) / razon[1]
draw = ImageDraw.Draw(image)
r = 5
for i in range(len(centers)):
nombre = 'N'+str(i+1)
x = int(centers[i][0]*razon[0])
y = int(centers[i][1]*razon[1])
draw.text((x, y+(r*2)), nombre, fill=(255, 0, 0), font=font)
draw.ellipse((x-dimensiones[i][0]*razon[0], y-dimensiones[i][1]*razon[1], x+dimensiones[i][0]*razon[0], y+dimensiones[i][1]*razon[1]), outline = random_orange())
draw.ellipse((x-r, y-r, x+r, y+r), fill=(255, 0, 0))
image.save(output)

Imagen de entrada:


Salida:
Imagen de entrada:



Salida: