🐈

IIIF画像に対して、多角形のアノテーションを付与するツールを作成しました。

2025/04/02に公開

概要

IIIF画像に対して、多角形のアノテーションを付与するツールを作成しました。

https://next-fb-anno.vercel.app/

本記事では、このツールについて説明します。

使い方

以下がトップ画面です。IIIFマニフェストファイルのURLを入力します。「入力例を使用」からもお試しいただけます。『百鬼夜行図』(東京大学総合図書館所蔵)を使用しています。

以下のようなアノテーション登録画面が表示されます。

画面右上のログインボタンからログインできます。

アノテーション付与の方法は、以下の動画を参考にしてください。

https://youtu.be/9RMqaXTaOzE

開発した背景

以下の記事で説明したように、Mirador 3の mirador-annotations プラグイン向けに、Firestore用のアダプタを開発しました。

https://zenn.dev/nakamura196/articles/869123b28d75c3

このmirador-annotations プラグインについて、多角形のアノテーション付与を行いづらいという意見がありました。

そこで、主に多角形のアノテーション付与を支援するために、本ツールを開発しました。また、アノテーション付与を実装するためのライブラリであるAnnotoriousについて、Reactライブラリが公開されていたので、この調査も兼ねて実装しました。

https://annotorious.dev/react/openseadragon-iiif/

さらに、上記の記事で紹介したmirador-annotations プラグインのFirestore用のアダプタを流用することで、同じFirebaseのサービス(AuthenticationとFirestore)を使用するようにしました。

そのため、本ツールの右上のボタンに、Miradorへのリンクを付与しました。

これにより、本ツールで編集を行い、IIIFマニフェストファイルのメタデータを含む、情報の表示にはMiradorを使用する、といった使い方が可能になるかと思います。

多角形のアノテーションを付与するための既存ツール

IIIF画像に対してアノテーションを付与する機能を持つ既存ツールは数多く存在します。ここでは、IIIF画像に対して多角形のアノテーションを付与する機能を有するツールと、本ツールとの差分を紹介します。

ここでは、国立国会図書館で公開されている「和泉国絵図」を例とします。

Omeka Classic + IIIF Toolkit

以下の記事でセットアップ方法や使い方を紹介しています。

https://zenn.dev/nakamura196/books/2a0aa162dcd0eb

IIIF Toolkitでは、Mirador 2が使用されており、ポリゴンアノテーションが提供されています。

今回にニーズに対しては、多角形アノテーションではなくポリゴンアノテーションである点と、Omeka Classicのセットアップ(サーバの準備や維持)が必要になる点が課題として挙げられます。

Recogito

Recogitoでは傾斜したボックス形式のアノテーションを付与することはできましたが、多角形のアノテーション付与はできないようでした。

また、以下のように、pctを用いてIIIF画像にアクセスするようで、画像が表示できないケースが多くありました。

Glycerine: Image Annotation Workbench

本ツールが最も今回のニーズに合致していました。

https://glycerine.io/

おそらく本ツールと同じ「Annotorious(のver.2)」が使用されており、多角形によるアノテーションのほか、複数人による共同作業も可能でした。

唯一の課題として、登録したアノテーションの一括登録機能が提供されていませんでした。この点に対して、今回開発したツールでは、読み込んだIIIFマニフェストファイルに対して、ログインユーザが登録したユーザが付与したアノテーションを一括エクスポートする機能を設けました。

これにより、本ツールで付与したアノテーションを一括エクスポートし、他の可視化ツールで使用する、といった使い方が容易になります。

なお、以下の記事で紹介したように、Mirador 3の mirador-annotations プラグインにも付与したアノテーションをダウンロードする機能が提供されています。しかい、この機能はCanvasごとにダウンロードする仕様となっており、複数ページから構成される場合には、ページごとにダウンロードする必要がありました。

https://zenn.dev/nakamura196/articles/3e1794842af3ee

工夫点および開発メモ

本ツールの開発にあたり、工夫した点などを紹介します。

入力するIIIFマニフェストのv2およびv3対応

入力するIIIFマニフェストファイルはv2とv3、どちらでも対応できるようにしました。この実現にあたり、以下の記事で紹介した@iiif/parserを使用しました。

https://zenn.dev/nakamura196/articles/9fa6ebac741d1f

v2のIIIFマニフェストファイルが入力された場合、本ライブラリでv3のマニフェストファイルに変換することで、ツール内では、v3のマニフェストファイルを対象とした処理に統一しました。

IIIFの型

TypeScriptを用いた開発にあたり、以下を使用した。IIIFの型を利用することができ、便利に感じました。

https://www.npmjs.com/package/@iiif/presentation-3

AnnotriousのFormatAdapter

当初Annotriousを使用していた際、Annotrious独自のフォーマットでアノテーションが作成され、Mirador 3の mirador-annotations プラグインに対応したアノテーションへの変換にあたり、難しく感じる点が多かったです。

この点について、以下の記事にあるように、W3CImageFormatといったFormatAdapterを適用することで、アノテーションの記述形式を変更することができました。

https://annotorious.dev/api-reference/format-adapter/

このW3CImageFormatを用いることで、変換作業のコストが下がりました。一例として、以下のようにNext.jsから使用しました。

import dynamic from "next/dynamic";
import { W3CImageFormat } from "@annotorious/annotorious";

const DynamicOpenSeadragonAnnotator = dynamic(
  () => import("@annotorious/react").then((mod) => mod.OpenSeadragonAnnotator),
  { ssr: false }
);

const DynamicOpenSeadragonViewer = dynamic(
  () => import("@annotorious/react").then((mod) => mod.OpenSeadragonViewer),
  { ssr: false }
);

interface ViewerProps {
  tool: "rectangle" | "polygon" | undefined;
  options: OpenSeadragon.Options;
}

// infoUrls,
export function Viewer({ tool, options }: ViewerProps) {
  return (
    <div className="flex-1 relative">
      <DynamicOpenSeadragonAnnotator
        drawingEnabled={tool !== undefined}
        tool={tool || "rectangle"}
        adapter={W3CImageFormat("")}
      >
        <DynamicOpenSeadragonViewer
          className="absolute inset-0"
          options={options}
        />
      </DynamicOpenSeadragonAnnotator>
    </div>
  );
}

まとめ

IIIF画像に対して、長方形のアノテーションを付与するツールは、よいものが数多く存在しますが、多角形については適切なものが見つからず、今回紹介したツールを開発しました。同様のツール開発の参考になりましたら幸いです。

なお、本ツールの提供期間は未定のため、もしご使用される際には、本記事でも紹介した「エクスポート」機能を使用し、付与したアノテーションをローカルに保存するようにしてください。

Discussion