Raspberry piにGoとgocv(OpenCV 4)環境をインストールする

2021-09-13

はじめに

副業で画像処理プログラムを書くことになりました。 久しぶりに頂いた話なので結構ウキウキしています。 Pythonで書かれた旧ソフトが遅いのとQR Codeの読み取り精度が悪いということでその改善したソフトを納品してほしいとのこと。

今回はGolangで実装してみようと考えております。

実機(Raspberry pi)が届くまでにソフトを先行して作っておきたいというのもあります。 数ヶ月ぐらい前に大学院の友人から貰ったRaspberry piが転がってたのでこれを動かせるようにしていきましょう。

gstreamerのインストール

特別何も言うことはないですが、これでDLできます。 あとcmakeも入れておきます。

sudo apt install cmake libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-tools libgtk2.0-dev gstreamer1.0-omx=1.0.0.1-0+rpi12+jessiepmg gstreamer1.0-plugins-bad gstreamer1.0-plugins-good

golangを入れる

aptとかだと少し古いgoが入っちゃうので自前で持ってきます。

wget https://golang.org/dl/go1.17.1.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.17.1.linux-armv6l.tar.gz go/

システム変数にGoのパスを登録します。

vim ~/.bashrc

末尾にパスを追加しておきます。

export PATH=$PATH:/usr/local/go/bin

パスが導通していることを確認しましょう。

source .bashrc
which go
/usr/local/go/bin/go

こんな感じででればいいでしょう。

OpenCV 4.5.3をインストールする

gocvの中に、OpenCVのDLからビルドまでしてくれるスクリプトが入っているのでそちらを利用します。

ちなみにgocvとは、OpenCV4をGoから利用できるようにしたパッケージです。 パリピのGopher君が目印です。ふぅ最高にキュートだぜ…

GoCV Computer Vision using Go and OpenCV 4

インストールをしていきましょう、 DLします。

git clone https://github.com/hybridgroup/gocv.git

今回はGstreamerを使いたいのでオプションに追加します。 やり方は簡単で、Makefilesを書き換えます。

vim Makefiles

cmakeにこのオプションを追加します。

-D WITH_GSTREAMER=ON

書き換えるとこのようになります。

# Build OpenCV on Raspbian with ARM hardware optimizations.
build_raspi:
    cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
    mkdir build
    cd build
    rm -rf *
- cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_NEON=ON -D ENABLE_VFPV3=ON -D WITH_JASPER=OFF -D OPENCV_GENERATE_PKGCONFIG=ON ..
+ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_NEON=ON -D ENABLE_VFPV3=ON -D WITH_JASPER=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_GSTREAMER=ON ..
    $(MAKE) -j $(shell nproc --all)
    $(MAKE) preinstall
    cd -

実行すると3時間から4時間程度お祈りビルドが走ります。

make install_raspi

ERROR対応

98%とかで動かなくなってしまったときはマジかお前ってなりましたね。 CPUを多くしてビルドを行うとメモリが足りないとかそんなエラーも出ます。

寝る前にビルドを始めるという前提であれば、以下のようなオプションでmakeするのは解決策の一つです。

-j 以降をすべて削除します。

- $(MAKE) -j $(shell nproc --all)
+ $(MAKE)

まとめ

完全に備忘録記事になってますが良いでしょう。 巷にあふれる内容の焼き直しですので、需要があるかわからないですが… 未来の自分用に残しておきましょう。