ruby-opencvは一応Windowsもサポートしているわけですが、いつからかOpenCVがMinGW版のバイナリを配布しなくなってしまったため、RubyInstallerを使っている場合は自前でOpenCVをビルドしなければならない状態になっていました。 GitHubでもissueがいくつか挙がってたのをずーっと放置していたのですが、さすがに放置し過ぎな気がしてきたので、取り急ぎインストール用のドキュメントを作成しました。
大雑把に言うと、ポイントは以下の2点です。
- DevKitのビルドツール(mingw-32-make、gcc、g++)を使ってOpenCVをビルドする
- ruby-opencvをインストールしたり使ったりするときに、OpenCVのDLLのフォルダに加えてMinGWのDLLのフォルダをパスに追加する
想定環境 & 用意するもの
- Windows 10 64bit
- RubyInstaller版 Ruby 2.3.0p0 x64-mingw32
- DevKit (DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe)
- OpenCV 2.4.13
- CMake 3.6.0 x64
- ruby-opencv 0.0.17
ちなみに、OpenCV 3系だとDevKitに含まれるgccとかg++が古すぎてビルドできません。DevKitアップデートされないかな…。
インストール方法
OpenCVを取ってくる
まずはOpenCVを https://sourceforge.net/projects/opencvlibrary/ あたりから取ってきて、適当なフォルダに展開します。
CMakeでOpenCVのMakefileを作成する
コマンドプロンプト(cmd.exe)を開き、下記のコマンドを実行します。
D:\>set DEVKIT_PATH=D:/local/devkit D:\>set SOURCE_PATH=D:/work/opencv-2.4.13/sources D:\>set OPENCV_INSTALL_PATH=D:/opencv-2.4.13 D:\>cmake %SOURCE_PATH% -G"MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=%OPENCV_INSTALL_PATH% -DCMAKE_MAKE_PROGRAM=%DEVKIT_PATH%/mingw/bin/mingw32-make.exe -DCMAKE_C_COMPILER=%DEVKIT_PATH%/mingw/bin/gcc.exe -DCMAKE_CXX_COMPILER=%DEVKIT_PATH%/mingw/bin/g++.exe -DBUILD_PERF_TESTS=OFF
上記コマンドでは、DevKit が D:/local/devkit
に、OpenCVが D:/work/opencv-2.4.13
にインストールされていて(ソースコードは D:/work/opencv-2.4.13/sources
)、出力先フォルダが D:/opencv-2.4.13
になるという前提です。もし別のフォルダを指定する場合は、 DEVKIT_PATH
、 SOURCE_PATH
、 OPENCV_INSTALL_PATH
で設定しているパスを変更してください。
なお、 D:\>
はコマンドプロンプトのプロンプトなので、入力しなくてよいです。
OpenCVをDevKitでビルドする
コマンドプロンプトで下記のコマンドを実行します。
D:\>%DEVKIT_PATH%/mingw/bin/mingw32-make.exe D:\>%DEVKIT_PATH%/mingw/bin/mingw32-make.exe install
ruby-opencvをインストール
コマンドプロンプトで下記のコマンドを実行します。
D:\>path %OPENCV_INSTALL_PATH%\x64\mingw\bin;%DEVKIT_PATH%\mingw\bin;%PATH% D:\>gem install ruby-opencv -- --with-opencv-include=%OPENCV_INSTALL_PATH%/include --with-opencv-lib=%OPENCV_INSTALL_PATH%/x64/mingw/lib
インストールが完了したら、試しにrequireしてみます。
D:\>irb irb(main):001:0> require 'opencv' => true irb(main):002:0> OpenCV::CV_VERSION => "2.4.13"
うまくいったようです。
注意点として、 %OPENCV_INSTALL_PATH%\x64\mingw\bin
と %DEVKIT_PATH%\mingw\bin
はruby-opencvを使うときには必ずパスに追加する必要があります。
でないと、以下のエラーが発生します。
D:\>irb irb(main):001:0> require 'opencv' LoadError: 126: 指定されたモジュールが見つかりません。 - D:/local/ruby/lib/ruby/gems/2.3.0/gems/ruby-opencv-0.0.17/lib/opencv.so from D:/local/ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `require' from D:/local/ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require' from D:/local/ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require' from D:/local/ruby/lib/ruby/gems/2.3.0/gems/ruby-opencv-0.0.17/lib/opencv.rb:8:in `rescue in <top (required)>' from D:/local/ruby/lib/ruby/gems/2.3.0/gems/ruby-opencv-0.0.17/lib/opencv.rb:5:in `<top (required)>' from D:/local/ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `require' from D:/local/ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require' from D:/local/ruby/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require' from (irb):1 from D:/local/ruby/bin/irb.cmd:19:in `<main>'
%OPENCV_INSTALL_PATH%\x64\mingw\bin
のほうはOpenCVのDLLのフォルダなので当然必要なのですが、今回の手順でビルドした場合はMinGWのlibgcc_s_sjlj-1.dll
と libstdc++-6.dll
もリンクされるので、これらが格納されている %DEVKIT_PATH%\mingw\bin
もパスに追加する必要があるのでした*1。