Re - ImageJで学ぶ!: 第46回 ImageJを用いたSQLデータベース接続入門で学ぶ!

2015年11月4日水曜日

第46回 ImageJを用いたSQLデータベース接続入門で学ぶ!

lmageJは主に画像処理および画像解析を基本設計として採用されているため、過去に処理した解析結果やデータはユーザー自身で「Microsoft Excel」(マイクロソフト社製)などのサードバーティツールを用いてファイリングしなければなりません。このような面倒な作業を解決する1つの方法として、ImageJとデータベースエンジンを連携させることができれば、データ管理などが簡便になります。

今回はその入門編としてImageJとオープンソースのデータベースエンジンである“MySQL”との連携方法について解説します。


データベースについて


データベースという用語を聞く限りでは、なにやら難しい話をしているように聞こえがちですが、実は非常に単純な概念です。要は、エクセルのデータのように、あるルールに基づいて整理されているデータテーブルです。データテーブルをいっぱい用意して、それぞれの関係性を考慮したものがリレーショナルデータベースなどとも呼ばれます。

身近な例として、年賀状などのハガキを作成するとき、ソフトウェアに知人の氏名と住所などをデータとして保存しておくのと同じです。保存しておけばいつでも簡単に送付先を検索してハガキを作成することができます。

医療分野においては、商用の「FileMakerPro」(FileMaker社製)などが、非常に優れたユーザーインターフェイスおよび多彩な機能を持っており、データベースの専門知識やコンピュータそのものの知識がなくても簡単にデータベースをつくることができるようになっています。

近年では開業医自らが患者の症例データベースや画像管理システムなどを作成するマニュアル本なども出版されており、その認知と人気度は高いようです。

このようにデータベースソフトウェアは大変身近で便利なものです。 

一方でデータベースを難しく思う人も少なくありません。アプリケーション開発側の視点になると、柔軟でスマートなデータベースを設計するのはなかなか難しいことです。データベースを構築する際に、大抵は行き当たりばったりで構築していくために、非常に複雑かつ使い難いデータベースシステムになってしまいがちです。このあたりは、経験が必要になりますが、簡単な、シンプルな、データベースは、誰でも使えて汎用性も高いです。

ImageJとデータベースエンジンの連携は、基本的にJava言語のデータベース用API(JDBC)を介して構築することになります。データベースも、SQLというデータベース言語を使って構築することが要求されます。


SQLについて


SQLは、その元になった言語SEQUEL (Structured English Query Language)をIBM社が開発しており、その名前に因んで名付けられたデータベース言語です。

このSQLは、データのやり取りを管理するメネージメントシステムモジュールであるデータベースエンジンで利用されます。
データベースエンジンには、クライアントからアクセスがあればいつでも問い合わせ内容に応じて処理を返す常駐プログラムが実装されています。常駐プログラムとは、PC上のオペレーティングシステム(OS)が起動した後、ユーザに意識されることなく動作しているプログラムのことです。このようなサービスは別名で”デーモン”や”サービス”と呼ばれています。

ImageJでは、プラグインとしてMySQLなどの優れたユーザーインターフェイスを持つオープンソースのデータベースとの連携が紹介されています。
もちろん、JDBCのAPIに対応したエンジンであれば、商用・非商用関係なく使用できます。

ImageJのWebサイト(http://rsbweb.nih.gov/ij/plugins/mysql.html)で、Dimiter Prodanov氏(Leiden University Medical Center, Leiden. The Netherlans)のプラグインコードや、このプラグインをGUIから操作できるようにしたJaap Kokorian氏のプラグインが公開されています。

以下、これらのプラグインを使う方法を示します。


MySQLとImageJの設定方法


MySQLをPCへインストールする方法はインターネットでもたくさんのサイトで紹介されています。

以下、ImageJへの実装手順を示します。

Dimiter Prodanov氏プラグイン利用例

  • 最新版のMySQLをインストールする。今回は、「Mac OS X 10.10(x86, 64-bit),DMG Archive」ダウンロードして、pkgファイルを実行してインストーラに従ってインストールしました。このとき、後ほどMySQLを起動するために必要な、rootユーザの初期パスワードがポップアップで出るので、キャプチャやメモをしておきます。
  • JavaによるMySQLエンジンのコネクタをダウンロードする。今回はmysql-connector-java-5.1.37をダウンロードし、コネクタをしかるべき場所にコピーします。(for windows)”jar”ファイルをImageJフォルダ内のjre/lib/ext下にコピーする。(for mac)~/ライブラリ/Java/Extensionにコピーする。
  • MySQLを起動する。Macでは、システム環境設定にMySQLが追加されるので、その画面からMySQLを起動します。(今回はテストなのでMac起動時に自動起動するチェックを外しています)


  • MySQLを起動したら、ターミナルからMySQLにログインします。初回ログイン時は、「セキュアインストレーション」します。ユーザーのアクセス権などを設定しながらインストールの詳細設定ができます。ターミナルで以下のコマンドを入力します。

$ /usr/local/mysql/bin/mysql_secure_installation

このとき、パスワードを聞かれるので、メモしておいたパスワードを入力します。
そのあと、指示通りに操作していき、rootユーザの新しいパスワードを設定しましょう。(http://qiita.com/hkusu/items/cda3e8461e7a46ecf25d
  • rootユーザとしてログイン。以下のコマンドをターミナルに入力して、設定したパスワードでMySQLにログインします。
$ /usr/local/mysql/bin/mysql -u root -p

http://mysqlweb.net/category/3998126-1.html
  • DB作成。テストで"darea"というデータベース(DB)をMySQLの中に作ります。rootでログインした状態で以下のコマンドを入力します。(データベース名は任意の名前で大丈夫です。)
mysql> create database darea;

実行後
(Query OK, 1 row affected (0.01 sec))
  • DBへのアクセスユーザとパスワードの設定。以下のコマンドを入力します。
mysql> GRANT ALL PRIVILEGES ON darea.* TO root@localhost IDENTIFIED BY 'root'; 

("darea"の部分は、作成したデータベース名にします。)
  • DBのテーブル作成。データベースの中に、実際にデータを格納しておくためのテーブルというものを作ります。まず、使うデータベースを宣言します。

mysql> USE darea;

(databaseがチェンジされます。)

次に、テーブル"config"を作ります。

mysql> CREATE TABLE config (id int, name text);

(単純に、IDと名前の配列としました。)

  • ImageJプラグインフォルダへMySQL_Plugin.javaファイルをコピーして、MySQL_Plugin.javaファイルをImageJで開き(ドラッグ&ドロップ)、上記のDBとテーブルに設定を合わせます。合わせたら上書き保存します。

(上述の操作に合わせたプラグインコードの設定)
    private String database  = "darea";
    private String dbHost  = "localhost";
    private String dbTable = "config";
    private String dbUser="root";
    private String dbPass="root";

  • PluginsからMySQL_Plugin.javaをコンパイル&ランする。下記、成功時のLogウィンドウが出ればOK)


(コネクト成功時のログ)

Jaap Kokorian氏プラグイン利用例

このプラグインはImageJで作ったResultsテーブルをMySQLのテーブルとして登録し、値を格納します。
  • MySQLの設定は上述のものと同じです。MySQL上でテーブルを作らなくても大丈夫です。
  • ij_mysql.zipを解凍し、フォルダごとPluginsフォルダにコピーして、ImageJを起動します。(内容にmysql-connector-java-5.1.13-bin.jarが含まれています。)
  • "Results Table to MySQL"を実行して、設定画面でDB、ユーザ、テーブルの指定をします。
(table欄には任意の名前を指定します。もし同じ名前のテーブルがMySQLにすでに存在していれば、上書きされます。)

次の図に、Jaap Kokorian氏プラグインに含まれる"mySQL test"の実行結果を示します。(設定は上述のものと同じです。)

自動でサンプル画像の全特徴量のテーブルがResultsテーブルとして現れます。
(サンプル画像のResultsテーブル)

(OKボタンでMySQLへ転送した後のログ)

無事に格納されたようなので、MySQLでも確かめてみます。
もし、一旦MySQLを落としてしまっている場合には、上述の手順で再度立ち上げて、パスワードを入力して、データベースの指定(mysql> USE darea;)まで行い、以下のコマンドを入力します。

mysql> SHOW TABLES;

(上述の手順で作成した二つのテーブルができています。)

そのまま、fiji_resultsテーブルの中身をみてみます。

mysql> SHOW COLUMNS FROM fiji_results;

(上述のResultsテーブルの中身が格納されていることがわかります。)

おわりに


今回は2つのプラグインを使って、ImageJのプラグインから、MySQLへデータテーブルの入力を行う手法を示しました。Dimiter Prodanov氏のプラグインを元に、MySQLのJavaコネクタ(Connector/J)を使って、削除、挿入、ソートなど、自在にコーディングが可能なはずです。もっとJDBCに詳しくなれば、もっとインタラクティブな操作も可能になるでしょう。

今回はSQLなどの文法などには詳しく触れることができませんでしたが、多くの書籍が出版されているので、図書館で調べてみてはいかがでしょうか。

今回はMySQLをいちからインストールしましたが、Webアプリケーション開発の時などは、MampやXampなどのパッケージソリューションを使うのも手段の一つです。

また、いろんなソフトがありすぎてというギークな人は、homebrewなどのパッケージ管理ソフトもオススメです。

次回もImageJと連携したAPIなどについて述べます。

参考記事:「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(24・3) 2009, p120-122」

0 件のコメント:

コメントを投稿