elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13
11  Programación / Scripting / Re: [Error][Python] No module named bluetooth._bluetooth en: 20 Abril 2017, 06:01 am
Buenas. Instale Pybluez (el de Python2.7, que es el que estoy usando) y pensaba que eso era todo...
Estoy equivocado?

Gracias


Hola, no, en teoría debe funcionar. Puede ser que hubo algún problema en la instalación de la libreria o que no sea la libreria adecuada.

Puedes intentar abriendo Python en una terminal e intentando importar la libreria y ver si ocurre el error.

Saludos
12  Programación / Scripting / Re: unicode en python en: 18 Abril 2017, 01:17 am
ok gracias uso windos xp 2002 servi pack 3 , uso  python 2.7.13 y escribo "codigo" es sublime text 2  uso sublime text accediendo  a pestaña tools > sublime REPL Y pythno, el proble es cuando escribo codigo para ejecutarlo desde cmd. gracias desde ante mano


Hola, sigues sin ser claro con tu problema: estás intentado usar la "ñ" como parte del nombre de una variable o como una cadena para imprimirla?

Si es el primer caso, no puedes hacerlo (en Python 3 sí)
Si es el segundo caso, ya tincopasan te respondió como solucionarlo.

Sería mejor si colocas el código que tienes y el error que Python está arrojando.
13  Programación / Scripting / Re: [Error][Python] No module named bluetooth._bluetooth en: 18 Abril 2017, 01:13 am
Hola, Python sí es multiplataforma, pero no puede hacer milagros. Y con esto me refiero a que debes instalar las dependencias, ene ste caso las librerias necesarias para que funcione tu script.

El error básicamente te dice que no está instalada la libreria bluetooth cuando la instales no debe aparecer el error.

Saludos!
14  Programación / Scripting / Re: Visión artificial con Python en: 16 Abril 2017, 08:42 am
Hola tincopasan, gracias por la anotación, la verdad en esta entrada no pretendía explicar esa función, solo mostrar que efectivamente, las imágenes no son más que matrices de números, pero pensándolo bien, creo que quedaría mejor introducir también la función acá, gracias de nuevo y cuando tenga algo de tiempo, edito la entrega.

Saludos!
15  Programación / Scripting / Re: Visión artificial con Python en: 11 Abril 2017, 21:50 pm
Hola PUAROT, primero, gracias por responder y sí, por el momento están planeadas un par de entregas más.

Con respecto a tu duda, no hay problema si lo instalas con pip3 de hecho yo también estoy trabajando con Python 3.6.

Muchas gracias por el comentario, sí opencv-python es cómo se encuentra OpenCV en el pip, la embarré cuando escribí el artículo. De nuevo gracias por haber notado ese error (espero no hallan más).

Si tienes algún otro problema o duda no dudes en comentarlo.

Saludos!
16  Programación / Scripting / Re: Visión artificial con Python en: 11 Abril 2017, 07:31 am
Fuente: http://elblogdeonce.blogspot.com.co/2017/04/parte-ii-vision-artificial-primeros.html

Una introducción a OpenCV y Numpy


En esta segunda entrega sobre visión artificial con Python trataremos una introducción a OpenCV y Numpy. Crearemos imágenes desde cero y abriremos imágenes ya existentes.

¿Qué es OpenCV?

OpenCV (Open source Computer Vision) es un libreria bajo la licencia BSD diseñada y optimizada para hacer visión por computador y aprendizaje automático. Está disponible para los lenguajes C, C++, Java y Python. Además puede correr sobre Windows, Linux, MAC, IOS y Android.

La documentación de esta libreria se puede consultar (y descargar) desde acá.

¿Qué es NumPy?

Numpy es una libreria optimizada para hacer computación científica con Python, especialmente algebra lineal (matricial) que es lo que nos interesará para hacer visión por computador.

¿Es necesario usar estas librerias?

No, la respuesta es un rotundo no. La visión por computar es básicamente operaciones matriciales, operaciones que podemos implementar no solo en Python puro y duro, sino que en casi cualqueir otro lenguaje.

La ventaja, entonces, está en que estas librerias fueron creadas y son mantenidas por verdaderos expertos en el tema (científicos de la computación, matemáticos, etc) lo que da como resultado algoritmos realmente optimizados.

Configurando el entorno

Durante esta serie de entregas necesitaremos básicamente tres librerias:

OpenCV: Para hacer visión por computador.
Numpy: Para hacer operaciones matriciales.
Matplotlib: Para graficar (especialmente histogramas)

Todas estas librerias están disponibles para descargar usando pip.

Instalando los paquetes necesarios


Código
  1. # pip install opencv-python
  2.  
  3. # pip install numpy
  4.  
  5. # pip install matplotlib

¿Estamos listos? Entonces... comencemos

Como vimos en la entrega anterior, una imagen no es más que un sistema de matrices donde cada entrada representa un nivel de gris para cada píxel.

Creando nuestra primer imagen

Como ya hemos mencionado antes una imagen no es más que una matriz de valores numéricos. Demostremos esto con un simple ejemplo.

Código
  1. import numpy as np
  2. import cv2
  3.  
  4. # Creamos una matriz de unos de 100 filas y 100 columnas
  5. imagen = np.ones((100, 100, 3), np.uint8)
  6. # Mostramos la imagen
  7. cv2.imshow("Mi primer imagen", imagen)
  8. # Guardamos la imagen donde esta el script
  9. cv2.imwrite("Mi primer imagen.png", imagen)
  10. cv2.waitKey()  # Pausa la ejecuación hasta que se presione una tecla
  11. cv2.destroyAllWindows()  # Cierra todas las ventanas abiertas

Una vez ejecutamos el script anterior tenemos que el resultado es el siguiente:


Imagen creada con Numpy

En las primeras dos líneas importamos numpy (y le asignamos el alias np, para no tener que estar escribiendo numpy todo el rato) y OpenCV (cv2).

Luego creamos una matriz de unos con la función ones de numpy. Si imprimimos imagen (print(numpy)) veremos que, efectivamente, es una matriz llena de unos.

Citar
numpy.ones(shape, dtype=None): Crea un array de dimensión sahape donde cada entrada es del tipo dtype.

shape: es la forma que tendrá el array, si solo tiene un elemento será una lista, dos elementos (n, m) representan una matriz con n filas y m columnas. Y con tres elementos  (n, m, z) n filas, m columnas y z representa la cantidad de matrices o canales que tendrá el array.

En este ejemplo creamos una matriz llena de unos con 100 filas, 100 columnas y un solo canal donde todas las entradas son números enteros de 8 bits.

Citar
cv2.imshow(nombre, img): Muestra la imagen img. nombre es una cadena que representará la ventana donde se muestra la imagen. img debe ser una matriz.

cv2.imwrite(nombre, img): Guarda en el disco duro la matriz img como una imagen con el nombre nombre

Entonces... ¿cómo se representa una imagen a color?.

En el ejemplo anterior creamos una imagen de un solo canal (una sola matriz) lo que significa que solo podemos representar un color. Para este caso el gris o escala de grises.

Si queremos representar una imagen a color, vamos a necesitar más canales (ya no solo una matriz) dependiendo del modelo de color con el que queremos trabajar.

Código
  1. import numpy as np
  2. import cv2
  3.  
  4. # Creamos la matriz de uno 100 filas
  5. # 100 columnas y 3 canales
  6. imagen = np.ones((100, 100, 3), np.uint8)
  7. # agregamos color a la imagen
  8. # A todas las columas pero primeras 25 filas
  9. # Asigna el valor (255, 0, 0)
  10. imagen[:, 0:25] = (255, 0, 0)
  11. # A todas las columnas pero desde la fila
  12. # 25 hasta la 50 asigna el valor (0, 255, 0)
  13. imagen[:, 25:50] = (0, 255, 0)
  14. # A todas las columnas pero desde la fila
  15. # 50 hasta la 75 asigna el valor (0, 0, 255)
  16. imagen[:, 50:75] = (0, 0, 255)
  17.  
  18. # Guardamos la imagen en el disco duro
  19. cv2.imwrite("imagen_color.png", imagen)
  20. # Mostramos la imagen
  21. cv2.imshow("imagen", imagen)
  22. # Esperamos que se presione una tecla
  23. cv2.waitKey()
  24. # Cerramos todas las ventanas
  25. cv2.destroyAllWindows()

El resultado es el siguiente:



Imagen a color generada con Numpy.

Y ahora sí obtenemos una imagen a color usando solamente numpy.

El cambio en este código está en la forma del array shape (100, 100, 3) donde el tres representa la cantidad de canales de la imagen, como trabajamos con el modelo RGB necesitamos tres canales, uno para el rojo, otro para el verde y un último para el azul.

OpenCV por defecto trabajo con el modelo BGR que es el mismo modelo RGB, pero con los valores invertidos.

Otra cosa nueva es la forma de asignar los colores a la imagen, esta forma se llama indexing y es muy parecido al slicing solo que para arrays multidimencionales. El formato es el siguiente:

Citar
matriz[a:b, c:d] = tupla

Donde a representa la primer fila a seleccionar y b la última fila a seleccionar. c representa la primer columa a seleccionar y d la última columna a seleccionar.

Si no se especifica a o c se selecciona desde el primer elemento.
Si no se especifica b o d se selecciona hasta el último elemento.

tupla debe ser una tupla o lista de elemetos a asignar a la matriz en la posicion señanala. Debe tener la misma longitud que canales la imagen. El primer elemento es asignado a la primer matriz y así sucesivamente hasta el último valor que es asignado a la última matriz.

Leer una imagen con OpenCV

OpenCV cuenta con una función que nos permite leer una imagen desde el disco y nos devuelve un array de numpy.

Citar
cv2.imread(name, flag): Lee la imagen name y devuelve una matriz.

Si el parámetro flag es positivo OpenCV interpretará la imagen como si tuviera tres canales y por lo tanto devolvera una matriz con tres canales.

Si el parámetro es cero  OpenCV leerá la imagen en esacala de grises y por lo tanto devolverá una matriz de un solo canal.

Si el parámetro es negativo OpenCV leerá la imagen tal cual como es y los canales de la matriz resultante dependen de la imagen a leer.


Obteniendo el tamaño de una imagen


Luego de abrir una imagen con OpenCV, el resultado es un array de numpy, por lo que tenemos todas las ventajas que nos brinda los objetos de numpy, uno de ellos es la propiedad shape.

La propiedad shape devuelve una lista que indica la cantidad de filas, columnas y canales que tiene un array respectivamente. Si la lista solo contiene dos elementos, indica que el array solo tiene un solo canal.

Su uso es muy simple:
Código
  1. import numpy as np
  2. import cv2
  3.  
  4. #  Leemos la imagen
  5. img = cv2.imread("imagen.jpg")
  6. #  Imprimimos el tamanio
  7. print(img.shape)
  8.  

Comprendiendo el flag de la función cv2.imread()

Haciendo un par de cambios al ejemplo anterior, podemos comprender mejor el significado del falg en la función cv2.imread()
Código
  1. import numpy as np
  2. import cv2
  3.  
  4. img = cv2.imread("logo.png")
  5. print("Sin flag:", img.shape)
  6.  
  7. img = cv2.imread("logo.png", -1)
  8. print("flag negativo:", img.shape)
  9.  
  10. img = cv2.imread("logo.png", 0)
  11. print("flag cero:", img.shape)
  12.  
  13. img = cv2.imread("logo.png", 1)
  14. print("flag positivo:", img.shape)

El resultado será algo así:

Citar
Sin flag: (99, 82, 3)
flag negativo: (99, 82, 4)
flag cero: (99, 82)
flag positivo: (99, 82, 3)

En todos los casos tenemos una matriz de 99 filas y 82 columnas, pero con distintos canales. Analicemos el significado.

flag negativo: La imagen se interpreta tal cual como es, por lo que tenemos tres canales para el color y uno más para la transparencia.
flag cero: La imagen se interpreta a escala de grises y por lo tanto sólo se necesita un canal.
flag positivo: La imagen se interpreta como si sólo tuviera tres canales (elimina la transparencia).


Diferencias según el flag.

Saludos.
Once.
17  Programación / Scripting / Visión artificial con Python en: 9 Abril 2017, 05:41 am
Hola chicos, tengo  planeado hacer una serie de entregas acerca de visión artificial con Python y OpenCV en mi blog, y me gustaría si no hay problema, también publicarlas en el foro. Cabe aclarar que se aceptan sugerencias y recomendaciones.




El objetivo de esta entrada (y en general de esta serie de entradas) es llevar la visión artificial a cualquier usuario de Python gracias  a las libreria OpenCV y Numpy. En esta entrada en concreto se abordará un poco de la teoría sobre la visión artificial pero lo suficiente como para comprender el material de las próximas entradas.



Representación digital de las imágenes

Antes de comenzar, debemos tener en cuenta cómo están representadas las imágenes o dicho de otra manera, cómo es una imagen para el computador.

  • Lo primero y más importante es que una imagen no es más que una matriz numérica (para imágenes en blanco y negro o a escala de grises) o varias matrices para imágenes a color. A cada una de estas matrices las llamamos componente.
  • Cada entrada de ésta matriz es un número que representa el color que debe tener la imagen en esa coordenada y que llamamos píxel y al valor de cada píxel lo llamamos nivel de gris.

Sistema de visión artificial

Un sistema de visión artificial generalmente se puede dividir en cinco etapas principales:

  • Adquisición imágenes: Es la etapa donde se forma y adquiere la imagen (rayos x, cámaras tradicionales, cámaras infrarojas, ultrasonido, etc).
  • Pre-procesamiento: Es la etapa que busca mejorar la calidad de la imagen para que pueda ser usada después.
  • Segmentación: Es la etapa donde se separan los distintos objetos presentes en la imagen.
  • Extracción de caracteristicas:  Es la etapa donde se obtienen las caracteristicas de los objetos previamente segmentados (color, dimensiones, textura).
  • Toma de desiciones: Es la etapa donde, a partir de los resultados de la etapa anterior se toma una decisión, como por ejemplo mover un brazo robótico a una coordenada específica.


Representación del color
Modelo de color

Un modelo de color es un modelo mate mático que permite representar los colores en forma numérica.

Existen varios modelos de color que aunque se puede representar la misma imagen usando varios modelos, en visión artificial es útil muchas veces representar las imágenes usando modelos diferentes al RGB ya que distintos canales de distintos modelos pueden resaltar detalles diferentes aunque la información completa no cambie.

Algunos modelos
RGB
El modelo RGB (Red, Green and Blue) es un modelo en el que los colores pueden ser representados por un vector de tres posiciones que representan los niveles de intensidad de rojo, verde y azul para cada pixel. El modelo RGB es un modelo aditivo.
CMYK
El modelo CMYK (Cyan, Magenta, Yellow, Key) es un modelo en que los colores pueden ser representados por un vector de cuatro posiciones que a su vez representan los niveles de cian, magenta, amarillo y negro para cada pixel. Éste es un modelo sustractivo.


El histograma
El histograma es un gráfico que nos muestra las frecuencias de ocurrencia de los niveles de gris en una imagen.

El histograma es una herramienta muy importante (como veremos en las siguientes entradas) ya que nos permite hacernos una idea de qué operaciones debemos hacer a la imagen para mejorar su calidad, especialmente durante la etapa de preprocesamiento.



Imagen y su histograma.

Como se puede observar en la imagen anterior, en el eje de las x está representado el nivel de gris que puede tomar cada píxel (para una imagen de 8 bits, hay
2^8= 256 formas de representar los niveles de gris) y en el eje de las y está representado la cantidad de píxeles que hay por cada nivel de gris.

¿Qué es el ruido?
El ruido en las imágenes es información no deseada que contamina las imágenes. El ruido puede ser varios tipos y ser generado en la adquisición de la imagen por defectos del sensor o por errores o interferencias durante la transmisión de la imagen.

El ruido puede llegar a ser un gran problema cuando estamos haciendo visión por computador, especialmente en la etapa de segmentación, por eso uno de los principales objetivos de la etapa de preprocesamiento es intentar reducir el ruido de una imagen.

Algunos tipos de ruido.
Ruido gaussiano
Es el ruido cuya aparición sigue una distribución de probabilidad normal (o gaussiana).

Este tipo de ruido suele aparecer durante la adquisición de la imagen y se debe principalmente a condiciones de baja iluminación y/o altas temperaturas. Y durante la transmisión a causa del ruido electrónico en los circuitos.


Imagen sin ruido. Wikipedia


Imagen ruido gaussiano. Wikipedia.


Ruido sal y pimienta
También conocido como ruido impulsivo es ruido que consiste en pixeles  blancos sobre regiones negras (ruido tipo sal) y/o pixeles negros sobre regiones claras (ruido tipo pimienta).

Este tipo de ruido se debe a problemas en la conversión de la imagen en el sensor y/o errores en la transmisión.


Imagen con ruido impulsivo.


Referencias
[1] https://en.wikipedia.org/wiki/Gaussian_noise
[2] https://en.wikipedia.org/wiki/Image_noise

Fuente: https://elblogdeonce.blogspot.com.co/2017/04/parte-i-vision-artificial-un-poco-de.html

Saludos!
18  Programación / Scripting / Re: Generador de diccionario en Python en: 8 Abril 2017, 21:04 pm
Hola chicos, sé que ya está resuelta la duda, pero hay una forma más fácil de hacer, teniendo en cuenta que los números pares están dados por la expresion: 2n y los impares por 2n+1:

Código
  1. {2*x: 2*x+1 for x in range(100)}

Saludos!
19  Programación / Scripting / Re: Duda con Python en: 5 Marzo 2017, 22:50 pm
Hola,

Primero Python no te permite crear variabls en tiempo de ejecución (que es lo que estás intentando hacer) por lo menos no de esta manera.

Segundo, aunque es posible hacerlo, no es muy recomendable, yo te aconsejaria usar un diccionario donde la key sea el "nombre de la variable" y el value, el valor que quieres que tenga esa variable.

El código te quedaría algo así:

Código
  1. paises = {"Alaska": 1,
  2.    "Yukon": 1,
  3.    "Oregon": 1}
  4.  
  5. # Acceder a un valor del diccionario
  6. print(paises["Alaska"])

Saludos!
20  Programación / Scripting / Re: IDE Python 3.x en: 22 Enero 2017, 03:08 am
Hola, personalmente te recomiendo:

1) Ninja-IDE (http://ninja-ide.org)
2) IEP (http://www.pyzo.org/iep.html)
3) Spyder (https://github.com/spyder-ide/spyder)

Estos son los que yo personalmente uso cuando tengo un proyecto. Son livianos, open-source y muy cómodos para trabajar.

También puedes encontrat una lista en la página de Python: https://wiki.python.org/moin/IntegratedDevelopmentEnvironments

Saludos!
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines