Opencv 3.4.0のインストール(darknetでエラーの出まくっている方へ)

研究室で自分が使っているマシンで、darknetによるリアルタイム推論をしようとしたら全く動かなかった。

普通の推論(画像中の特徴にバウンディングボックスを設置する)だと、動いてくれる。

PCのスペック等

  • CPU ... Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
  • RAM ... 32GB
  • GPU ... GTX1080ti
  • OS ... Ubuntu 16.04 LTS

  • OpenCV ... version 3.4.1

  • CUDA ... 8.0

コレと言って変なところはなく、公式がサポートしてると謳っていたバージョンをすべて入れているはずだった。

ちなみに、使用しているレポジトリは公式ではなく、AlexeyAB氏の開発している方のdarknet。

github.com

これで、darknetを使用すると

  • 画像認識

./darknet detector test path/todata.data path/to_DLcfg.cfg yolov3-tiny.conv.15 path/want_to_detect_picture.jpg

出力例

f:id:flying_hato_bus:20180705095506j:plain

  • リアルタイム認識

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

出力 https://github.com/AlexeyAB/darknet/issues/932

Couldn't connect to webcam.
: Invalid argument
darknet: ./src/utils.c:193: error: Assertion `0' failed.

こんなのが出て落ちる。

色々と試してみたがうまく行かずにいると。フォーラムで、「最近新しいバージョンにしたからpullヨロ」のような文字が発見できたので git pull で最新バージョンにした。

新たにバージョンアップしたのでまた一からmakeをしようとした。

$ git pull
$ make

ここまで来たところでエラーが出た。

In file included from /usr/local/include/opencv2/core/types_c.h:59:0,
from /usr/local/include/opencv2/core/core_c.h:48,
from /usr/local/include/opencv2/highgui/highgui_c.h:45,
from ./src/image.c:14:
/usr/local/include/opencv2/core/cvdef.h:485:1: error: unknown type name ‘namespace’
namespace cv {
^
compilation terminated due to -Wfatal-errors.
gcc -DOPENCV pkg-config --cflags opencv -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/blas.c -o obj/blas.o
Makefile:130: recipe for target 'obj/image.o' failed
make: *** [obj/image.o] Error 1
make: *** Waiting for unfinished jobs....

エラーメッセージから読み取れるに、opencvのエラーっぽい。

opencvで何か必要なのかとissueを漁っていたらこのような投稿を発見。

Can't compile with opnecv=1 · Issue #932 · AlexeyAB/darknet · GitHub

作成者本人曰く。

「今回のバージョンアップでなぜか知らんけど OpenCVの3.4.1だと動かなくなっちゃった。もし3.4.1入れてるんだったら、それ以前のモノ入れてね、というかREADMEにも書いてあるよ。」

This repository supports:

both Windows and Linux both OpenCV 2.x.x and OpenCV <= 3.4.0 (3.4.1 and higher isn't supported) both cuDNN v5-v7 CUDA >= 7.5 also create SO-library on Linux and DLL-library on Windows

らしい。最近更新された時に追加されたようで、昔の情報で全てを完結させていたのでコレに気づかなかった。

というわけで深夜1時ごろからOpenCV3.4.0のインストールを開始した。

公式を見ればわかるが、個人的にやったことを書いていく。

pkg-config --modversion opencv

3.4.1

$ cd ~/
$ mkdir src
$ cd src

インストールに使用するフォルダを作成

$ wget https://github.com/opencv/opencv/archive/3.4.0.tar.gz
$ tar xvzf 3.4.0.tar.gz 
$ ln -s opencv-3.4.0 opencv
$ wget https://github.com/opencv/opencv_contrib/archive/3.4.0.tar.gz
$ mv 3.4.0.tar.gz.1 opencv_contrib-3.4.0.tar.gz
$ tar xvzf opencv_contrib-3.4.0.tar.gz 
$ ln -s opencv_contrib-3.4.0 opencv_contrib

OpenCV 3.4.0のファイルとcontribパッケージをダウンロードして、リンクをしておく。

$ cd ~/src/opencv
$ mkdir build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j8
$ make install

makeなどをしてインストール、ちなみにmakeにはめちゃくちゃ時間がかかるので心して待ちましょう。

インストールが終わって、pkg-config --modversion opencvを打ち、3.4.0が出力されればインストールは成功。

これでdarknetをmakeして動かすと。

こうなれば全てが終わり、お疲れ様でした。