概要

IIIFイメージサーバの一つであるCantaloupeをEC2で起動する方法の備忘録です。

https://cantaloupe-project.github.io/

加えて、画像のダウンロードサイズに制限を加えるDelegate Methodsの一例についても紹介します。具体的には、フルサイズの画像を/full/full/で取得しようとした際、エラーが出てしまうケースへの対応を行います。

https://cantaloupe-project.github.io/manual/5.0/access-control.html

Cantaloupeのセットアップ

EC2インスタンスの作成

プラットフォームをUbuntu、インスタンスタイプをt2.medium、ストレージを8GB、に設定したEC2インスタンスを作成しました。

結果、以下の「パブリック IPv4 アドレス」を持つEC2インスタンスが作成されました。

54.172.71.20

ssh

起動したEC2インスタンスにsshで接続します。接続後、以下のコマンドにより、rootユーザのパスワードを設定します。

spuadsoswsdu

javaのインストール

以下のコマンドなどにより、javaをインストールします。

aapptt-gientstuapldlatdeefault-jre

cantaloupeのダウンロード

以下のコマンドなどにより、cantaloupeをダウンロードします。

awupgnteztiipnhstcttaapnlstl:a/lu/onguzipiteph-u5b..0c.o5m.zciapntaloupe-project/cantaloupe/releases/download/v5.0.5/cantaloupe-5.0.5.zip

設定

以下のコマンドなどにより、設定ファイル「cantaloupe.properties」を編集します。

c#cdpccaannttaalloouuppee-.5p.r0o.p5erties.samplecantaloupe.properties

vi cantaloupe.propertiesなどのコマンドにより、画像を格納するフォルダを指定します。

FilesystemSource.BasicLookupStrategy.path_prefix=/home/ubuntu/images/

cantaloupeの起動

java-Dcantaloupe.config=cantaloupe.properties-Xmx2g-jarcantaloupe-5.0.5.jar

以下のようなURLでcantaloupeが起動します。

http://54.172.71.20:8182/

画像の配置

サーバ上での作業

ubuntuユーザで/home/ubuntu/imagesに画像を格納するフォルダを作成します。

smukduibrun/thuome/ubuntu/images

ローカルでの作業

以下のノートブックなどを使って、pyramid tiled tifをローカルにダウンロードします。

そして、converted.tifをダウンロードした場合、以下のようなコマンドを使って、サーバに画像をアップロードします。

scp-i<>/Users/xxx/Downloads/converted.tifubuntu@54.172.71.20:./images/

画像がサーバにアップロードされると、以下のようなURLでinfo.jsonを取得できます。

http://54.172.71.20:8182/iiif/3/converted.tif/info.json

http://54.172.71.20:8182/iiif/3/converted.tifのようなURLでもリダイレクトされました。

さらに、以下のように、/3/を/2/にすると、Image API v.2のinfo.jsonを取得できます。

http://54.172.71.20:8182/iiif/2/converted.tif

小まとめ

これまでの設定で最低限のCantaloupeの起動は完了です。別途、https対応など行う必要がありますが、その方法は他の記事などで紹介できればと思います。

サイズが大きい画像への対応: max_pixelsを有効にする場合

例えば、『百鬼夜行図』(東京大学総合図書館所蔵)を対象とした場合、以下のURLからサイズが「79508 × 3082」であることがわかります。

https://iiif.dl.itc.u-tokyo.ac.jp/iiif/2/hyakki%2Fimages%2Fhyakki.tif/info.json

このPyramid Tiled Tiffは以下のGitHubリポジトリからダウンロードいただけます。

https://github.com/nakamura196/ptif_sample/blob/main/hyakki.tif

このファイルをそのままアップロードした場合、フルサイズの画像を取得しようとすると、以下のエラーが発生します。

http://54.172.71.20:8182/iiif/2/hyakki.tif/full/full/0/default.jpg

edaaaaaaaaauttttttttt.ieeeeeejjolddddddaarluuuuuuvvgi......aa.niiiiiixxeollllll..cillllllsslsiiiiiieei.nnnnnnrrploooooovvsiiiiiiillebssssssee.r......ttjallllll..eriiiiiihhtybbbbbbttt.rrrrrrttycaaaaaapp.arrrrrr..snyyyyyyHHet......ttraccccccttvlaaaaaapplonnnnnnSSeutttttteetpaaaaaarr.ellllllvvS.oooooolleouuuuuueerpppppppttveeeeeee..lr......sseaoprrrreettpreeeerrHieossssvvoorcooooiilnaeuuuuccd.tsrrrreeeIiscccc((rlooeeeeHH.lnr....tthe..IiHHttagOPmiaappnaprainnSSdleogfddeelSrce.llrreiaeRveevv(ztse2rrllSeisq.SSeeeEoouIeettrxnremrr..vcL.savvjjleivtgllaaepsaHeeevvtttlaRttaaHi.ine..::oovddshd67lnaaloao89d:lteunG70eierrde))rTd(.clt.haPhee(jetra.(HaeondHavr(cdoanaeOelGnd:qpseEdl7ues(Tle9eroI(er1sarmIrS)tt.amSeeijgaerdoaegrvnvRevlpLaeRleii:qeetxs2ust.et0eo.jl.1sujaj)travaaHcvarvaea:ean.:3a:dj958la7)e2ev)x6rac).:ej1ea2dv8sa):t3h9e9)maximumthreshold(max_pixels)setintheconfiguration.

これは、cantaloupe.propertiesmax_pixels10,000,000が設定されており、79,508 × 3,082 = 245,043,656max_pixelsを超えてしまうためです。

###maMtrxahe_xespipimsoxuenemrslvesne.ur=m.Sbe1eRt0re0qt0ouo0fe0s00pt0isfxoefrlosrnotmoomrarexeitpmuiurxmne.lisntaharnestphoinssew,iltlorperceevievnetanveerrlrooarding

このmax_pixels0にすることで、上限値を解除することができますが、その方法は後述します。

max_pixelsを指定することで、サーバへの負荷を軽減できる利点がありますが、Universal Viewerなどでフルサイズの画像をダウンロードしようとした際、利用者にエラーが返却されてしまう点が課題です。

そのため、Cantaloupeで用意されているDelegate Methodsを使って、max_pixelsの閾値を超える場合の対処方法を検討してみます。

Delegate Methodsの有効化

cantaloupe.propertiesdelegate_script.enabledをtrueにします。さらに、delegate_script.pathnameを指定します。ここでは、ubuntuユーザのホームディレクトリを想定します。

aapptt-gientstuapldlatdeefault-jre

0

さらに、サンプルのスクリプトをubuntuユーザでコピーしておきます。

aapptt-gientstuapldlatdeefault-jre

1

スクリプトの更新

delegates.rbスクリプト内のauthorizeメソッドを以下のように更新します。

aapptt-gientstuapldlatdeefault-jre

2

上記により、/full/full/をURLに含む形でリクエストされ、それがmax_pixelsの値を超える場合、/full/max/を含むURLにリダイレクトさせます。これにより、エラーは返却されず、max_pixelsで指定されたサイズで画像がダウンロードされます。

サイズが大きい画像への対応: max_pixelsを無効にする場合

上記の方法とは別に、max_pixelsを無効にする方法も考えられます。具体的には、以下のようにmax_pixelsを指定します。

aapptt-gientstuapldlatdeefault-jre

3

上記の設定により、サーバのスペック次第ですが、max_pixelsを気にせずに利用することができます。

なお、本記事で使用しているt2.mediumインスタンスでは、java.lang.OutOfMemoryError: Java heap spaceのエラーにより、横幅などを大きな値で指定した場合、ダウンロードできませんでした。

一方、スペックが高いサーバの場合、上記のヒープメモリを気にする必要はありませんが、上述の「百鬼夜行図」をフルサイズ(/full/full/を含むURL)でダウンロードしようとすると、以下のようにダウンロードできませんでした。

これは、jpgの最大サイズに引っかかってしまうのが原因のようでした。

上記への対応として、delegates.rbスクリプト内のauthorizeメソッドを以下のように変更することで、指定した横幅または縦幅を最大値として画像をダウンロードできるようになりました。

aapptt-gientstuapldlatdeefault-jre

4

ただし、上記の設定の場合、info.jsonmaxAreamaxWidthなどが記述されないため、/full/full/を含むURLでアクセスしたにもかかわらず、info.jsonで明記されているwidthheightよりも小さいサイズの画像がダウンロードされてしまうため、適切な方法ではないと考えられます。

縦幅と横幅の乗算の結果であるmax_pixelsを指定しなくて良い点が利点ですが、IIIFの規格に適合しているかを検討する必要がありそうです。

https://iiif.io/api/image/3.0/

まとめ

本記事では、Cantaloupeのセットアップ方法を紹介しました。

また例外的な対応方法として、サイズが大きい画像のダウンロードに際して、Delegate Methodsを使用する方法を紹介しました。Delegate Methodsを活用することにより、認証済みのユーザにのみ大きな画像をダウンロードさせる、といったことを実現できるようです。

今回は変則的な利用方法を紹介しましたが、今後Delegate Methodsの使用例についても調査できればと思います。

本記事がCantaloupeを用いたIIIFイメージサーバの構築に立てば幸いです。

また誤った理解や記述が含まれる可能性が高いため、修正コメントなどをいただけますと幸いです。