IIIF Image サーバ (IIP Image server)構築のために(Python3+VIPSで)(Centos7用追記あり)

以前に、IIIF Imageサーバで大きな画像やたくさんの画像を高速に配信したい場合の有力な手段としてIIP Image serverのインストールの仕方をご紹介しました。

ただ、以前の記事では、「ピラミッド型タイル画像ファイルの用意」に関する説明があまり親切ではありませんでした。この点についての質問を時々いただくので、これについてもう少しご説明してみることにしました。

以前の記事ではImageMagickを使ったやり方を示していましたが、画像が多い場合はVIPSの方が高速で良いという話を聞きますので、VIPSを使った方法を見てみましょう。 動作環境は、Ubuntu18 + Python3です。

まず、こちらの指示に従って、VIPSを以下のコマンドにてインストールします。

% sudo apt install libvips-tools

これで依存関係のあるパッケージも一緒にインストールできるのではないかと思います。もしダメなら、その前に以下のコマンドでlibvipsそのものもインストールしておきましょう。

% sudo apt install libvips libvips-dev

次に、こちらの指示に従いつつ、Pyhon3環境があることを前提として、以下のコマンドにてインストールします。

% sudo apt-get install python3-gi gir1.2-vips-8.0

その後、以下のようにして、Pythonモジュールをダウンロード&設置します。

% sudo su

% wget https://raw.githubusercontent.com/jcupitt/libvips/8.4/python/packages/gi/overrides/Vips.py -O /usr/lib/python3/dist-packages/gi/overrides/Vips.py

これでVIPSをPython3から使えるようになったはずです。

次に、指定したフォルダ内のjpgファイル群からPyramid tif群をまとめて生成してみます。これは 以下のようなスクリプトでできました。

#!/usr/bin/python3
import sys
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips
import glob
import os
file_names = sys.argv[1]+"/*.jpg"
list_file_names = glob.glob(file_names)
for file_path in list_file_names:
  new_file_path = os.path.splitext(file_path)[0] + ".tif"
  print(new_file_path)
  im = Vips.Image.new_from_file(file_path)
  new_file_path = new_file_path+'[compression=jpeg,Q=75,tile=1,tile-width=256,tile-height=256,pyramid=1]'
  im.write_to_file(new_file_path)

上記のスクリプトを mk_mani.pyというファイル名で保存した場合、

% python3 mk_mani.py [JPEG画像が保存されているフォルダ名]

という風にすると、上記のコマンドラインにて指定したフォルダの中の「.jpg」の拡張子を持つJPEG画像からPyramid Tiffファイルを生成できるはずです。

特にこれといった特別なことはしていませんが、ご参考になりましたら幸いです。

追記: Centos7で同じ事をするための手順も大体分かりましたので、とりあえず私の経験ということでご紹介しておきます。

まずはPython3をインストールしておきましょう。どうやら、baseリポジトリから入れられるようになっている みたいなので、epelやremiからインストールしてしまったという人はいったん削除してからbaseのものを 入れ直すと手順が楽になると思います。(削除することで他の問題が発生しそうだという場合は削除しないように お願いします)。

python3は開発パッケージも必要のようですので、

% sudo yum install python3-devel

としておきましょう。これでpython3がらみで必要なものはまとめてインストールされると思います。

それから、まだepelやremiをyumリポジトリとして設定していない人は、これを機会に設定して おきましょう。少なくともremiは以下の手順の中で必要になります。以下のサイトなどをご参考に。

https://www.kakiro-web.com/linux/remi-install.html

https://qiita.com/kodamacom/items/308f1c3e223d115103a9

さて、さっそくvipsのインストールなのですが、vipsの開発パッケージインストールのところで Remiに入っているlibwebp7-develが必要で、かつ、既存の libwebp-develとかち合ってしまうので既存のものは削除します。 そうすると、vips-develがインストールできるようになります。

% sudo yum erase libwebp-devel

% sudo yum --enablerepo=remi install libwebp7-devel

% sudo yum install vips-devel

ここからが、メモが甘くてややうろ覚えなのですが、

% sudo pip3 install pycairo

% sudo yum install gobject-introspection-devel

% sudo yum install cairo-gobject-devel

% sudo yum install pygobject3-devel

という風にしてから、最後に、以下のコマンドで、vips.pyを所定のディレクトリにダウンロードしておくと、 上記のようにPython3からVIPSを使えるようになりました。

% wget https://raw.githubusercontent.com/jcupitt/libvips/8.4/python/packages/gi/overrides/Vips.py -O /usr/local/lib64/python3.6/site-packages/gi/overrides/Vips.py

なるべくこまめにメモしながら作業したつもりですが、何か抜け落ちているかもしれず、うまくいかない場合は ご容赦ください。