金子邦彦研究室プログラミングRuby による Web/データベース・プログラミングSwig を利用して、Ruby プログラムから CImg Library を使う

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

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

<作業の要点>

関連する外部ページhttp://www.swig.org/Doc1.3/SWIGPlus.html

前準備

  1. UbuntuUbuntu で OS のシステム更新を行うときは, 次のコマンドを実行.
    sudo apt -y update
    sudo apt -yV upgrade
    sudo /sbin/shutdown -r now
    
  2. CImg のインストール

    Ubuntu での操作手順

    sudo apt -y update
    sudo apt -y install cimg-dev
    sudo apt -y install cimg-doc
    sudo apt -y 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 
    

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

    [image]
  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();」の行をコメント化する。

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

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

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

    [image]

    [image]