use*_*638 2 opencv google-chrome google-nativeclient
有谁知道如何将OpenCV移植到NaCl?我正在尝试基于人脸识别进行Chrome扩展.我将不胜感激.
为方便起见,下面的详细说明已从(现已不存在的metacaptcha.com/install_opencv_nacl)转发.
的OpenCV取决于诸如bzip2的,ZLIB,NaclMounts以及至少一个解压缩/压缩库来处理共同图像,诸如的libpng/JPEG/TIFF几个重要的库.本文仅关注libjpeg.这些库需要使用NaCl Glibc工具链(Pepper 28)在32位和64位架构中构建为动态库.
为了构建用于NaCl的32位和64位共享库,需要分别使用32位和64位版本的NaCl gcc /链接器.为了使本教程更容易,我们制作了以下环境变量:
注意:如果文章中的某个链接无法正常工作,可以在此处找到备份链接.
export NACL_SDK_ROOT=/Users/thai/apps/nacl_sdk/pepper_28
export NACL_PREFIX="$NACL_SDK_ROOT"/toolchain/mac_x86_glibc/x86_64-nacl
export NACL_64="$NACL_SDK_ROOT"/toolchain/mac_x86_glibc/bin/x86_64-nacl
export NACL_32="$NACL_SDK_ROOT"/toolchain/mac_x86_glibc/bin/i686-nacl
下载Bzip2 v1.0.6,解压缩到您的本地目录.Makefile中,libbz2_so是我们要使用的文件make,我们要改变的gcc工具参数,即,而不是使用常规的操作系统gcc,它将使用氯化钠GCC在$ NACL_SDK_ROOT /工具链/ mac_x86_glibc/x86_64的-氯化钠/斌/ .
make -f Makefile-libbz2_so使用以下参数在bzip2上运行,然后将库复制到NaCl工具链中.
make -f Makefile-libbz2_so CC=$NACL_64-'gcc -m64'
cp libbz2.so.1.0.6 $NACL_PREFIX/lib64/libbz2.so
make clean
make -f Makefile-libbz2_so CC=$NACL_32-'gcc -m32'
cp libbz2.so.1.0.6 $NACL_PREFIX/lib32/libbz2.so
cp *.h $NACL_PREFIX/include
下载Zlib-1.2.8,解压缩到您的本地目录.Zlib正在使用autoconfig生成Makefile,我们需要首先运行此工具然后将GCC工具链修改为NaCl.
./configure --enable-shared在zlib上运行,然后make使用以下参数运行.
./configure --enable-shared
make shared CC=$NACL_64-'gcc -m64' AR=$NACL_64-ar ARFLAGS=rc CFLAGS='-O3 -DHAVE_HIDDEN'                     LDFLAGS='-O3 -fPIC -DHAVE_HIDDEN' LDSHARED='$(CC) -shared -Wl,-soname -Wl,libz.so'     SHAREDLIB=libz.so SHAREDLIBM=libz.so.1.2.8 SHAREDLIBV=libz.so.1
cp libz.so.1 $NACL_PREFIX/lib64/libz.so
make clean
make shared CC=$NACL_32-'gcc -m32' AR=$NACL_32-ar ARFLAGS=rc CFLAGS='-O3 -DHAVE_HIDDEN' LDFLAGS='-O3 -fPIC -DHAVE_HIDDEN' LDSHARED='$(CC) -shared -Wl,-soname -Wl,libz.so' SHAREDLIB=libz.so SHAREDLIBM=libz.so.1.2.8 SHAREDLIBV=libz.so.1
cp libz.so.1 $NACL_PREFIX/lib32/libz.so
cp zlib.h zconf.h $NACL_PREFIX/include
下载jpeg-v6b,NaCl jpeg makefile.cfg补丁并将它们放到本地目录中.
使用nacl-jpeg-makefile.cfg补丁修补jpeg-v6b目录.
cd jpeg-6b
patch < nacl-jpeg-v6b-makefile.cfg.patch
运行./configure上JPEG-6b中,然后运行make libjpeg.so使用以下参数.
./configure
make libjpeg.so CC=$NACL_64-gcc CFLAGS='-m64 -fPIC -O2 -I.' LDFLAGS='-shared -Wl,-soname -Wl,libjpeg.so -o libjpeg.so'
mv libjpeg.so $NACL_PREFIX/lib64/libjpeg.so
make clean
make libjpeg.so CC=$NACL_32-gcc CFLAGS='-m32 -fPIC -O2 -I.' LDFLAGS='-shared -Wl,-soname -Wl,libjpeg.so -o libjpeg.so'
mv libjpeg.so $NACL_PREFIX/lib32/libjpeg.so
make install-headers prefix=$NACL_PREFIX
下载NaclMounts,氯化钠,mounts.patch和我们的自定义的Makefile 去当地的NaCl安装目录,Makefile文件复制到该目录下,在应用补丁和运行下面的命令(假设你已经设置环境变量在文章的开头)
cp Makefile nacl-mounts/
cd nacl-mounts/
patch -p0 < ../nacl-mounts.patch
make ARCH=x86_64 BIT=64
cp libnaclmounts.so $NACL_PREFIX/lib64
make clean
make ARCH=i686 BIT=32
cp libnaclmounts.so $NACL_PREFIX/lib32
make install-headers
OpenCV需要在交叉编译模式下构建,以便使用cmake(OpenCV的构建工具)轻松实现.我们设置CMAKE_SYSTEM_NAME = Linux以强制对Linux目标进行交叉编译.如果您已在上一步中设置了环境变量,则编写OpenCV-nacl-cmake脚本以便于构建过程.
下载OpenCV 2.4.2,opencv-nacl-cmake脚本将 OpenCV解压缩到本地目录.
创建nacl/m32,nacl/m64在OpenCV中-2.4.2目录/建设的OpenCV的本机客户端代码32/64位版本.
将opencv-nacl-cmake脚本复制到nacl /目录中.
tar xvf OpenCV-2.4.2.tar.gz
cd OpenCV-2.4.2
mkdir nacl
cd nacl
mkdir m64 m32
cp ~/Downloads/opencv-nacl-cmake ./
为了使OpenCV能够读取/写入Native Client中的文件,需要使用新的文件系统库.此修补程序用NaclMounts库替换文件I/O的所有OS系统调用.
下载OpenCV的persistance.cpp补丁 2.4.2将补丁复制到OpenCV目录,并使用这些命令应用路径
cp ~/Download/opencv-nacl-persistance.patch OpenCV-2.4.2
cd OpenCV-2.4.2
patch -p0 < opencv-nacl-persistance.patch
我们还需要告诉cmake在OpenCV中排除应用程序模块(应用程序模块不需要移植).这可以通过简单地移动apps目录中的CMakeList.txt文件来完成
mv apps/CMakeList.txt apps/CMakeList.txt.old
使用以下参数运行./opencv-nacl-cmake以配置和构建库.以下bash命令还为OpenCV安装了32位和64位版本的库.由于Native Client的命名约定,我们必须移动lib /,lib32 /,lib64 /目录才能正确安装架构.
cd nacl/m32                                             
../opencv-nacl-cmake i686 32 
make -j8
unlink $NACL_PREFIX/lib64
mv $NACL_PREFIX/lib $NACL_PREFIX/lib64
mv $NACL_PREFIX/lib32 $NACL_PREFIX/lib
ln -s $NACL_PREFIX/lib $NACL_PREFIX/lib32
make install 
unlink $NACL_PREFIX/lib32
mv $NACL_PREFIX/lib $NACL_PREFIX/lib32
mv $NACL_PREFIX/lib64 $NACL_PREFIX/lib
ln -s $NACL_PREFIX/lib $NACL_PREFIX/lib64
cd ../m64
../opencv-nacl-cmake x86_64 64
make -j8
make install
此时,您已完成为Native Client Pepper 28安装OpenCV 2.4.2.
可以在example_opencv_nacl_facedetect中找到改编自OpenCV教程的简单应用程序,以在Google Chrome中执行面部检测.