ruby で画像を判別するプログラムを書く為に opencv を導入しようとしたところ少し面倒くさい事がわかったのでメモしておこう。
ruby で OpenCV を利用する場合 ruby-opencv gem を利用するのが良いらしいが、以下のように gem install ruby-opencv を行うとエラーが出る。
$ gem install ruby-opencv
Building native extensions. This could take a while...
ERROR: Error installing ruby-opencv:
ERROR: Failed to build gem native extension.
current directory: /Users/ryomatsu/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ruby-opencv-0.0.18/ext/opencv
/Users/ryomatsu/.rbenv/versions/2.5.0/bin/ruby -r ./siteconf20180328-19033-15bv1r8.rb extconf.rb
>> Check the required libraries...
checking for -lstdc++... yes
checking for -lopencv_calib3d... no
(以下略
先に OpenCV を入れないといけない。しかし普通に brew install opencv とすると最新バージョンである 3.4 が入るが、これは ruby-opencv では使えない。なので以下のように旧バージョンを指定してインストールする。
$ brew install opencv@2
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (caskroom/cask).
No changes to formulae.
==> Downloading https://homebrew.bintray.com/bottles/opencv@2-2.4.13.6.high_sierra.bottle.tar.gz
(略)
==> Summary
? /usr/local/Cellar/opencv@2/2.4.13.6: 278 files, 35.4MB
その後 gem install ruby-opencv する際に --with-opencv-dir で OpenCV のディレクトリを指定する
$ gem install ruby-opencv -- --with-opencv-dir=/usr/local/Cellar/opencv@2/2.4.13.6/
Building native extensions with: '--with-opencv-dir=/usr/local/Cellar/opencv@2/2.4.13.6/'
This could take a while...
Successfully installed ruby-opencv-0.0.18
Parsing documentation for ruby-opencv-0.0.18
Installing ri documentation for ruby-opencv-0.0.18
Done installing documentation for ruby-opencv after 4 seconds
1 gem installed
こうする事でインストールが可能だ。
しかし Rails で ruby-opencv を利用する際、Gemfile にてディレクトリを指定する方法が無いようだ。
その場合は bundle install 前に以下のコマンドにて OpenCV のディレクトリを指定する必要がある。
$ bundle config build.ruby-opencv --with-opencv-dir=/usr/local/Cellar/opencv@2/2.4.13.6/
$ bundle install
インストールできれば require 'opencv' で読み込める。
$ irb
> require 'opencv'
=> true
大丈夫だろう。