2

OpenCVをNaClに移植する方法を知っている人はいますか? 顔認識ベースの Chrome 拡張機能を作ろうとしています。助けていただければ幸いです。

4

1 に答える 1

6

以下の詳細な手順は、便宜上 (現在は廃止されたmetacaptcha.com/install_opencv_nacl ) から転載されています。

1.前提条件

OpenCV は、bzip2、zlib、NaclMounts などのいくつかの重要なライブラリと、少なくとも 1 つの解凍/圧縮ライブラリに依存して、libpng/jpeg/tiff などの一般的な画像を処理します。この記事では、libjpeg のみに焦点を当てます。これらのライブラリは、NaCl Glibc ツールチェーン (Pepper 28) を使用して動的ライブラリとして 32 ビットと 64 ビットの両方のアーキテクトでビルドする必要があります。

NaCl 用の 32 ビットおよび 64 ビット共有ライブラリをビルドするには、32 ビットおよび 64 ビット バージョンの NaCl gcc/linker をそれぞれ使用する必要があります。チュートリアルでこれを簡単にするために、次の環境変数を作成します。

注: 記事内のリンクの 1 つが機能しなかった場合は、ここにバックアップ リンクがあります

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

1.1 ネイティブ クライアント用の Bzip2

Bzip2 v1.0.6をダウンロードし、ローカル ディレクトリに展開します。Makefile-libbz2_so は に使用するファイルですmake。通常の OS を使用する代わりにgcc、$NACL_SDK_ROOT/toolchain/mac_x86_glibc/x86_64-nacl/bin/ で NaCl gcc を使用するように gcc ツールチェーン パラメーターを変更します。 .

次のパラメーターを使用して bzip2 で実行make -f Makefile-libbz2_soし、ライブラリを 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

1.2 ネイティブ クライアント用の Zlib

Zlib-1.2.8をダウンロードし、ローカル ディレクトリに展開します。Zlib は autoconfig を使用して Makefile を生成します。最初にこのツールを実行してから、GCC ツールチェーンを NaCl ツールチェーンに変更する必要があります。

./configure --enable-sharedzlib で実行し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

1.3 ネイティブ クライアント用 libJPEG

jpeg-v6bNaCl jpeg makefile.cfg パッチをダウンロードして、ローカル ディレクトリに配置します。

jpeg-v6b ディレクトリに nacl-jpeg-makefile.cfg パッチを適用します。

cd jpeg-6b
patch < nacl-jpeg-v6b-makefile.cfg.patch

./configurejpeg-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

1.4 ネイティブ クライアントの NaclMounts

NaclMountsnacl-mounts.patch、およびカスタム Makefileをダウンロード します。ローカルの nacl-mount ディレクトリに移動し、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

2. ネイティブ クライアント用の OpenCV

cmake (OpenCV のビルド ツール) で簡単に実行するには、OpenCV をクロス コンパイル モードでビルドする必要があります。CMAKE_SYSTEM_NAME=Linux を設定して、Linux ターゲットのクロスコンパイルを強制します。前のステップで環境変数をすでにセットアップしている場合は、ビルド プロセスを容易にするために、OpenCV-nacl-cmake スクリプトが記述されています。

2.1 ソースコードのセットアップ

OpenCV 2.4.2opencv-nacl-cmake スクリプトをダウンロード します。OpenCV をローカル ディレクトリに抽出します。

OpenCV Native Client コードの 32/64 ビット バージョンをビルドするために、OpenCV-2.4.2/ にディレクトリをnacl/m32作成します。nacl/m64

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 ./

2.2 OpenCV I/O ライブラリ (persistance.cpp) にパッチを当てる / アプリのビルドを除外する

OpenCV が Native Client でファイルを読み書きできるようにするには、新しいファイル システム ライブラリを使用する必要があります。このパッチは、ファイル I/O のすべての OS システム コールを NaclMounts ライブラリに置き換えます。

OpenCV 2.4.2 用のpersistance.cpp パッチをダウンロードします。パッチを OpenCV ディレクトリにコピーし、これらのコマンドを使用してパスを適用します。

cp ~/Download/opencv-nacl-persistance.patch OpenCV-2.4.2
cd OpenCV-2.4.2
patch -p0 < opencv-nacl-persistance.patch

また、OpenCV でアプリ モジュールを除外するように cmake に指示する必要があります (アプリ モジュールを移植する必要はありません)。これは、CMakeList.txt ファイルを apps ディレクトリに移動するだけで実行できます。

mv apps/CMakeList.txt apps/CMakeList.txt.old

2.3 構成、ビルド、およびインストール

次のパラメーターを指定して ./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 のインストールが完了しました。

Google Chrome で顔検出を実行するために OpenCV のチュートリアルから適用された単純なアプリケーションは、example_opencv_nacl_facedetectにあります。

于 2013-12-13T22:46:15.853 に答える