トップページ -> 研究道具箱と教材 -> Ruby による Web/データベース・プログラミング -> Swig を利用して、Ruby プログラムから CImg Library を使う
[サイトマップへ]  

Swig を利用して、Ruby プログラムから CImg Library を使う

CImg Library とは、画像処理の機能を持った C++ のソフトウエア. この Web ページでは, Ruby から CImg Library の機能を呼び出してみます

<作業の要点>

参考 Web ページ http://www.swig.org/Doc1.3/SWIGPlus.html


事前準備

  1. インストール済みのパッケージを最新のものにアップデートする操作を行っておく.

    端末で次のように操作する。

    ◆ Ubuntu の場合の操作手順(例)

    sudo apt-get update 
    sudo apt-get -yV upgrade
    sudo shutdown -r now 
    

  2. CImg のインストール

    ◆ Ubuntu での操作手順(例)(パッケージを用いてインストールする場合

    sudo apt-get install cimg-dev
    sudo apt-get install cimg-doc
    sudo apt-get install cimg-examples
    

    CImg.h は /usr/include/CImg.h に置かれる. 見本となるプログラムは /usr/share/doc/cimg-dev/examples に置かれる。

    ◆ Ubuntu での操作手順(例) (CImg の Web ページからダウンロードしてインストールする場合

    1. CImg Library の Web ページを開く

      http://cimg.sourceforge.net/

    2. 「Download」をクリック
    3. 「Standard Package」をクリック
    4. zip ファイルをダウンロード
    5. 解凍してできた CImg.h を使う. CImg Library の機能はすべてこのファイルに入っている.

Ruby 用のパッケージの作成手順例

  1. cimg_library.i の作成

    モジュール名を CimgLibrary に設定している.

    モジュール名は大文字で始めることを推奨する.

    %module CimgLibrary 
    %{
    #include "/usr/include/CImg.h"
    using namespace cimg_library;
    %}
    %rename(Cimg_display) cimg_display;
    %rename(Cimg_appname) cimg_appname;
    %rename(Cimg_version) cimg_version;
    %rename(Cimg_OS) cimg_OS;
    %rename(Cimg_file_separator) cimg_file_separator;
    %rename(Cimg_verbosity) cimg_verbosity;
    %rename(UUCimgdisplay_instance) _cimgdisplay_instance;
    %rename(UUCimg_instance) _cimg_instance;
    %rename(UUCimglist_instance) _cimglist_instance;
    %rename(UUNo_display_exception) _no_display_exception;
    %rename(__eq__) operator=;
    %rename(CImgDisplay) cimg_library::CImgDisplay;
    %rename(StdException) std::exception;
    %include "/usr/include/CImg.h"
    %template(UcharCImg) cimg_library::CImg<unsigned char>;
    

  2. swig の実行
    rm -f cimg_library_wrap.*
    swig2.0 -ruby -c++ cimg_library.i 
    

    実行の結果、「エラー」が出ていないことを確認する

  3. extconf.rb の作成

    「create_makefile('CimgLibrary')」と記述しているので、CimgLibrary.so が生成されることになる

    require 'mkmf'
    
    dir_config('cimg_library')
    $libs += " -lstdc++ -lm  -L/usr/lib/x86_64-linux-gnu -lpng -lGraphicsMagick++ -lGraphicsMagickWand -lfftw3 -lopencv_core -llapack -lblas -latlas -lgfortran -lgomp -lX11 -lXext -lpthread -ldl -lquadmath"
    create_makefile('CimgLibrary')
    

  4. cimg_library_wrap.cpp の変更

    「 cimg_library::CImgDisplay::_no_display_exception();」の行をコメント化する。

  5. ビルド
    ruby extconf.rb
    make CC=g++
    

  6. インストール
    sudo make site-install
    

  7. 使ってみる
    irb
    
    require 'CimgLibrary'
    a = CimgLibrary::UcharCImg.new( "/usr/local/share/opencv/samples/c/fruits.jpg" ) 
    a.display