Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

All Posts By Manuel Ignacio López Quintero

Instalar OpenCV 3.1 en Ubuntu 16.04 LTS

Hace aproximadamente un año y medio que publiqué un tutorial sobre cómo Instalar OpenCV 3.0.0 en Ubuntu 14.04 LTS.

En este caso os traigo el mismo tutorial, en inglés pero muy fácil de seguir, pero verificado para instalar OpenCV 3.1.0 en Ubuntu 16.04 LTS. Éste es el enlace: Install OpenCV on Ubuntu or Debian.

El script de instalación incluído en el tutorial ha sido verificado para los siguientes sistemas operativos y versiones de OpenCV:

· Ubuntu 14.04 LTS.

¿Qué tiene que mejorar primordialmente Linux de escritorio para ganar cuota de mercado?

Nota: en aras de la simplificidad, usaré el término Linux de escritorio a una distribución de escritorio GNU/Linux. Como es conocido, la controversia sigue presente siendo respetable cada una de las opiniones, hasta aquellas que defienden denominaciones como GNU/Apache/etcétera/Linux.

No hay un referente claro para determinar el porcentaje de usuarios que utilizan Linux de escritorio. Hay varios informes como el que ofrece StatCounter Global Stats. Otro informe se puede ver en la encuesta sobre hardware y software que Steam que hace periódicamente. En estas dos se puede observar claramente cómo Linux de escritorio está en porcentajes por debajo del 7 % o por debajo del 1 %.

Crea un vídeo a partir de imágenes desde tu terminal Linux

Para mostrar claramente los resultados de mis experimentos, he tenido que realizar vídeos que muestren de manera clara los resultados de mis ejecuciones.

Para ello, he usado una de las herramientas más versátiles: ffmpeg. Para instalarlo sólo tienes que ejecutar:

sudo apt-get install ffmpeg

Para mostrar el uso de ffmpeg para convertir imágenes a vídeo os lo mostraré mediante un ejemplo que podéis modificar a vuestro antojo.

Con este ejemplo se crea un vídeo de 5 segundos a 30 FPS utilizando 15 imágenes. Para dicho ejemplo, las imágenes deben seguir la secuencia: 000.png,

Aplicar una máscara binaria en una imagen en Python

Si trabajas en Visión Artificial, muchas veces es necesario aplicar una segmentación en una imagen mediante una máscara binaria.

En un principio sólo necesitas las librerías de Numpy y Matplotlib de Python.

Aquí os dejo un script de ejemplo donde uso Scipy para cargar una máscara desde GNU Octave/MATLAB:

import numpy as np
import scipy.io as sio # Permite cargar un fichero de GNU Octave/MATLAB
from matplotlib import pyplot as plt

image = plt.imread(‘entrada.png’)
bin_mask = sio.loadmat(‘mask.mat’)[‘bin_mask’].astype(‘bool’)

mask = np.dstack((bin_mask, bin_mask, bin_mask))

image[~mask] = 0
plt.imsave(‘salida.png’, image)

Creo que ésta es la manera más elegante de hacerlo.

Renombrar ficheros a números en orden ascendente en Python

Últimamente para mis scripts, en vez de utilizar Bash u otras alternativas como GNU/Octave, estoy usando el lenguaje de programación Python. Para mí, Python es un lenguaje robusto y muy potente donde destaca en él algo que me fascina: la facilidad para leer código y reusarlo.

En este caso me gustaría compartir con vosotros un script que he creado hoy en el que he tenido que renombrar unas imágenes el siguiente orden: ‘00000.jpg’, ‘00001.jpg’, ‘00002.jpg’, ‘00003.jpg’, etc. Para ello se lee en una carpeta por orden nominal las imágenes jpg que lo contienen y después se procede a renombrarlos numéricamente y ascedentemente según el identificador que le hayamos pasado que en este caso es el 0.

Extraer o descomprimir una imagen ISO desde la terminal

Cuando trabajamos en un ordenador con GNU/Linux que no tenga interfaz gráfica y necesitamos extraer o descomprimir una imagen ISO desde la terminal, lo mejor es recurrir a la aplicación 7-Zip.

Primero comprueba que tienes instalado 7-Zip (por ejemplo en Debian o Ubuntu) y todas sus utilidades:

sudo apt-get install p7zip p7zip-full

Por último, descomprime la imagen ISO desde la terminal:

7z x nombre_de_la_imagen.iso

Si el archivo no es muy grande, en pocos minutos tendrás extraído la imagen ISO en tu disco duro.

Ian Murdock, fundador de Debian, ha fallecido

ian_murdock

Ian Murdock, fundador del proyecto Debian, ha fallecido a la edad de 42 años.

Hace tiempo que me pasé de Ubuntu, que no deja de ser un derivado de Debian, a Debian dando 5 razones por aquel entonces. Con el tiempo mis razones se cuentan por decenas.

Tanto para trabajo como para ocio, paso prácticamente todos los días horas y horas delante de Debian.

Por todo esto y mucho más, muchísimas gracias, Ian, de verdad.

Raspberry Pi Zero, el ordenador de 5 dólares

La Raspberry Pi Foundation ha anunciado la Raspberry Pi Zero, un ordenador de 5 dólares que hará las delicias de los amantes de los Micro-PCs.

Las características son las siguientes:

· Procesador Broadcom BCM2835.
· Núcleo 1 GHz ARM11 (40% más rápido que la Raspberry Pi 1).
· 512MB de LPDDR2 SDRAM.
· Un conector para tarjetas micro-SD.
· Un puerto mini-HDMI con 1080p60 de salida de vídeo.
· 2 Micro-USB sockets para datos y alimentación.
· 40-pin GPIO.
· Dimensiones de 65 mm x 30 mm x 5 mm.

Intel Skylake Graphics: Windows 10 aplasta a Ubuntu en rendimiento

Desde casi siempre, el rendimiento en GNU/Linux sobrepasa al de Windows en todos los aspectos. Sin embargo, Michael Larabel, de Phoronix, ha realizado varios Benchmarks y ha demostrado, muy a pesar de todos nosotros, que Windows 10 gana por goleada a Ubuntu en cuestión de rendimiento gráfico.

Lo que compara Michael es la última generación de los procesadores gráficos de Intel, exactamente un Core i5 6600K HD Graphics 530, con los siguientes sistemas operativos: Windows 10 Pro y Ubuntu 15.10, ambos de 64 bits. Para comparar cómo funciona el procesador gráfico en uno y otro sistema operativo se utiliza las últimas implementaciones de OpenGL: Intel 20.19.15.4300 graphics driver para Windows y Mesa 11.1-devel para Ubuntu (con el núcleo Linux 4.3.0 stable).

Curso breve de aprendizaje supervisado con Theano en Linux Hispano

El aprendizaje supervisado es la tarea de aprendizaje de una máquina para inferir una función a partir de datos de entrenamiento etiquetados.

Theano es una librería que te permite definir, optimizar y evaluar expresiones matemáticas de manera eficiente. Al estar basado en Python, resulta una herramienta muy útil y fácil de usar para el desarrollo de modelos mediante aprendizaje supervisado, entre otras muchas más cosas.

Desde Linux Hispano, te presentamos un breve curso donde aprenderás a crear una regresión lineal, una regresión logística y varias redes neuronales artificales.

Enlace: Curso breve de aprendizaje supervisado con Theano.

Red neuronal convolucional – Theano

Aquí os dejo con un ejemplo (red_neuronal_convolucional.py) muy sencillo y claro para realizar una red neuronal convolucional.

import theano
from theano import tensor as T
from theano.sandbox.rng_mrg import MRG_RandomStreams as RandomStreams
import numpy as np
from Load import mnist
from theano.tensor.nnet.conv import conv2d
from theano.tensor.signal.downsample import max_pool_2d

srng = RandomStreams()

def floatX(X):
return np.asarray(X, dtype=theano.config.floatX)

def init_weights(shape):
return theano.shared(floatX(np.random.randn(*shape) * 0.01))

def rectify(X):
return T.maximum(X, 0.)

def softmax(X):
e_x = T.exp(X – X.max(axis=1).dimshuffle(0, ‘x’))
return e_x / e_x.sum(axis=1).dimshuffle(0, ‘x’)

def dropout(X, p=0.):
if p 0:
retain_prob = 1 – p
X *= srng.binomial(X.shape, p=retain_prob, dtype=theano.config.floatX)
X /= retain_prob
return X

def RMSprop(cost,

Red neuronal moderna – Theano

Aquí os dejo con un ejemplo (red_neuronal_moderna.py) muy sencillo y claro para realizar una red neuronal moderna.

import theano
from theano import tensor as T
from theano.sandbox.rng_mrg import MRG_RandomStreams as RandomStreams
import numpy as np
from Load import mnist

srng = RandomStreams()

def floatX(X):
return np.asarray(X, dtype=theano.config.floatX)

def init_weights(shape):
return theano.shared(floatX(np.random.randn(*shape) * 0.01))

def rectify(X):
return T.maximum(X, 0.)

def softmax(X):
e_x = T.exp(X – X.max(axis=1).dimshuffle(0, ‘x’))
return e_x / e_x.sum(axis=1).dimshuffle(0, ‘x’)

def RMSprop(cost, params, lr=0.001, rho=0.9, epsilon=1e-6):
grads = T.grad(cost=cost, wrt=params)
updates = []
for p, g in zip(params, grads):
acc = theano.shared(p.get_value() * 0.)
acc_new = rho * acc + (1 – rho) * g ** 2
gradient_scaling = T.sqrt(acc_new + epsilon)
g = g / gradient_scaling
updates.append((acc,

Red neuronal clásica – Theano

Aquí os dejo con un ejemplo (red_neuronal_clasica.py) muy sencillo y claro para realizar una red neuronal clásica.

import theano
from theano import tensor as T
import numpy as np
from Load import mnist
from scipy.misc import imsave

def floatX(X):
return np.asarray(X, dtype=theano.config.floatX)

def init_weights(shape):
return theano.shared(floatX(np.random.randn(*shape) * 0.01))

def sgd(cost, params, lr=0.05):
grads = T.grad(cost=cost, wrt=params)
updates = []
for p, g in zip(params, grads):
updates.append([p, p – g * lr])
return updates

def model(X, w_h, w_o):
h = T.nnet.sigmoid(T.dot(X, w_h))
pyx = T.nnet.softmax(T.dot(h, w_o))
return pyx

trX, teX, trY, teY = mnist(onehot=True)

X = T.fmatrix()
Y = T.fmatrix()

w_h = init_weights((784,

Regresión logística – Theano

Aquí os dejo con un ejemplo (regresion_logistica.py) muy sencillo y claro para realizar una regresión logística.

import numpy as np
import theano
from theano import tensor as T
from Load import mnist

def floatX(X):
return np.asarray(X, dtype=theano.config.floatX)

def init_weights(shape):
return theano.shared(floatX(np.random.randn(*shape) * 0.01))

def model(X, w):
return T.nnet.softmax(T.dot(X, w))

trX, teX, trY, teY = mnist(onehot=True)

X = T.fmatrix()
Y = T.fmatrix()

w = init_weights((784, 10))

py_x = model(X, w)
y_pred = T.argmax(py_x, axis=1)

cost = T.mean(T.nnet.categorical_crossentropy(py_x, Y))
gradient = T.grad(cost=cost, wrt=w)
update = [[w, w – gradient * 0.05]]

train = theano.function(inputs=[X, Y], outputs=cost, updates=update,
allow_input_downcast=True)
predict = theano.function(inputs=[X],