Powered By Blogger

martes, 1 de marzo de 2011

OpenCV en el iphone!

Bueno dentro de esta entrada hablare un poco de como configurar OpenCV para poder hacer desarrollo para el iphone.
Como ya sabemos OpenCV es una librería de desarrollo orientado a la vision por computadora haciendo trabajo pesado de procesamiento de imágenes y de toma de decisiones con algoritmos de IA convirtiendose en una herramienta de desarrollo bastante potente.
Se hablaba mucho de que no se podía agregar openCV a nuestro iphone sin embargo si es posible pues... muchas de las aplicaciones que se visualizan en internet hacen uso de esta herramienta.
Este escrito esta basado en otros métodos que encontré en internet (en inglés) y que haré mención al final del post.
Manos a la obra...
Pues para poner a funcionar OpenCV dentro del iphone se puede lograr de dos formas, como framework privado o como librería estática haré mención de ambos sin embargo la forma de librería estática tengo entendido que funciona mejor (así es como yo lo he hecho).




Primero como Framework privado:
necesitaremos dos archivos que compilaremos en la terminal de nuestra mac uno llamado make.sh y otro Makefile.in 
Los links son estos:


make.sh
http://pastebin.com/f53dac9e1
Makefile.in
http://pastebin.com/f35b8b20e


los ponemos en la raíz del directorio de OpenCV y ejecutamos ./makesh (con privilegios de super usuario claro esta!)
ok después de esto resulta sencillo todo jeje! ya saben no click secundario al proyecto add existing frameworks y ya!


Como libreria estática:


1 bajamos Opencv de Sourceforge y lo descomprimimos.
2 creamos un directorio llamado build en el mismo nivel (es decir no adentro de la carpeta) y creamos 4 subdirectorios ppc, arm, i386 y x86_64.
3 ponemos las configuraciones globales con:
$ export CONFFLAGS="--without-imageio --without-python --without-swig --disable-apps --disable-dependency-tracking --without-carbon --without-quicktime --enable-shared=no --without-gtk"


cambiamos de directorio a ppc:


$ ../../opencv-1.0.0/configure ${CONFFLAGS} --target=ppc-apple-darwin9
$ make CXXFLAGS="-arch ppc"



en el directorio i386:
$ ../../opencv-1.0.0/configure ${CONFFLAGS} --target=i386-apple-darwin9
make CXXFLAGS="-arch i386"


en el directorio X86_64:
$ ../../opencv-1.0.0/configure ${CONFFLAGS} --target=x86_64-apple-darwin9
make CXXFLAGS="-arch x86_64"



en el directorio arm:
$ ../../opencv-1.0.0/configure ${CONFFLAGS} --host =arm-apple-darwin9 CXX=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-g++-4.2.1 CXXFLAGS="-arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk" CXXCPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp
$ make


después:



CXX=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-g++-4.2.1CXXFLAGS="-arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk"CXXCPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp
finalmente hacemos la creación de las librerías 




$ lipo -create i386/cv/src/.libs/libcv.a x86_64/cv/src/.libs/libcv.a ppc/cv/src/.libs/libcv.a armv6/cv/src/.libs/libcv.a -output libcv.a
$ lipo -create i386/cxcore/src/.libs/libcxcore.a x86_64/cxcore/src/.libs/libcxcore.a ppc/cxcore/src/.libs/libcxcore.a armv6/cxcore/src/.libs/libcxcore.a -output libcxcore.a
$ lipo -create i386/cvaux/src/.libs/libcvaux.a x86_64/cvaux/src/.libs/libcvaux.a ppc/cvaux/src/.libs/libcvaux.a armv6/cvaux/src/.libs/libcvaux.a -output libcvaux.a
$ lipo -create i386/ml/src/.libs/libml.a x86_64/ml/src/.libs/libml.a ppc/ml/src/.libs/libml.a armv6/ml/src/.libs/libml.a -output libml.a
$ lipo -create i386/otherlibs/highgui/.libs/libhighgui.a x86_64/otherlibs/highgui/.libs/libhighgui.a ppc/otherlibs/highgui/.libs/libhighgui.a armv6/otherlibs/highgui/.libs/libhighgui.a -output libhighgui.a
y ahora hay q agregarlas al proyecto de la siguiente forma:
todas las librerías con extensión .a las pondremos en un folder y dentro de este folder otro que se llame headers y aquí pondremos las librerías .h y cpp de openCV y las agregaremos con add existing files a nuestro proyecto  y en el linker pondremos: 
"…/OpenCV.lib/libcv.a /…/OpenCV.lib/libcvaux.a (o las librerías q usemos)"
también pondremos la librería libstdc++ para evitar problemas de compilación


y listo!


muy complicado? sí, lo es es por ello que yo pongo aquí un archivo ya compilado con anterioridad y funciona sin problemas, bueno arroja unos warning a la hora de compilar pero nada serio.


¿pude haberlo hecho desde el principio? sí pero no sabrían como lo hice y si pueden lograrlo de mejor forma pues esta bien solo compartan :P
aqui el enlace de mi proyecto base:
XCode project for iPhone (.zip)


 fuentes:


http://www.computer-vision-software.com/blog/2009/04/opencv-vs-apple-iphone/
http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en






No hay comentarios:

Publicar un comentario