2019年1月20日日曜日

An Installation of OpenCV4 on Raspberry Pi 3B+ & 4B

OpenCV4に本格的に移行する為にBuldする。  2019/8/12更新

最初に確認するのは、OpenCVのインストールページ

真っ新のRaspiにインストールする。
これは僕のやり方なのでディレクトリーは読み替えて下さい。
homeディレクトリーが散らかるのが嫌なので
~/prj/cv4を作りそこで作業をしている。
swapファイルは拡張する。
sudo vi /etc/dphys-swapfile
CONF_SWAPSAIZE=100 -> 1024
sudo /etc/init.d/dphys-swapfile restart
swapon             確認

RaspberryPi 4B  Buster
この組合せはまだ安定していないのかなぁ。
apt installでもエラーが発生する場合もあるし、build途中でもエラーが発生
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_compare_exchange_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_fetch_sub_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_load_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_store_8'
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_fetch_add_8'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/version/CMakeFiles/opencv_version.dir/build.make:85: bin/opencv_version] エラー 1
make[1]: *** [CMakeFiles/Makefile2:12504: apps/version/CMakeFiles/opencv_version.dir/all] エラー 2
cmakeの赤字分が追加の回避設定

cd
time sudo apt install -y \
    build-essential cmake pkg-config libcurl4-openssl-dev intltool devscripts debhelper  ant \
    libldap2-dev libgtkmm-3.0-dev libarchive-dev \
    libjpeg-dev libtiff5-dev libpng-dev  libjpeg-dev \
    libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
    libxvidcore-dev libx264-dev \
    libgtk2.0-dev libgtk-3-dev \
    libcanberra-gtk* \
    gfortran python2.7-dev python3-dev  \
    libavresample-dev libtesseract-dev libleptonica-dev \
    libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev libhdf5-dev \
    libblas-dev libeigen{2,3}-dev  libatlas-base-dev liblapacke-dev \
    python3-numpy python-numpy libjasper-dev

python2関連のライブラリーを削除した
time sudo apt install -y \
    build-essential cmake pkg-config libcurl4-openssl-dev intltool devscripts debhelper  ant \
    libldap2-dev libgtkmm-3.0-dev libarchive-dev \
    libjpeg-dev libtiff5-dev libpng-dev  libjpeg-dev \
    libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
    libxvidcore-dev libx264-dev \
    libgtk-3-dev \
    libcanberra-gtk* \
    gfortran python3-dev  \
    libavresample-dev libtesseract-dev libleptonica-dev \
    libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev libhdf5-dev \
    libblas-dev libeigen3-dev  libatlas-base-dev liblapacke-dev \
    python3-numpy  libjasper-dev


大体、7~8分。3B+は早い (^^)
raspi4 だと2分

mkdir prj/cv4
cd prj/cv4

wget https://github.com/opencv/opencv/archive/4.1.2.zip -O opencv-4.1.2.zip; wget https://github.com/opencv/opencv_contrib/archive/4.1.2.zip -O opencv_contrib-4.1.2.zip; unzip opencv-4.1.2.zip; unzip opencv_contrib-4.1.2.zip; cd opencv-4.1.2; mkdir build; cd build

cmake-guiを使って環境を作るのがおすすめ。
例えば下記の CPU_BASELINE=NEONは
ENABLE_NEON=ONとENABLE_VFPV3=ONと同時に設定するとエラーになる。
ITT、EIGEN、ITT等はチェックを外す。EIGENは使わない。
PYTHON2もサポートが2020年までなので、PYTHON3に移行する為にチェックを外す。
下の赤字は付け加える。
それくらいかなぁ、、、

//---------------------------------------------
// Raspi 4  Buster
//---------------------------------------------
cmake-guiを使うときは下記の設定をする。
特に、赤字をAdd Entryする。python2,EIGENの項目を消す。
CPU_BASE_LINE系は削除して、NEON、VFPV3はENABLEで設定
でも、この関係良く分からない。cmakeでエラーの出ない設定。
以下をコピペするのではなく、cmake設定するのが良い
下も動くけど、、、

time cmake -D CMAKE_BUILD_TYPE=RELEASE \
   -D BUILD_EXAMPLES=ON \
   -D BUILD_TESTS=OFF \
   -D BUILD_SHARED=OFF \
   -D CMAKE_INSTALL_PREFIX=/usr/local/ \
   -D CMAKE_CXX_FLAGS=-latomic \
   -D CPU_BASELINE=NEON \
   -D ENABLE_NEON=ON \
   -D ENABLE_VFPV3=ON \
   -D ENABLE_LTO=OFF \
   -D ENABLE_PRECOMPILED_HEADERS=OFF \
   -D INSTALL_C_EXAMPLES=ON \
   -D INSTALL_PYTHON_EXAMPLES=ON \
   -D OPENCV_SKIP_PYTHON_LOADER=ON \
   -D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.7/dist-packages \
   -D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \
   -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \
   -D OPENCV_GENERATE_PKGCONFIG=ON \
   -D WITH_TBB=OFF \
   -D WITH_OPENCL=OFF \
   -D WITH_GSTREAMER=ON ..

time make -j4

real    67m43.556s
user    252m19.934s
sys     17m26.788s

build/binにbuild されたサンプル、contribが入っている

python3でimport cv2 エラーがでる
対策はここ
-DCMAKE_CXX_FLAGS=-latomic          → build 確認済み 9/1
-DOPENCV_EXTRA_EXE_LINKER_FLAGS=-latomi

vmware上でbuild する時は、青字の部分削除してcmake する

//---------------------------------------------
// Raspi 3B+ Strech
//--------------------------------------------- 
cmake -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/prj/cv4/opencv_contrib-4.1.1/modules \
    -D ENABLE_VFPV3=ON \
    -D ENABLE_NEON=ON \
    -D BUILD_TESTS=OFF \
    -D WITH_TBB=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_SKIP_PYTHON_LOADER=ON \
    -D OPENCV_PYTHON2_INSTALL_PATH=/usr/local/lib/python2.7/dist-packages \
    -D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.5/dist-packages \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D BUILD_EXAMPLES=OFF ..

time make -j4

                             基本同じcmake設定
                             raspi4で、、、
                             real    104m18.468s
                             user    185m40.628s
                             sys     13m25.275s

                             raspi3B+
                             real    154m58.275s
                             user    550m24.650s

                             sys     16m18.052s

                             real:実行時間
                             user:CPU
                             sys:OSが処理をした時間
                             4coreの合計値がuser?

sudo make install
sudo ldconfig

cd ../samples/cpp
g++ `pkg-config opencv4 --cflags --libs` facedetect.cpp -o facedetect -std=c++11 -latomic

./facedetect  --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 ../data/lena.jpg

お久しぶりです Lenaさん
.
ところで、g++でエラーが発生した。
一度うまくできたのに、ある時からエラー
それで、exampleのコードを参考に、facedetect,cpp 先頭の
includeのコメントアウトを外して、g++したら成功
なんで、できなくなったのだろう?


Peace!!

0 件のコメント:

コメントを投稿