読者です 読者をやめる 読者になる 読者になる

国際的なデジタル画像の相互運用の枠組み、IIIFのためのサーバを導入してみたので簡単にご紹介

IIIF IIIF環境準備

さて、最近は国際的なデジタル画像の相互運用の枠組み、IIIFというプロトコルのようなものが世界のデジタル画像データベース界(?)を席巻しております。以前にも少しご紹介しましたが、「スコットランド国立図書館、IIIFコンソーシアムに加盟 | カレントアウェアネス・ポータル」というカレントアウェアネス・ポータルの記事にもあるとおり、

オックスフォード大学ボドリアン図書館、英国図書館(BL)、スタンフォード大学図書館、バイエルン州図書館、コーネル大学、フランス国立図書館BnF)、ノルウェイ国立図書館プリンストン大学図書館、ウェルカム財団、イェール大学(英国美術センター 、バイネッキ貴重書・手稿図書館)の11機関により、2015年6月に創設された

IIIFコンソーシアムによるものです。まさに、錚々たる面々によって開始されたと言って良いのではないかと思いますが…あれ…?しかし、2015年2月にパリで開催されたEuropeana Tech2015の時点ですでにコミュニティ参加機関はもっと多かったし、何より、すでにデファクト標準化しそうな手触りを感じたのだったし…? 実際の所、開発はもっと前から始まっていて、採用機関ももっと前からあった、ということは確かです。「IIIFコンソーシアム」というものが正式に立ち上がるほどまでに充実してきた、ということのようですね。

 

さて、脱線しましたが、脱線ついでに、IIIFコンソーシアム設立の記事を少しみてみますと、

インターネット上の画像ベースの情報資源の多くは、これまでサイロの中に閉じ込められてきたが、IIIFはそういった画像の表示や操作、アノテーションなどの仕方を世界中で共通化できるように支援する

という趣旨のことが書かれています。筆者のように、各地の貴重書デジタル画像をあれこれ眺めてテクスト校訂をしようとしたり、他の人も使いやすくなるようにリンクシステムを作成したりしている身としては大変ありがたく、また、同様のニーズは色々な局面においてあり得るだろうと痛感するところでもあり、特に教育コンテンツ作成においては非常に有益だろうと思います。試しに、この冬に東大文学部/人文社会系研究科で担当させていただく「文化資源デジタルアーカイブ特論」ではこれを全面的に採用した授業を展開してみようかと思って細々と準備中です。

 

 また、すでにいくつかの関連業者さん達はIIIFへの取組みを始めておられるようでうれしい限りですが、まだ始めておられない業者さん達におかれましては、国際的なエコシステムの割と大きな変化になりそうなので、それにあわせてビジネスモデルも含めてうまくやっていただいて、日本のデジタルコンテンツがきちんと国際的な潮流についていけるようにしておいていただけたらと切に願っております。

 

 それはともかく、以前にもこのブログでIIIFについては少しご紹介しましたが、今回は、サーバソフトの導入について少しご紹介したいと思います。以前にご紹介した際は、PythonベースのLorisという割と簡単に導入できるソフトを使っておりました。これは比較的インストールが簡単で、jpeg画像も扱ってくれるので割と色々やりやすいのですが、その代わり、ちょっと動作が遅く、アクセスが集中するとなかなか厳しいものがあるだろうかと思っていたので(とはいえキャッシングもするので同じURLへのアクセス集中は問題なさそうですが)、このたび、いよいよ本格的にIIIFを利用する必要が生じてきたので、もう少し動作の速いものがよさそうだということで、fcgiを使う別のフリーソフトIIPImage Serverを導入してみることにしました。結果的には、ちょっと使ってみている限りではLorisよりも速そうな感じでもあるのですが、導入がなかなか大変で、アマチュアの片手間仕事とするにはまだちょっとはやいかな、という印象を持ちました。もちろん、Githubでガリガリ作業しているようなレベルの方々やプロのエンジニアとしてこういうことに取り組んでおられる方々なら楽勝だと思いますが、私レベルの文系DIYプログラマにはちょっと負担が大きいかなという感じでした。

 

 さて、そのIIPImage Serverですが、高速化のためにfcgiを使って動くのでそれにあわせた環境の用意も必要です。今回は、フリーのLinuxディストリビューションの一つであるCentOS7を使ってインストールを試みました。ご存じのように、CentOS7は著名な商用Linuxディストリビューションの一つRedhatのフリー版という位置づけです。私はRedhatがフリーだった頃からずっと使ってきているので、なんとなくそのまま使っています。ちなみに、Linuxはご存じですね?今やフリーのOSの代表的な存在で、名だたるグローバルIT企業が開発に取り組んでその成果をフリーで公開するというすごい流れになっていて、スパコンランキングでもトップ10はしばらく前からすべてLinuxを採用している、というようなものです。下の方でも、スマホOSの二強の一角、AndroidLinuxベースですし、パソコン用もあって…という感じですが、大きな流れとしてはインターネットサーバ用OSとして長らく愛され着々と改良されてきたOSの一つです。

 

 またまた脱線しましたが、そのCentOS7にIIPimage Serverをインストールして使えるようにすべく、取組みを開始しました。まず、そもそもタイル画像化したTIFFファイルを用意する必要があるようなので、このための準備を…と思って、昨晩やってみたときはImageMagickでうまく作れなかったような気がしたのでVIPSを頑張ってインストールしたのですが(これに4時間くらいかかったのですが)、このブログを書きながらもう一度試してみたらImageMagickでできてしまいました…。(激しくショック)

 

…ということで、気を取り直して、ImageMagickのバージョンが6.4.7-10 以降なら、ピラミッド型タイル画像の作成は可能のようです。確認は

 

$ convert --version
Version: ImageMagick 6.7.8-9 2016-03-31 Q16 http://www.imagemagick.org

などとすればOKです。

 

そして、ピラミッド型タイル画像の作成方法は、下記のコマンドでできました。

$ convert 元の画像ファイル名 -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:ピラミッド型タイル画像ファイル名'

これについてはIIPImageのサイトに解説されているものと同じですのでそちらもご参照ください。本番(?)では、このスクリプトシェルスクリプトで回すなどして必要なファイル変換を自動的に済ませていただくとよいかと思います。

 それから、これは一応jpeg画像からでも作成可能ですが、ファイルサイズが結構大きくなります。たとえば 829K の画像ファイルが3.8Mになってしまったりしましたので、この点はちょっとご注意ください。

 

さて、気を取り直して、サーバソフトのインストールです。ここでまた余談ですが、実はCentOS6にはRPMパッケージが提供されていて、簡単インストールできる、という触れ込みだったので、最初はCentOS6にインストールして設定を試みていました。しかしながら、IIIFのImage API準拠でのアクセスがどうもエラーになってしまうので、ちょっとググってみたところ「あのパッケージはver1.0ってなってるけど実際に使ってるソースはもっと古いようでIIIF対応になってないんじゃないの?」という質問に対して、その通りなのでソースからコンパイルして。パッケージはもうちょっと待ってね、というような身もふたもない回答があって、まあそれならCentOS6にこだわる必要もなく、普通に最新版のOSを使うか、ということでCentOS7でソースからコンパイルすることになったのでした。

 

さて、インストールにあたっては、まず準備として

# yum install mod_fcgid

とやっておいてfcgiを使えるようにしておく必要があります。今回使うWebサーバソフトはApacheです。これが終わったらいよいよインストールです。

 

 ソースはGithubで取れるのですが、私はあまりGithubを使わないので、とりあえずソースファイルをダウンロードして展開してコンパイルしました。

 コンパイルは、公式サイトなどにはいかにも簡単なように書かれているのですが、実際にやってみると、足りないパッケージが結構あって色々インストールすることになりました。お約束ですが、

$ bunzip2 -c iipsrv-1.0.tar.bz2 | tar xvf -
$ cd iipsrv-1.0/
$ ./configure
$ make
$ make install

こんな感じです。configureをすると足りないライブラリについて色々アラートが出るので、いちいち調べて、とりあえずyumでインストールしていきます。*-develというパッケージが色々必要になるので、yumするときは$ yum install 必要なパッケージ名-* などとしてインストールしてしまうと割と樂です。とりあえずconfigureが最後まで通るようになったら、make してmake installです。

iipsrvのmake installまで通ったら、次はいよいよ設定です。今回は仮に

# mkdir /var/www/iipsrv

というディレクトリを掘っておいて

cp ./src/iipsrv.fcgi /var/www/iipsrv/

としておきます。それから、

/etc/httpd/conf.d/iipsrv.conf

などというファイルを作って設定を書いておく必要があります。私はこういうときはviを使うので

# vi /etc/httpd/conf.d/iipsrv.conf

で、内容は例えばこんな感じです。

 

ScriptAlias /iipsrv /var/www/iipsrv/iipsrv.fcgi

# Set our environment variables for the IIP server
FcgidInitialEnv VERBOSITY "6"
FcgidInitialEnv LOGFILE "/tmp/iipsrv.log"
FcgidInitialEnv MAX_IMAGE_CACHE_SIZE "1500"
FcgidInitialEnv JPEG_QUALITY "100"
FcgidInitialEnv MAX_CVT "8000"
FcgidInitialEnv FILESYSTEM_PREFIX "公開用画像ディレクトリのトップ"

 

「公開用画像ディレクトリのトップ」は、ピラミッドタイルTIFFファイルが置かれているディレクトリのトップを書いておきます。たとえば/opt/images/の下に01, 02, 03...というディレクトリがあって、そのさらに下にピラミッドタイルTIFFファイルが置かれている(=画像ファイルのパスが「/opt/images/01/0001.tif」等)という場合には、「/opt/images/」を書いておきます。その他の設定の意味と値については詳しくはこちらをご参照ください。たとえば、MAX_CVTピクセル単位で書いて送出する画像の最大サイズを制限します。

 

それから、画像の置いてあるディレクトリ「/opt/images/」がWebサーバから参照できるようにしておいてください。それと、iipsrv.fcgi を置いたディレクトリ「 /var/www/iipsrv」でfcgiが実行可能になるような設定も必要です。/etc/httpd/conf/httpd.confでのディレクトリのアクセス・権限制御の設定変更はもちろんですが、SELinuxを有効にしている場合は結構大変ですのでご注意ください。

 

一通り終わったら、CentOS7ですので

# systemctl restart httpd.service
とやってWebサーバソフトを再起動します。

 

これで、

http://Webサーバホスト名/iipsrv/iipsrv.fcgi?IIIF=/04/0170.tif/full/full/0/default.jpg

という風にアクセスしてみると、フルサイズ画像が表示されました。(私の場合)

あとは、たとえば下記のように、色々試してみていただくとよいかと思います。

http://candra.dhii.jp/iipsrv/iipsrv.fcgi?IIIF=/test/099-0127-00023.tif/pct:60,65,18,23/800,/0/default.jpg

IIIF Image APIの書き方に関しては過去記事をご覧ください。過去記事と同じ画像に対して同じURLを送ってみると、下記のように、異なるサーバソフト(過去記事ではLoris)でも同じように表示してくれます。

http://candra.dhii.jp/iipsrv/iipsrv.fcgi?IIIF=/test/099-0127-00023.tif/pct:60,65,18,23/800,/0/default.jpg

 

ちなみに、IIPImage Serverは、透かしをオンザフライで入れたりすることもできる結構多機能な画像配信サーバソフトのようですので、IIIFの枠組みのみにとらわれずに色々試してみるとまた面白いかもしれません。

 

次は、なんとかして機会を見つけて、Presentation APIについての記事を書けたらいいなと思っております。あちらはJSONメタデータを用意しておきましょう、という話で、これがどうなるかというと、たとえば最近あちこちでIIIF対応ビューワとして採用が広がっているMiradorでは、各地のサーバのJSONファイルを読み出して一つのビューワに表示できるようになっているようです。また、Presentation APIにはアノテーションやレイヤーなどの仕様も用意されているようですが、うまく実装できているクライアントがあるのかどうかはまだ十分に調査できていません。ちょうど、冒頭で言及したスコットランド国立図書館のサイトで採用されたようですが、Klokan Technologisが作っているビューワも結構多機能な感じなのでちょっと気になっています。

 

ということで、大変雑多なご紹介でしたが、お役に立ちましたら幸いです。