lunes, 6 de julio de 2015

Compilando OpenCV 3.0 en MacOS/Linux

OpenCV es una biblioteca libre de visión artificial que nos permite realizar desde un procesado simple de imágenes hasta la detección de caras y objetos.

Recientemente se ha publicado su versión 3.0 que incluye entre otras novedades:

  • Más de 1500 parches.
  • Reconocimiento de texto.
  • Integración con la librería VTK (visualizaciones 3D).
  • Uso transparente de GPU en varios algoritmos.
  • Nuevos algoritmos usados en fotografía (HDR, inpainting, edge-aware filters, superpixels, …)
  • La documentación usa ahora Doxygen.

A continuación os dejo una serie de pasos para poder utilizar todas estas funcionalidades en nuestros programas tanto en MacOS como en Linux:

Paso 0. Descargar lo que necesitamos

Para trabajar con ella en primer lugar debemos compilarla e instalarla en nuestro sistema. Para ello necesitamos descargar:

. Código fuente OpenCV para UNIX/MacOs
. Descargar e instalar CMake
. En MacOs también necesitaremos tener instalado XCode.

Paso 1. Configure y Generate

Después solo necesitamos abrir el interfaz de CMake, seleccionar el directorio donde hallamos descomprimido OpenCV, el directorio donde queramos generar los makefiles  y configurar y generar los makefiles. El interfaz de CMake nos permite también seleccionar opciones adicionales. Después pulsamos Configure y seleccionamos el compilador de UNIX (para que nos genere los makefiles) y si todo va bien CMake se encargará de buscar automáticamente las referencias a las librerías adicionales necesarias.

Si todo va bien podremos generar el proyecto pulsando Genreate. Si algo va mal tendremos que configurar a mano las rutas a las librerías que falten.


Paso 2. Make install

Así de simple, abrimos el terminal, vamos a la carpeta en la que hallamos generado nuestros makefiles y escribimos:

$ make install

Paso 3. Probarlo

Para ello escribimos un sencillo programa que muestra la captura de nuestra web cam. Para ello en primer lugar escribimos el programa:

#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
    VideoCapture cap(0); // Abre la captura de la webcam. 
    namedWindow("Captura",CV_WINDOW_AUTOSIZE); // Crea una ventana
    while (1) {
    Mat frame;
        bool bSuccess = cap.read(frame); // realiza captura
        imshow("Captura", frame); 
  if (waitKey(30) == 27) // Lee la entrada y si pulsamos Esc sale del programa
        {
            cout << "esc key is pressed by user" << endl;
            break; 
        }
    }
    return 0;
}

Por otro lado generamos un archivo CMakeLists.txt para generar los makefiles para este programa del mismo modo que lo hicimos para compilar OpenCV:

cmake_minimum_required(VERSION 2.8)

project( TestCV )
find_package( OpenCV REQUIRED )
add_executable( TestCV cvtest.cpp )
target_link_libraries( TestCV ${OpenCV_LIBS} )


Y finalmente los generamos y compilamos usando make. El resultado obtenido será similar (o mejor) a:




domingo, 21 de diciembre de 2014

Comandos básicos Bower

Bower es un manejado de paquetes para la Web. Aquí os dejo los comandos básicos para no olvidarlos cuando estamos trabajando en alguno de nuestros proyectos:

Instalación de bower

> npm install -g bower

Instalación de paquetes 

> bower install <package>

> bower install <package>#X.X.X

> bower install git://package/addres/package.git

Instalación de paquetes después de hacer init

> bower install <paquete> —save

Instalación de paquetes de un proyecto

> bower install 

Mostrar paquetes instalados 

> bower list —path

Para iniciar un nuevo fichero de configuración 

> bower init


martes, 16 de diciembre de 2014

Cambiar resolución Ubuntu 14.04 en VirtualBox

Desde hace poco trabajo en OsX y me ha tocado instalar una maquina virtual en Linux para trabajar en un proyecto. Pero me he encontrado con el primer problema y es que la resolución por defecto es de 640 x 480 y así no hay quien trabaje. Por suerte siguiendo unos pocos pasos podemos solucionar este problema:
  1. Desactiva el soporte 3D en la configuración gráfica de la máquina virtual.
  2. Ejecutar esto:
    sudo apt-get update  
    sudo apt-get upgrade  
    sudo apt-get install dkms  
    sudo apt-get install build-essential
    
  3. En la maquina virtual dentro de los dispositivos añadir la imagen de cd  de Guest Additions (menu Devices-Insert Guest Additions CD (Host+D)). Con ello aparecerá un mensaje indicando si queremos continuar con la instalación. Obviamente continuamos y listo.
  4. Reinicia Ubuntu.
  5. Ahora la resolución de la pantalla se modificará de manera automática.


    * Si durante la instalación de los Guest Additions os aparece un warning indicado que no se ha reconocida la versión de X Windows del tipo:

    Warning: unknown version of the X Window System installed.  Not installing
    X Window System drivers.


    La instalación no funcionará. Se debe a que probablemente estéis usando una versión antigua de VirtualBox. Actualizarlo y volver a instalar las Guest Additions debería solucionar el problema. 

    Fuente: http://askubuntu.com/questions/240745/how-do-i-get-a-larger-screen-resolution-in-virtualbox-on-mac-os-x

jueves, 5 de diciembre de 2013

Instalar VTK con soporte de Qt y Python en Windows


0. Descargar e instalar Visual Stuido 2010, CMake, Qt4.x y Python con Setup Utils y Easy_install

1. Descargar y descomprimir VTK.

2. Abrir CMake y configurar el proyecto, debemos:
  • establecer la herramineta de compilación (VS2010) 
  • marcar las opciones de generación para el Wrapper de Python y el uso de Qt
  • establecer los directorios donde se encuentra nuestra instalación de Python, la herramienta qt-make y el directorio de instalación.
3. Configurar y generar. Que nos generara una solución para Visual Studio que es con la que trabajaremos a partir de ahora.

4. Abrimos la solución y la construimos a nuestro gusto (es decir en modo Debug, Release, etc).

5. Después buscamos el proyecto INSTALL dentro de la solución y lo ejecutamos. Si todo va bien ya podremos empezar a trabajar con VTK en C++ pero para poder usarlo en Python nos quedan un par de pasos mas.
  • Si nos da un error indicando que no se ha establecido la variable PYTHONPATH, debemos añadirla al sistema con el valor de la ruta en la que se esta intentando copiar el paquete .egg de python (nos lo indica el error)

6. Ahora vamos a Python e instalamos el paquete .egg generado para lo que escribimos:
  • easy_install C:\Ruta_paquete_dado_por_PYTHONPATH\VTK-6.0-py2.7.egg
7. Añadir al path del sistema los directorios bin de la instalación de Qt (por ejemplo C:\Qt\4.8.5\bin) y VTK (normalemente algo como C:\nuestro_directorio_salida_VTK_cmake\bin ).

8. Para probar que funciona todo bien entramos en la consola de python y escribimos "import vtk" .

martes, 26 de noviembre de 2013

Instalar LaTeX en Windows en 4 pasos

Parafraseando a la Wikipedia, LaTeX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos científicos y técnicos que contengan fórmulas matemáticas. Pero puede ser utilizado para componer y maquetar cualquier documento y de echo con un poco de práctica su uso es más eficiente que el trabajo con programas como Libre Office Writer o Word. Eso si los inicios no son fáciles pero todo es ponerse y para ello solo hay que seguir unos cuantos  pasos:

  1. Descargar el software necesario para trabajar cómodamente:
  2. Instalar todo en el mismo orden de descarga y a poder ser como admin.
  3. Configurar y actualizar los paquetes de MiKTeX para ello ejecutamos la aplicación Settings(Admin).
  4. Ejecutar Texmaker para crear nuestro primer documento.

miércoles, 13 de noviembre de 2013

Ejecutar un script sh (o comando) cada cierto tiempo

Tan simple como:

$watch -t -n secs ./script.sh

donde secs es el intervalo de tiempo en segundos cada el que queremos ejecutar script.sh. Para ejecutar un comando simple basta con substituir el script por el comando deseado, por ejemplo:

$watch -n 10 ps -l

para listar los procesos activos cada 10 segundos. Si queremos ejecutar un comando compuesto deberemos añadir la opción -x o simplemente poner el comando entre comillas simples. Otras opciones bastante útiles son -d para resaltar los cambios en los resultados producidos entre ejecuciones o -t para evitar que se muestre la cabecera del programa.

jueves, 25 de julio de 2013

Code Snippets I: obtener ángulo vector en Java

    /**
   * Obtiene el angulo con respecto de la horizontal de un 

   * vector definido en el plano calculando en primer lugar el 
   * arco tangente y después comprobando el cuadrante en el que
   * se encuentra.
   * @param x0 Coordenada X del punto origen del vector.
   * @param y0 Coordenada Y del punto origen del vector.
   * @param x1 Coordenada X del punto final.
   * @param y1 Coordenada Y del punto final.
   * @return Ángulo en radianes.

   * @author K.Stopa - GPLv3
   */
public double getAngle(double x0, double y0, double x1, double y1) 

{       
        double dx = x1 - x0;
        double dy = y1 - y0;
        double dy0 = dy;
        double dx0 = dx;
        if (dx < 0.0) dx0 = -dx;
        if (dy < 0.0) dy0 = -dy;       
        double angval = Math.atan2(dy0, dx0);
        if (dx < 0.0 && dy > 0.0) {
            angval = Math.PI - angval;   
        } else if ((dx < 0.0) && (dy <= 0.0)) {
            angval = Math.PI + angval;
        } else if ((dx >= 0.0) && (dy < 0.0)) {
            angval = 2.0 * Math.PI - angval;
        }
        return angval;

}