13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

aptpodAdvent Calendar 2018

Day 12

GoCVを試すまでのお話

Last updated at Posted at 2018-12-12

OpenCV4が正式にリリースされたみたいですね。
弊社のサーバチームではGo言語をメインに使っていることもあり、僕も専らGo言語でお仕事しています。GoからOpenCV4を簡単に使えないかなぁと検索するとGoCVなるものを見つけました。ちゃんとOpenCV4に対応しているようです。素晴らしい。

というわけでC++でもpythonでもなく、GoCVを使ってGoからOpenCV4を使ってみます。

OpenCV4のビルド&インストール

今回はmacOSを前提としているので、OpenCV4のビルドとインストールに関してはこちらのページを参考にしました。
pkgconfigのインストールやpython環境の事前準備等は上記ページに任せて説明を端折りますが、今回は以下のようにcmakeします。

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib-4.0.0/modules \
    -D PYTHON3_LIBRARY=`python -c 'import subprocess ; import sys ; s = subprocess.check_output("python-config --configdir", shell=True).decode("utf-8").strip() ; (M, m) = sys.version_info[:2] ; print("{}/libpython{}.{}.dylib".format(s, M, m))'` \
    -D PYTHON3_INCLUDE_DIR=`python -c 'import distutils.sysconfig as s; print(s.get_python_inc())'` \
    -D PYTHON3_EXECUTABLE=/path/to/.pyenv/shims/python \
    -D PYTHON3_NUMPY_INCLUDE_DIRS=/path/to/.pyenv/versions/3.6.3/lib/python3.6/site-packages/numpy/core/include \
    -D PYTHON3_PACKAGES_PATH=/path/to/.pyenv/versions/3.6.3/lib/python3.6/site-packages \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D BUILD_EXAMPLES=ON ..

makeしてsudo make install後、PKG_CONFIG_PATHを適宜設定しておきます。

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

オフィシャルなOpenCV4のpkgconfigのファイルが見つからなかったので、こちらのページを参考に以下の内容のopencv4.pcというファイルを自作して/usr/local/lib/pkgconfigに配置します。

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

GoCVのインストール

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

Hello GoCV

正しくOpenCVとGoCVがインストールされたかどうかを確認するためにGoCVのサンプルプログラムを動かしてみます。


git clone https://github.com/hybridgroup/gocv.git
cd gocv
go run ./cmd/version/main.go

以下のような結果が出力されれば成功です。

gocv version: 0.18.0
opencv lib version: 4.0.0

他にもgocvのリポジトリのcmdディレクトリの中に色々参考になるGoのプログラムがあります。今度はhelloを動かしてみます。


go run ./cmd/hello/main.go

windowが開いてカメラの映像が見れます。OpenCVを使っている実感が湧いてきます。

短いですが、今回はここまで。
他にもサンプルコードがgocvのリポジトリにあるので参考になります。

$ ls -1 gocv/cmd
README.md
basic-drawing/
caffe-classifier/
captest/
capwindow/
counter/
dnn-detection/
dnn-pose-detection/
dnn-style-transfer/
faceblur/
facedetect/
find-circles/
find-lines/
hand-gestures/
hello/
img-similarity/
mjpeg-streamer/
motion-detect/
openvino/
saveimage/
savevideo/
showimage/
ssd-facedetect/
tf-classifier/
tracking/
version/

僕自身Goから画像処理する必要があるのかわかりませんが、とりあえず動作したのを確認できました。
時間があるときにでも画像処理関連で何かしてみたいところです。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?