ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
Omeka Sを用いて、IIIF Presentation API v3のマニフェストファイルを作成する

Omeka Sを用いて、IIIF Presentation API v3のマニフェストファイルを作成する

概要 IIIF Presentation API v3のマニフェストファイルを作成する必要がありましたので、Omeka Sを用いて作成する方法について紹介します。 Omeka SとIIIF Serverモジュールのインストール 以下などを参考にインストールしてください。 https://zenn.dev/nakamura196/books/f4f87f9730e12e Omeka Sでのアイテム作成 今回は国立国会図書館で公開されている、以下の画像を対象にします。 https://dl.ndl.go.jp/api/iiif/2585098/R0000003/full/full/0/default.jpg アイテムの新規作成を行い、適当なタイトルを与えます。 次に、「メディア」タブを選択して、続けて、画面右のメニューで「URL」を選択します。そして、「URL」に画像のURLを入力します。 そして、画面右上の「追加」ボタンをクリックして、アイテムを登録します。 IIIFマニフェスト 今回は、https://omekas.aws.ldas.jp/omeka4/というサイトに対してアイテムを作成し、Omekaの内部IDとして19が与えられました。 v2 このとき、以下のURLでIIIF Presentation API v2のマニフェストファイルにアクセスできます。 https://omekas.aws.ldas.jp/omeka4/iiif/19/manifest またはAPIのバージョン/2を追加して、以下のURLでもアクセスできます。 https://omekas.aws.ldas.jp/omeka4/iiif/2/19/manifest v3 上記の/2となっている箇所を/3に変更することで、IIIF Presentation API v3のマニフェストファイルにアクセスできます。 https://omekas.aws.ldas.jp/omeka4/iiif/3/19/manifest または、IIIF Serverモジュールの設定画面において、デフォルトのバージョンを3に変更することで、バージョンを指定しない場合に、v3のマニフェストファイルが生成されます。 まとめ IIIF Presentation API v3(および Image API v3)の生成において、参考になりました幸いです。

IIIFを中心としたデジタルアーカイブ関連ツールを作成しました。

IIIFを中心としたデジタルアーカイブ関連ツールを作成しました。

概要 IIIFを中心としたデジタルアーカイブ関連ツールを作成しました。以下のURLからお試しいただけます。 https://nakamura196.github.io/viewer/ 現在、以下の2つの機能を提供しています。 Mirador 3による画像比較 コマ数の指定ツール Mirador 3による画像比較 https://nakamura196.github.io/viewer/input 比較したいマニフェストファイルのURLやCanvasのURIを指定します。例などをお試しください。 以下のように、画像を比較することができます。 コマ数の指定ツール https://nakamura196.github.io/viewer/canvas IIIF対応のビューアにおいて、{url}?manifest={manifest}&canvas={canvas}のような形でコマ数を指定することが多いです。 ただこのcanvasのURIを取得するのが難しい場合があるため、マニフェストファイルとコマ数を指定すると、canvasのURIを自動取得するツールを作成しました。 必要項目を入力して「URLを作成」ボタンをクリックすると、canvasのURIを含むURLが表示されます。わかりにくいと思いますので、画面下部の「例」などをお試しください。 まとめ IIIF Presentation APIのv2のみへの対応ですが、お役に立ちましたら幸いです。

IIIF Curation Viewerのアノテーションの色を変更する

IIIF Curation Viewerのアノテーションの色を変更する

概要 IIIF Curation Viewerで付与したアノテーションの色を変更したい、というご要望をいただいたので、その方法の一例を紹介します。 アノテーションのマーカーの種類に関する説明は以下などにまとめられています。 http://codh.rois.ac.jp/software/iiif-curation-viewer/annotation.html#マーカーの種類 JSONデータを手動または機械的に修正して実現することも可能ですが、今回はGUIを使った変更方法をご紹介します。 動画 作業の流れを動画にしました。参考にしてください。『百鬼夜行図』(東京大学総合図書館所蔵)を使用しています。 https://www.youtube.com/watch?v=fbfdQVxHTgs 作業内容 IIIF Curation Viewerでアノテーションを付与する この部分までは、以下の記事などを参考に進めてください。 https://zenn.dev/nakamura196/books/f4f87f9730e12e 結果、以下のように、青色の矩形でアノテーションが表示されます。この矩形の色を変更してみます。 独自ツールを用いた編集 矩形の色の変更にあたり、独自のツールを作成しました。以下のURLから編集画面にアクセスできます。 https://ndl-ocr.vercel.app/icv Curation URIを入力すると、以下のような編集画面に遷移します。 https://ndl-ocr.vercel.app/icv/editor?curation=https://mp.ex.nii.ac.jp/api/curation/json/bfb7d80e-4e51-44fb-97d2-94e7c5acb2fd まず、「1. ダウンロード」を押して、編集前のデータをローカルにダウンロードしてください。念の為、以後の作業前のデータをバックアップしておきます。 次に、動画を参考に、以下のように、ColorやCharsを編集します。 そして、「3. コピー」を押して、編集内容のjsonデータをコピーします。 あとは、動画を参考に、IIIF Curation Editorを開き、JSONデータを更新し、IIIF Curation Viewerのアノテーションモードで変更内容を確認します。以下のように、矩形に色が付き、charsに指定した文字列が合わせて表示されます。 まとめ IIIF Curation Viewerのアノテーションモードにおいて、矩形の色などを変更されたい場合の参考になりましたら幸いです。

Headless CMSを使ってIIIFマニフェストファイルを作成する

Headless CMSを使ってIIIFマニフェストファイルを作成する

概要 Headless CMSの学習のため、CMSに登録した情報からIIIFマニフェストを生成する試みを行いました。 以下がその結果です。(といっても、以下のアプリからはサーバ側の処理内容は見えないです。) https://iiif-headless-cms.vercel.app/ 本記事は上記の取り組みの備忘録です。 Contentful https://www.contentful.com/ 以下のようなiiifというContent modelを作成しました。画像データ(url, width, height)の紐付けには、フィールド「JSON object」と「Reference」が使用できそうでしたが、ここでは「Reference」を選択し、画像データの情報を管理するimageというContent modelを別途作成しました。 IIIFマニフェストの形式に変換して返却するAPIについては、Nuxt3を用いて作成しました。 https://github.com/nakamura196/iiif-headless-cms/blob/main/server/api/iiif/contentful/[id]/manifest.ts 以下のライブラリを使用することで、簡単に接続することができました。 https://www.npmjs.com/package/contentful microCMS https://microcms.io/ microCMSにおいても同様のスキーマ作成を行いました。 以下のような画像データを格納するカスタムフィールドを作成しました。 このカスタムフィールドを繰り返しありの形でiiifスキーマに追加することで、以下のように、画像に関する情報を格納できるようになりました。 スキーマをエクスポートしたデータは以下です。 { "apiFields": [ { "idValue": "ZRdeXxiWOB", "fieldId": "label", "name": "ラベル", "kind": "text", "isUnique": false }, { "fieldId": "image", "name": "画像", "kind": "repeater", "customFieldCreatedAtList": [ "2023-02-03T00:42:08.118Z" ] } ], "customFields": [ { "createdAt": "2023-02-03T00:42:08.118Z", "fieldId": "iiif_image", "name": "iiif画像に関するフィールド", "fields": [ { "idValue": "Y1B3C_tC1c", "fieldId": "url", "name": "URL", "kind": "text" }, { "idValue": "kS9afBRRHr", "fieldId": "width", "name": "幅", "kind": "number" }, { "idValue": "SpLhBEapVh", "fieldId": "height", "name": "高さ", "kind": "number" } ], "position": [ [ "Y1B3C_tC1c", "kS9afBRRHr", "SpLhBEapVh" ] ], "updatedAt": "2023-02-03T00:45:50.426Z", "viewerGroup": "H7Y" } ] } IIIFマニフェストの形式に変換する処理は以下です。 ...

IIIF Image API level 0による画像公開方法

IIIF Image API level 0による画像公開方法

概要 IIIF Image API level 0は、事前に作成した静的なタイル画像を用いて画像配信を行います。これにより、GitHub PagesやAmazon S3といった静的ファイルのホスティングサービスのみでの画像公開が可能となります。一方、任意の範囲の画像切り出しができないといった欠点も挙げられます。 本記事は、IIIF Image API level 0を用いた画像公開の一例について紹介します。 ツール 以下のノートブックでお試しいただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/IIIF_Image_API_静的ファイル作成ツール.ipynb 本ノートブックは、以下のスクリプトを参考にしています。 https://github.com/zimeon/iiif/blob/main/iiif_static.py 公開例 GitHub Pagesで公開するタイル画像を表示している例です。 https://www.kanzaki.com/works/2016/pub/image-annotator?u=https://nakamura196.github.io/iiif_static/files/tile/kunshujo/info.json まとめ 静的なファイルのみでIIIF Image API(のlevel 0)に対応する方法について紹介しました。 本手法の利点と欠点を考慮したうえで、ご活用いただけますと幸いです。

IIIF Presentation Validatorのローカル環境で利用方法

IIIF Presentation Validatorのローカル環境で利用方法

概要 IIIF Presentation Validatorは、その名の通り、IIIFプレゼンテーションAPIの検証を行うためのツールです。 https://presentation-validator.iiif.io/ 以下の記事で、その使い方を説明しています。 今回、以下の記事で紹介するIIIF Presentation API v3に対応したマニフェストファイルの作成にあたり、ローカル環境での検証が必要になりました。 そこで、本ツールのローカル環境へのインストールを行いましたので、その備忘録です。 インストールの方法 以下に説明がありますが、Step oneを実行するとうまくいきませんでした。(こちらのIssueも上がっていました。) https://github.com/IIIF/presentation-validator#local-installation そこで少し方法を変えて、以下のように実行することで、ローカル環境でうまく実行できました。 git clone https://github.com/IIIF/presentation-validator.git cd presentation-validator pip install -r requirements.txt python iiif-presentation-validator.py 上記により、localhost:8080 で本ツールが起動します。 ローカル環境のマニフェストファイルの検証方法 (よりよい方法があるかもしれませんが…) 検証したいマニフェストファイルを格納したディレクトリで、ローカルサーバを起動します。例えば、以下のように実行します。 python -m http.server これにより、localhost:8000 でローカルサーバが起動しますので、http://localhost:8000/manifest.jsonといったURLでマニフェストファイルにアクセスできます。 このURLを以下のようにツールに登録することで、マニフェストファイルの検証が可能です。 エラー等が生じた場合には、マニフェストファイルを編集して、再度上記の「Go!」ボタンをクリックすることで、再度検証することができます。 その他 以下のようなURLにアクセスすることによっても検証を行うことができます。この場合、検証結果はjsonで返却されます。 http://localhost:8080/validate?version=3.0&url=http://localhost:8000/manifest.json { "okay": 1, "warnings": [ ], "error": "", "errorList": [ { "title": "Resolve Error", "detail": "The manifest id (https://dl.ndl.go.jp/api/iiif/2585098/R0000003/full/full/0/default.jpg) should be the same as the URL it is published at (http://localhost:8000/manifest.json).", "description": "", "path": "/id", "context": "{ 'id': '...'}" } ], "url": "http://localhost:8000/manifest.json" } まとめ IIIFマニフェストファイルを検証する際の参考になりましたら幸いです。 ...

画像とIIIFマニフェストをipfsに追加してみる

画像とIIIFマニフェストをipfsに追加してみる

概要 以下のツイートを参考に、画像とIIIFマニフェストをipfsに追加してみました。 https://twitter.com/edsilv/status/1400221815369355267 ipfsへの追加については、上記のツイートでも言及されているFleekを使用しました。 https://fleek.co/ Fleekの使い方は以下のサイトが参考になりました。 https://i-407.com/blog/m10/ ソースコード ソースコードは以下です。 https://github.com/nakamura196/fleek_test 手順 画像のアップロード まず、上記のリポジトリに以下の画像をアップロードしました。 https://github.com/nakamura196/fleek_test/blob/main/kunshujo_400.jpg 先のサイトを参考に、本リポジトリをfleekに接続しました。その結果、以下のURLでアクセスできました。 https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg 参考 またIPFSのデスクトップアプリをダウンロードして、「QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo」を入力したところ、以下のように表示することができました。 さらに、以下のGoogle Chromeの拡張機能をインストールしました。 https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch 上記のデスクトップアプリを起動した状態で、先のURL(https://ipfs.io/ipfs/…)を入力すると、以下のURLに変換されました。 http://bafybeigepsc4mwgbur7y7tao5v26oeqgi3bkial2rrbuudlaf3z43iyquq.ipfs.localhost:8080/kunshujo_400.jpg マニフェストファイルのアップロード 次にマニフェストファイルを作成します。以下のようなマニフェストファイルを作成しました。 { "@context": "http://iiif.io/api/presentation/2/context.json", "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg", "@type": "sc:Manifest", "attribution": "sample", "description": "Manifest file of My first IIIF and IPFS", "label": "My first IIIF and IPFS", "metadata": [ { "label": "keyword", "value": "ipfs" } ], "sequences": [ { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/sequence/normal", "@type": "sc:Sequence", "canvases": [ { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/canvas/p1", "@type": "sc:Canvas", "height": 289, "images": [ { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/annotation/p1-image", "@type": "oa:Annotation", "motivation": "sc:painting", "on": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/canvas/p1", "resource": { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "height": 289, "width": 400 } } ], "label": "[1]", "thumbnail": { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg" }, "width": 400 } ] } ] } その結果、以下のURLでアクセスできるようになりました。 ...

TEIビューアでの利用を想定したCustom OpenSegDragon Viewerを作成しました。

TEIビューアでの利用を想定したCustom OpenSegDragon Viewerを作成しました。

概要 TEIビューアでの利用を想定したCustom OpenSegDragon Viewerを作成しました。 背景 以下のようなTEIとIIIFを対応させたビューア開発において、次に示す機能を持ったビューアが必要でした。 https://www.hi.u-tokyo.ac.jp/collection/digitalgallery/wakozukan/tei/ IIIFのマニフェストファイルを読み込むことができる。 ビューアコンポーネント側でのコマ送りを、コンポーネント外で把握することができる。 画像の部分領域をハイライトすることができる。 上記の要件を全てを満たす既存のIIIF対応ビューアを見つけることができなかったため、独自のビューアの開発を試みました。合わせて、npmパッケージとして公開することも試みました。 開発したビューア ドキュメンテーション等がまだ不十分ですが、以下のページで公開しています。このページで、ソースコードへのリンクも掲載しています。 https://www.npmjs.com/package/@nakamura196/osd-custom-viewer vue3とviteを使ったコンポーネントの開発およびnpmでの公開にあたっては、以下のサイトを参考にしました。 https://blog.egmond.dev/vue-component-to-npm-package 使用例 以下のページで導入例をご確認いただけます。 https://nakamura196.github.io/nuxt3-iiif-viewer/custom-osd コンポーネント内外からのコマ送りが可能です。これにより、例えばIIIF画像とTEIテキストの並列表示を行った際、TEIテキスト側からのコマ送りや、画像のコマ送りによる当該テキストへのスクロールなどを行うことができます。 またハイライト機能用いることで、あるテキスト行に対応した画像の部分領域をハイライトさせる、といったことが可能です。 使用例のソースコードは以下です。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/pages/custom-osd/index.vue ssrでの公開にあたり、pluginsフォルダに以下を追加しています。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/plugins/custom-osd.client.js まとめ ドキュメンテーションの充実や、IIIF v3への対応など、多くのTODOが残っていますが、参考になりましたら幸いです。

Nuxt3のssrでIIIF viewerを導入する

Nuxt3のssrでIIIF viewerを導入する

概要 Nuxt3のssrでIIIF viewerを導入する方法の備忘録です。 Canvas Panel 以下のビューアの導入です。 https://iiif-canvas-panel.netlify.app/ インストール npm i @digirati/canvas-panel-web-components page 以下を参考にしてください。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/pages/canvas-panel/index.vue 表示例 https://nakamura196.github.io/nuxt3-iiif-viewer/canvas-panel Tify 以下のビューアの導入です。 https://github.com/tify-iiif-viewer/tify インストール npm i tify page 以下を参考にしてください。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/pages/tify/index.vue ssrの場合、document is not defined.のエラーが発生したため、pluginsに以下のファイルを追加しています。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/plugins/tify.client.js 表示例 https://nakamura196.github.io/nuxt3-iiif-viewer/tify まとめ 他のビューアについても適宜追加していきたいと思います。 導入方法について、誤りやよりよい方法があるかもしれませんが、参考になりましたら幸いです。

【Omeka S モジュール紹介】IIIF Searchモジュール

【Omeka S モジュール紹介】IIIF Searchモジュール

概要 IIIF Search は、全文検索のためのIIIF Content Search APIを追加する Omeka S 用モジュールです。 特に、日本語テキストを扱うための改修を加えた以下のモジュールを対象に、その使用方法を紹介します。 https://github.com/nakamura196/Omeka-S-module-IiifSearch インストール githubからソースコードをcloneします。omeka-sは適宜読み替えてください。 cd omeka-s/modules git clone https://github.com/nakamura196/Omeka-S-module-IiifSearch.git IiifSearch githubからインストールする場合には、上記のように、フォルダ名を対象モジュール名に変更する必要がある点に注意が必要です。 インストール後、検索クエリとして使用する文字列の下限を設定するフォームが表示されます。日本語テキストを扱い場合には、1などに設定しておくことをお勧めします。 ALTO形式のxmlファイルの作成 OCR結果を記述するためのフォーマットの一つであるALTO形式のXMLファイルを作成する必要があります。 https://www.loc.gov/standards/alto/techcenter/elementSet/index.html ALTO形式のXMLファイルの作成にあたっては、以下の記事などが参考になります。 例えば、以下の画像ファイルを対して、 以下のようなxmlファイルが生成できます。 <?xml version="1.0" encoding="utf-8"?> <alto xmlns="http://www.loc.gov/standards/alto/ns-v4#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.loc.gov/standards/alto/ns-v3# http://www.loc.gov/standards/alto/alto.xsd"> <Description> <MeasurementUnit>pixel</MeasurementUnit> <sourceImageInformation> <fileName>alto_test.png</fileName> </sourceImageInformation> <OCRProcessing ID="IdOcr"> <ocrProcessingStep> <processingSoftware> <softwareName>tesseract 4.0.0-beta.1</softwareName> </processingSoftware> </ocrProcessingStep> </OCRProcessing> </Description> <Layout> <Page ID="page_1" PHYSICAL_IMG_NR="1" HEIGHT="841" WIDTH="595"> <PrintSpace HEIGHT="841" WIDTH="595" VPOS="0" HPOS="0"> ... <ComposedBlock ID="block_1_4" HEIGHT="23" WIDTH="446" VPOS="205" HPOS="59"> <TextBlock ID="par_1_4" HEIGHT="23" WIDTH="446" VPOS="205" HPOS="59" LANG="jpn"> <TextLine ID="line_1_4" HEIGHT="23" WIDTH="446" VPOS="205" HPOS="59"> <String ID="word_1_11" CONTENT="Google" HEIGHT="20" WIDTH="70" VPOS="208" HPOS="59" WC="0.89"/> <String ID="word_1_12" CONTENT="Colab" HEIGHT="16" WIDTH="58" VPOS="208" HPOS="135" WC="0.93"/> <String ID="word_1_13" CONTENT="で" HEIGHT="841" WIDTH="595" VPOS="0" HPOS="0" WC="0.93"/> <String ID="word_1_14" CONTENT="Tesseract" HEIGHT="16" WIDTH="117" VPOS="208" HPOS="195" WC="0.91"/> <String ID="word_1_15" CONTENT="を" HEIGHT="19" WIDTH="18" VPOS="206" HPOS="314" WC="0.93"/> <String ID="word_1_16" CONTENT="動か" HEIGHT="19" WIDTH="41" VPOS="206" HPOS="335" WC="0.93"/> <String ID="word_1_17" CONTENT="す" HEIGHT="19" WIDTH="19" VPOS="206" HPOS="378" WC="0.93"/> <String ID="word_1_18" CONTENT="(日" HEIGHT="21" WIDTH="25" VPOS="205" HPOS="413" WC="0.96"/> <String ID="word_1_19" CONTENT="本" HEIGHT="20" WIDTH="20" VPOS="206" HPOS="442" WC="0.93"/> <String ID="word_1_20" CONTENT="語" HEIGHT="20" WIDTH="41" VPOS="206" HPOS="464" WC="0.92"/> <String ID="word_1_21" CONTENT="対" HEIGHT="841" WIDTH="595" VPOS="0" HPOS="0" WC="0.93"/> </TextLine> </TextBlock> </ComposedBlock> ... </PrintSpace> </Page> </Layout> </alto> 画像とxmlファイルをOmekaにアップロードする 以下のように、画像とxmlファイルをアップロードします。注意点として、画像とxmlのファイル名(拡張子を除く)を揃えて必要があります。(以下の例では、alto_test) ...

iiif auth apiを試す

iiif auth apiを試す

概要 iiif auth apiを試すため環境として、以下のリポジトリが提供されています。 https://github.com/digirati-co-uk/iiif-auth-server 今回は、上記のリポジトリを使用して、iiif auth apiを試します。 起動 準備 git clone https://github.com/digirati-co-uk/iiif-auth-server cd iiif-auth-server python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt pip install -r requirements.txt時にバージョンの不具合などが発生した場合、以下のように、バージョン情報を削除して、再度試すなどしてみてください。 argparse Flask iiif2 itsdangerous Jinja2 MarkupSafe pbr Pillow six stevedore Werkzeug db作成 その後、dbを作成します。 export FLASK_APP=iiifauth export FLASK_DEBUG=true flask initdb 上記を実行後、iiif-auth-server/iiifauthにiiifauth.dbというファイルが作成されます。 dbの中身は、以下のようなツールを使って確認することができます。 https://sqlitebrowser.org/dl/ 起動 以下を実行します。 flask run その後、http://127.0.0.1:5000にアクセスすると、以下の画面が表示されます。 ビューアの準備 以下を実行して、mirador3をダウンロードして、ローカルサーバで起動してみます。 wget https://mirador.cultural.jp python -m http.server http://0.0.0.0:8000にアクセスして、以下の画面が表示されればOKです。 ビューアに読み込ませる http://127.0.0.1:5000のページの構成は、まずImagesが並び、その後Manifestsが並びます。 今回、下部のManifestsを、Mirador3で読み込んでみます。 ...

TEIテキストの作成支援ツール「FairCopy」の紹介

TEIテキストの作成支援ツール「FairCopy」の紹介

概要 研究仲間に、「FairCopy」というTEIテキストの作成支援ツールを教えていただきました。本ツールはGUIを介してTEIテキストを作成可能なツールで、とても便利なものに感じました。 有料のツールですが、2週間は無料で試用できるため、この調査結果を共有します。 インストール 以下のSign Up画面から情報を送信することで、トライアルのコードとアプリケーションのダウンロードリンクが表示されます。 https://faircopyeditor.com/sign_up ダウンロード後にアプリケーションを起動すると、以下のようなプロジェクトの選択画面が表示されます。 プロジェクトの作成 プロジェクトを作成します。今回は、以下のような情報を入力しました。 その後、以下のような画面が表示されます。 作成するデータ 今回は、すでに公開されている校異源氏物語テキストDBで公開されている「きりつぼ」のTEIデータについて、本ツールを使って再現することを試みます。 https://kouigenjimonogatari.github.io/tei/01.xml 国立国会図書館で公開されているIIIF画像と、プロジェクトで翻刻したテキストデータを対応づけたTEI/XMLファイルです。 新規リソースの作成 「NEW RESOURCE」をクリックすると、以下のような登録フォームが表示されます。適当なNameとIDを与えます。 また「Resource Type」については、複数の選択肢が表示されますが、TEI Header付きのTEIとIIIFを組み合わせたXMLファイルを作成したい場合には、「TEI Document」を選択するのがよさそうです。 結果、以下のように、「校異源氏物語・きりつぼ」フォルダの中に、「TEI Header」というファイルが作成されます。 IIIFのインポート まず、IIIF画像のインポートを試みます。「IMPORT IIIF」ボタンを押し、以下のようなIIIFマニフェストのインポート画面において、URLを入力します。 今回は、以下のマニフェストのURLを入力しました。 https://www.dl.ndl.go.jp/api/iiif/3437686/manifest.json すると、以下のように画像が追加されます。 その行をクリックすと、以下のように、マニフェストファイル内の画像が取り込まれます。ID列で、各画像にIDが与えられていることが確認できます。テキストと画像の紐付けにおいて、後ほど使用します。 画面右上の画像アイコンをクリックすると、画像を表示することもできます。 参考までに、「校異源氏物語・きりつぼ」に戻り、以下のように、画像の行のチェックボックスを選択して、「ACTIONS」 > 「Export」を押すと、XMLファイルが出力されます。 以下のように、facsimile要素を持つXMLファイルが作成されます。 <?xml version="1.0" encoding="UTF-8"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <facsimile sameAs="https://www.dl.ndl.go.jp/api/iiif/3437686/manifest.json"> <surface xml:id="f000" ulx="0" uly="0" lrx="6890" lry="4706" sameAs="https://www.dl.ndl.go.jp/api/iiif/3437686/canvas/1"> <label>1</label> <graphic mimeType="application/json" url="https://www.dl.ndl.go.jp/api/iiif/3437686/R0000001"/> </surface> <surface xml:id="f001" ulx="0" uly="0" lrx="6890" lry="4706" sameAs="https://www.dl.ndl.go.jp/api/iiif/3437686/canvas/2"> <label>2</label> <graphic mimeType="application/json" url="https://www.dl.ndl.go.jp/api/iiif/3437686/R0000002"/> </surface> ... </facsimile> </TEI> 後ほど、TEI Headerとtext - bodyを組み合わせたTEI/XMLをエクスポートしますが、上記のように、画像やテキスト、TEI Headerなど、それぞれの要素のTEI/XMLをエクスポートする機能が提供されています。 テキストのインポート 次に、テキストのインポートを行います。とりあえず、以下のようなサンプルのテキストファイルを登録します。 ...

IIIFアイコンのドラッグ&ドロップ対応について

IIIFアイコンのドラッグ&ドロップ対応について

背景 IIIF(International Image Interoperability Framework )のアイコン(具体的には、IIIFのマニフェストURL)は、多くのIIIF対応ビューアにおいて、ドラッグ&ドロップによるロードに対応しています。 ただし、以下のモジュールによって表示するIIIFアイコンについては、ドラッグ&ドロップができない、というフィードバックをいただきました。 https://github.com/omeka-j/Omeka-S-module-IiifViewers この原因について、以下のページなどを参考に調査しました。 https://zimeon.github.io/iiif-dragndrop/ その結果、以下のようなHTMLの記述が必要なことがわかりました。 <a href="default_target?manifest=manifest_URI&canvas=canvas_URI"> <img src="iiif-dragndrop-100px.png" alt="IIIF Drag-n-drop"/> </a> 上記のパターンに合致していないことが、上述したモジュールでドラッグ&ドロップができない不具合の原因でした。 この記事では、この対応方法について記述します。 対応方法 具体的には、以下のマニフェストURLを例とします。 マニフェストURLの例: https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest そして、これまでは以下のように、aタグのhref属性に、IIIFマニフェストのURLのみを与えていました。 <a href="https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest" title="IIIFマニフェスト" target="_blank"> <img style="height: 24px" src="https://omekas.aws.ldas.jp/sandbox/files/asset/iiifviewers632bf7d736e3b.svg"> </a> 上記を以下のように修正する必要がありました。 <a href="https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest?manifest=https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest" title="IIIFマニフェスト" target="_blank"> <img style="height: 24px" src="https://omekas.aws.ldas.jp/sandbox/files/asset/iiifviewers632bf7d736e3b.svg"> </a> アイコンをクリックした際に、マニフェストをダウンロードできる挙動は同じですが、後者では、他のIIIF対応ビューアへのドラッグ&ドロップに対応できます。 href属性にマニフェストURLを2回記述する点が少し冗長ですが、Universal ViewerやIIIF Curation Viewerでも同様の記述がなされていました。 このように?manifest=manifest_URIの部分がロードに使用されることが多いことから、その前のdefault_targetの部分は影響しないことが多いこともわかりました。 そのため、IIIFアイコンだけでなく、以下のようなURLが付与されることが多いUniversal ViewerやIIIF Curation ViewerのURLおよびアイコンについても、他のIIIFビューアにドラッグ&ドロップできることが確認できました。(恥ずかしながら、これまではdefault_targetの部分がIIIFマニフェストのURLである必要があると思っていました。) UV: https://universalviewer.io/examples/uv/uv.html#?manifest=https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest ICV: http://codh.rois.ac.jp/software/iiif-curation-viewer/demo/?manifest=https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest まとめ IIIFアイコン(IIIFのマニフェストURL)をサイトに設置する際の、ドラッグ&ドロップへの対応のお役に立てば幸いです。

Cultural Japanにおいて指定したIIIFマニフェストを含むアイテムの一覧を返却するAPIを作成しました。

Cultural Japanにおいて指定したIIIFマニフェストを含むアイテムの一覧を返却するAPIを作成しました。

Cultural Japanにおいて指定したIIIFマニフェストを含むアイテムの一覧を返却するAPIを作成しました。 構築したAPIのドキュメントは以下です。 https://petstore.swagger.io/?url=https://api.cultural.jp/v3/api-docs 実行例は以下です。 https://api.cultural.jp/v3/items/urls?manifest=https://iiif.harvardartmuseums.org/manifests/object/215190 APIの開発にあたっては、以下の記事を参考に、express-openapiを利用し、AWS Lambdaを用いて配信しています。 https://www.forcia.com/blog/002471.html Cultural Japanの活用にあたり、参考になりましたら幸いです。

Omeka S IIIF ServerのIIIFマニフェスト(version 2)の出力内容

Omeka S IIIF ServerのIIIFマニフェスト(version 2)の出力内容

概要 Omeka SでIIIFマニフェストを配信するためのモジュールとして、IIIF Serverがあります。 https://github.com/Daniel-KM/Omeka-S-module-IiifServer 本記事では、このIIIFマニフェスト(特に、IIIF Presentation API version 2)の出力内容について確認します。 例 以下、https://shared.ldas.jp/omeka-sというURLで公開しているOmeka Sにおいて、IDtest-111のアイテムに関するIIIFマニフェストの例です。 { "@context": "http://iiif.io/api/presentation/2/context.json", "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/manifest", "@type": "sc:Manifest", "label": "Sample Item", "thumbnail": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif/full/!200,200/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 200, "height": 200 }, "license": "https://shared.ldas.jp/omeka-s/s/test/page/reuse", "attribution": "サンプル機関", "related": { "@id": "https://shared.ldas.jp/omeka-s", "format": "text/html" }, "seeAlso": { "@id": "https://shared.ldas.jp/omeka-s/api/items/1270", "format": "application/ld+json" }, "metadata": [ { "label": "Title", "value": "Sample Item" }, { "label": "Identifier", "value": "test-111" } ], "sequences": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/sequence/normal", "@type": "sc:Sequence", "label": "Current Page Order", "viewingDirection": "left-to-right", "canvases": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p1", "@type": "sc:Canvas", "label": "1", "thumbnail": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif/full/!200,200/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 200, "height": 200 }, "width": 6401, "height": 4810, "images": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/annotation/p0001-image", "@type": "oa:Annotation", "motivation": "sc:painting", "resource": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif/full/full/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 6401, "height": 4810, "service": { "@context": "http://iiif.io/api/image/2/context.json", "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif", "profile": "http://iiif.io/api/image/2/level1.json" } }, "on": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p1" } ] }, { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p2", "@type": "sc:Canvas", "label": "2枚目", "thumbnail": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0002.tif/full/!200,200/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 200, "height": 200 }, "width": 6401, "height": 4810, "images": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/annotation/p0002-image", "@type": "oa:Annotation", "motivation": "sc:painting", "resource": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0002.tif/full/full/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 6401, "height": 4810, "service": { "@context": "http://iiif.io/api/image/2/context.json", "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0002.tif", "profile": "http://iiif.io/api/image/2/level1.json" } }, "on": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p2" } ], "metadata": [ { "label": "Title", "value": "2枚目" } ] } ] } ] } 以下、それぞれのタイプについて説明します。 ...

Mirador 3 による画像比較ツールを作成しました。

Mirador 3 による画像比較ツールを作成しました。

Mirador 3 による画像比較ツールを作成しました。URLは以下です。 https://ldas-jp.github.io/viewer/input/ またGitHubリポジトリのURLは以下です。 https://github.com/ldas-jp/viewer 以下が入力フォームです。比較する画像のIIIFマニフェストファイルのURLとCanvasのURIを指定します。「例」にあるボタンをクリックすることで、入力例をご確認いただけます。 「開く」ボタンをクリックすると、以下のようにMirador 3が起動します。入力情報に基づく画像比較を行うことができます。 Mirador 3を用いた画像比較にあたり、ご活用いただけますと幸いです。

Omeka ClassicのIIIF Toolkitを用いたアノテーションの一括登録方法

Omeka ClassicのIIIF Toolkitを用いたアノテーションの一括登録方法

はじめに 備忘録的な意味合いの強い記事です。わかりにくい点も多々あるかと思いますが、ご容赦ください。 特に以下で紹介されている、IIIF Toolkitが使用するアノテーションエンドポイントの使い方について、参考になりましたら幸いです。 https://github.com/utlib/IiifItems/wiki/The-Mirador-Omeka-Annotator-Endpoint 概要 Omeka ClassicのIIIF Toolkitプラグインは、IIIFマニフェストファイルの読み込みや、画像へのアノテーションを行うことができるとても便利なツールです。 https://zenn.dev/nakamura196/books/2a0aa162dcd0eb/viewer/b37a8c 今回は、Omeka Classicとは独立して作成されたアノテーションデータを持っていることを前提として、それらのアノテーションをOmeka Classicに一括登録する方法を記事にします。 以下のGooble Colabのノートブックを用意しています。参考になりましたら幸いです。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/Omeka_ClassicのIIIF_Toolkitを用いたアノテーションの一括登録方法.ipynb 使い方 事前準備0 上記のノートブックを実行する前に、Omeka ClassicのAPIの有効化、およびAPIキーの発行を行う必要があります。 Omeka ClassicのAPIの有効化 以下に示すように、デフォルトではOFFになっているAPIの有効化を行います。 APIキーの発行 非公開のアイテムについては、APIキーを用いたアクセスが必要になるため、ユーザ毎にAPIキーを発行します。 ノートブックの実行 上記のノートブックに従って、Omeka ClassicのAPIを用いたデータ登録を行います。 結果 以下に示すように、アノテーションが一括登録されていることが確認できます。 まとめ Omeka ClassicのIIIF Toolkitが提供するAPIの扱い方など、参考になりましたら幸いです。

Mirador 3にmirador-image-toolsプラグインを追加して、1つのjsファイルにまとめて配布する方法

Mirador 3にmirador-image-toolsプラグインを追加して、1つのjsファイルにまとめて配布する方法

概要 表題の通り、Mirador 3にmirador-image-toolsなどのプラグインを追加して、1つのjsファイルにまとめて配布する方法を記述します。 JavaScriptに関する知識不足により、誤った記述があるかもしれません。間違っている点などがありましたらご指摘いただけますと幸いです。 ゴール 以下に示すようなHTMLファイルを記述することにより、以下のURLから確認できるアプリを作成することが目的です。mirador-image-toolsプラグインが有効化されているMirador 3を使用しています。 https://nakamura196.github.io/mirador-integration-alt/ <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Basic Mirador</title> </head> <body> <div id="demo"></div> <!-- ポイント --> <script src="https://nakamura196.github.io/mirador-integration-alt/dist/main.js"></script> <script> // 注意点 const {Mirador, miradorImageToolsPlugin} = integration const config = { id: "demo", windows: [ { imageToolsEnabled: true, imageToolsOpen: true, manifestId: "https://iiif.dl.itc.u-tokyo.ac.jp/repo/iiif/fbd0479b-dbb4-4eaa-95b8-f27e1c423e4b/manifest", }, ] }; Mirador.viewer(config, [...miradorImageToolsPlugin]); </script> </body> </html> ポイントは、上記のソースコードで「<!-- ポイント -->」としている点です。1つのjsファイルを読み込むことで、Mirador 3とmirador-image-toolsプラグインを使用しています。 ...

Nuxt 3とVuetify 3を用いたIIIF Image API関連ツールを作成しました。

Nuxt 3とVuetify 3を用いたIIIF Image API関連ツールを作成しました。

概要 Nuxt 3とVuetify 3を用いたIIIF Image API関連ツールを作成しました。本ツールを開発した背景として、IIIF Image APIを操作するニーズに加えて、Nuxt 3の使い方を学ぶ目的がありました。 GitHubリポジトリは以下です。参考になりましたら幸いです。 https://github.com/nakamura196/nuxt3-vuetify3 使い方 以下のURLからアクセスいただけます。 https://nv3.netlify.app/ 以下のように、「例」ボタンを押すと、画面上部のテキストフォームにURLが入力され、そのURLに含まれる要素(「region」や「size」など)が画面下部に表示されます。 IIIF Image APIを操作する際の参考になりましたら幸いです。

【Omeka S モジュール】IIIF ServerモジュールでImage APIを使用しない方法

【Omeka S モジュール】IIIF ServerモジュールでImage APIを使用しない方法

概要 IIIFマニフェストの生成を行うOmeka Sのモジュール「IIIF Server」において、Image APIを使用しない設定を行うことができます。これにより、レンタルサーバなどのリソースが限られた環境において、IIIFマニフェストの配信などが容易となります。 以前、以下の記事を執筆しました。 https://nakamura196.hatenablog.com/entry/2021/07/22/171657 2022年5月時点において、モジュールのアップデートにより、設定の方法が変わりましたので、設定方法をあらためて記事にします。なお、Image APIを使用しないメリットやデメリットについては、上記の記事をご参照ください。 設定方法 確認した環境は以下です。 Omeka S version 3.2.0 IIIF Server version 3.6.6.6 モジュールの一覧画面から「IIIF Server」をみつけ、「設定」ボタンをクリックします。 遷移先のページで最下部に移動すると、「External image server」 > 「Default IIIF image api version」という設定項目があります。ここで以下に示すように、「No image server」のオプションを選択することにより、Image APIを使用しないマニフェストファイルの生成が可能になります。 まとめ レンタルサーバなどのリソースが限られた環境でOmekaを運用しており、タイル画像の生成に時間がかかってしまう場合などに、本記事が参考になりましたら幸いです。