Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Raspberry PiへのGoCVインストール

以前LinuxへのGoCVへのインストール手順についてまとめました。
elsammit-beginnerblg.hatenablog.com

こちらの手順を元にRaspberry PiOpenCVをインストールしようとしたのですが、、、
少しハマったのでハマった箇所や解決策についてまとめておこうと思います!!


■環境

・デバイスRaspberry Pi 4
・OS:Raspbian GNU/Linux 10 (buster)
・GoCV:go version go1.15.6 linux/arm

【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品【RS・OKdo版】

新品価格
¥6,875から
(2020/12/15 22:29時点)

■ハマった箇所

以前まとめた手順通り、

go get -u -d gocv.io/x/gocv

を実行の上、

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"

にてパスを通し、/usr/local/lib/pkgconfig配下のopencv4.pcを下記の通り編集します。
※もしopencv4.pcが存在しなければ新規で作成。

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv4
Description: The opencv library
Version: 4.0.0
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_fuzzy -lopencv_gapi -lopencv_hfs -lopencv_highgui -lopencv_img_hash -lopencv_imgcodecs -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_phase_unwrapping -lopencv_photo -lopencv_plot -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_video -lopencv_videoio -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto

そして、、、

cd $GOPATH/src/gocv.io/x/gocv
sudo make install

を実行!!

しばらくしたところビルドエラー。。。
ログを確認したところ、

../../../../gocv.io/x/gocv/core.go:2008: type [1073741824]C.struct_Point larger than address space
../../../../gocv.io/x/gocv/core.go:2008: type [1073741824]C.struct_Point too large

といったエラーが発生。

■解決策

先ほどの指摘されたコードは、

tmpslice := (*[1 << 30]*C.char)(unsafe.Pointer(strs.strs))[:length:length]

となります。
どうやら32bit OSである場合、

1 << 30

だとアドレスの範囲を超えてしまう(オーバー)してしまうようです。
このためこちらを、

1 << 20

に変更!!

そして再度、

sudo make install

を実行!!
問題なくエラーが発生せずにインストール成功しました。

■最後に

Raspberry PiでもGoCVのインストールが出来ました。
Go言語はドライバ制御も出来るようなので、Go言語での画像や制御系の処理を作ってみたいなと思います。