Instalar OpenCV iOS y no morir en el intento

La librería openCV nos permite añadir características de visión por computador a nuestras aplicaciones de iOS como puede ser unir cuatro imágenes de un mismo panorama en una sola (un ejemplo de ello lo podéis ver aquí: OpenCVSwiftStitch).

Muchos son los tutoriales que explican como realizar la instalación de la librería pero muchos de ellos están desactualizados. Por ello os traigo este tutorial.

  1. Primero de todo hay que descargar la librería de la página oficial que enlazo aquí.
  2. Una vez lo descarguemos abrimos el proyecto en el que vamos a desarrollar en XCode. A la par abrimos el Finder en la carpeta en la que hemos descargado la librería y arrastramos esta del finder a la parte derecha de XCode junto con todos nuestros archivos de proyecto.
  3. Es hora de comprobar que XCode ha enlazado bien la librería y para eso hacemos clic en el icono del proyecto y nos dirigimos a la pestaña "Build Phases". Entre las opciones que nos aparecen debemos encontrar "Link Binary with Libraries" y al expandirla con la flecha que aparece a la izquierda debe encontrarse "opencv2.framework". 
    • Si no aparece debemos dirigirnos a la barra de herramientas de XCode File/Add Files to... y buscamos la librería.

   Si has seguido los pasos anteriores, enhorabuena ya tienes la librería instalada en tu proyecto; pero aún distas mucho de poder utiizarla.  Llegados a este punto, me gustaría anotar que la librería está en el lenguaje de programación C++, querido y odiado dentro de la comunidad de programadores pero no por ello nos vamos a amedrentar. Esto significa que nuestro proyecto que está escrito en el actual lenguaje de programación de Apple, Swift 1.2 (para aquellos que ya utilicen XCode 7 beta,  Swift 2) va a pasar a estar escrito en tres lenguajes de programación: nuestro actual Swift, el anterior lenguaje de iOS ObjectiveC y C++. Objective C++ únicamente está para hacer de puente entre C++ y Swift y por ello es fundamental, ya que las operaciones de visión artificial las tendremos que programar en C++ e indicarle a Swift que lo ejecute.
   Es por esto que en Objective C necesitaremos crear una clase que solemos llamar "Wrapper" o envoltorio. Para hacer esto creamos un nuevo fichero del tipo objective C, automáticamente nos aparecerá una ventana que nos preguntará si queremos configurar un  "Bridging Header" o una cabecera de "puenteo", le decimos que sí  y se nos crearán los dos ficheros.
    En la nueva cabecera de "puenteo" lo único que tenemos que escribir es #include "Wrapper.h" que se habrá creado si no habrá que crearlo.  Otro detalle que hay que hacer ahora es cambiar la extensión del fichero Wrapper de "Wrapper.m" que es como lo pone por defecto Xcode a "Wrapper.mm", de esta forma nos ahorraremos posibles problemas de compilación.
   Nuestro "Wrapper" debe contener las cabeceras de aquellas clases  que creemos en C++ para usar la librería. Lo que quiero que tengáis presente es que no podéis añadir cabeceras de Objective C a vuestros ficheros de C++ porque empezarán a aparecer errores en cabeceras que nunca deberíamos tocar como pueden ser las de NSObject.
  Otro dato más, como estamos tratando con una librería de visión artificial lo suyo es que podamos trabajr sin problemas entre las clases Mat de la librería y la clave UIImage de Swift, para ello os recomiento encarecidamente que copies la clase "UIImage+OpenCV" que está en el ejemplo que os enlacé arriba.
  Ahora si podémos usar tranquilamente nuestra librería de visión artificial.
  Espero que os sea útil y os ahorre horas de búsqueda de información.



0 comentarios: