はじめに
goで画像処理してみたいと思ってネットサーフィンしていたらGOCVなるものをみつけたので
環境構築とサンプルコードの紹介をします。
環境
- windows10
- go version go1.12.6 windows/amd64
パッケージダウンロード
PS C:\Users\Hoge> go get -u -d gocv.io/x/gocv
MinGW-64 のインストール
-
MInGW-W64って?
64bit windowsOSでCやC++をコンパイルできるようにするツールらしい(曖昧です) -
以下ページを参考にインストールしました
cmakeのインストール
[Download] から cmake-3.17.0-rc1-win64-x64.msi を選択してダウンロード & インストール
環境変数の設定
自分がどのディレクトリにいても、hoge.exeを実行できるようにwindows側に.exeファイルが存在するPath(環境)を登録しておきましょう。
環境変数の設定は次のような順番で行えます
-
Path変数を選択して、編集をクリック
-
Pathに C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin と C:\Program Files\CMake\bin を追加してOKを選択する
※ インストールしたバージョンとインストールしたフォルダ名で上記の名前と違うことがあります。
opencvの環境構築
%GOPATH%\gocv.io\x\gocv に win_build_opencv.cmd が存在するのでダブルクリックで実行しましょう
opencvのビルドが始まります
ビルド完了後、C:\opencv\build フォルダが作られているはずなので、
C:\opencv\build\install\x64\mingw\bin を再度環境変数のPathに登録しましょう。
sample code
環境構築が完了したら、readme.mdの説明を見ながらいくつか動かしてみるといいでしょう。
readmeやソースコード内にusageがまとめられてるのもgoodですね。
C:\Users\hoge\go\src\gocv.io\x\gocv\cmd\readme.md
何個か試してみて面白かったものを紹介します。
hello sample
カメラデバイスにアクセスして、映像を垂れ流しするサンプル
サンプルのためカメラデバイスは0番目で決め打ちされているし、key入力受付してexitもないのには注意
// gocv.io\x\gocv\cmd\hello\main.go
// +build example
package main
import (
"gocv.io/x/gocv"
)
func main() {
webcam, _ := gocv.OpenVideoCapture(0)
window := gocv.NewWindow("Hello")
img := gocv.NewMat()
for {
webcam.Read(&img)
window.IMShow(img)
window.WaitKey(1)
}
}
windowにカメラ映像が表示されていればOKです
motion-detect
IntelのOpenVinoを使って物体認識をしているサンプルだと思います。
ある程度分類はできているようなので、返り値の値を上手く使って表示を工夫できれば面白そうですね。
どのカメラに接続するか引数で渡す必要があります。
go run gocv.io\x\gocv\cmd\motion-detect\main.go 0
facedetect
カスケード分類器を使った顔認識サンプルですが、あまり精度が良くない印象です。
第一引数にカメラ、第二引数にカスケード分類器のxmlが必要で、xmlはdataフォルダにあらかじめ準備されているので、それを使いましょう。
go run gocv.io\x\gocv\cmd\facedetect\main.go 0 gocv.io\x\gocv\data\haarcascade_frontalface_default.xml
faceblur
facedetectの発展形で顔認識した空間にblur処理(ぼかし)を行うサンプルです。
gocv.io\x\gocv\cmd\faceblur\main.go 0 gocv.io\x\gocv\data\haarcascade_frontalface_default.xml
- blur結果
アニメキャラクターの顔も認識してますね。
face_detect_url
facedetectの発展形で引数に与えたurlから取得した画像を対象に顔検出して、画像として保存します。
今回は画像処理で有名なレナさんの画像をwikipediaから取得して顔検出してみます。
go run gocv.io\x\gocv\cmd\faceblur\main.go https://upload.wikimedia.org/wikipedia/en/7/7d/Lenna_%28test_image%29.png gocv.io\x\gocv\data\haarcascade_frontalface_default.xml output.png
- 結果
まとめ
goで何か作りたいなと思ってた時に、CVのライブラリを見つけたので導入方法をまとめてみました。
暇があればgoでクローラーとかも作ってみたいです。