本記事の特徴
・OpenCVのセットアップでフリーズ
・ハローワールドのビルドでフリーズ
上記の問題を解決します。
本記事のテーマ
【Raspberry PiでMediapipeのビルドが止まる問題の解決!】
・exampleにあるHallo Worldを動かす
環境構築からHalloWorldの手順
主に公式のInstallationの通りに行うのが良いと思います。
他の日本の方がまとめているサイトで参考にしたのは下記のサイトです。
※追記:問題1と問題2を同時に解決する方法
スワップファイルを拡張することで解決できました!
ラズパイ(Raspbian Jessie)とスワップメモリ容量の変更(環境設定の続き) - 今日も微速転進
☆引用
エディタで/etc/dphys-swapfile
を開き、CONF_SWAPSIZE
という行の値を変更。例えば2048MB(2GB)なら以下のように変更。
CONF_SWAPSIZE=2048
設定したいSwapのサイズをMB単位で指定。
$ sudo systemctl stop dphys-swapfile $ sudo systemctl start dphys-swapfile
systemctl
経由でstop/start する。実際に呼び出されるのは/etc/init.d/dphys-swapfile
。 なお、swapの容量を変更した直後は内部でdd
コマンドが呼び出されるので非常に時間がかかります。
最後にfree -h
で意図した容量に設定されているか確認。
$ free -h total used free shared buffers cached Mem: 862M 833M 28M 6.3M 36M 656M -/+ buffers/cache: 140M 721M Swap: 2.0G 0B 2.0G
問題1:OpenCVビルドでフリーズ
Installationの3Install OpenCV and FFmpeg.のOption2であるsetup_opencv.shを実行すると途中でフリーズするという現象に会いました。
試行錯誤した結果、viなどでsetup_opencv.shを以下のように変更するとフリーズせずにビルドが通るようになりました。
77行めのmake -j 16を -j4に変更する。(使用する並列処理の数を減らす)
77 make -j 16 → make -j 4
78 sudo make install
79 rm -rf /tmp/build_opencv
80 echo "OpenCV has been built. You can find the header files and libraries in /usr/local/include/opencv2/ and /usr/local/lib"
問題2:bazel runでフリーズ
問題1と同様にjobsを下げてみたがそれでもフリーズした。
調査した結果、bazelには--jobsだけでなく,--local_ram_resourcesでCPUのリソースの調整もできるらしい。
少しずつCPUの使用率を減らしていった結果、次のパラメータでビルドが通るようになった。(しかし2回失敗した後、3回めで成功。)
# cd ~/mediapipe
export GLOG_logtostderr=1
bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \
mediapipe/examples/desktop/hello_world:hello_world --jobs 4\
--local_ram_resources 280
ramのリソースは使用するラズパイのCPUによって変わるため、コマンド(free -h)を用いて最大使用できるCPUリソースを確認してから減らすと良いと思います。
・freeコマンドの使い方(サイト内のメモリ容量参照)
Linux のメモリ容量・CPUコア数・ディスク容量を確認する - 猫でもわかるWebプログラミングと副業
参考文献
・bazelのjobsリファレンス
Command-Line Reference - Bazel main
・bazelのlocal_ram_resources
Command-Line Reference - Bazel 0.23.0
以上、ご参考になると幸いです!
質問などは下のコメント欄でお待ちしております!