Google Colabを用いたNDL

概要 Google Colabを用いたNDL"古典籍"OCRアプリを作成しました。以下のURLからお試しいただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/NDL古典籍OCRの実行例.ipynb NDL古典籍OCRの説明は以下です。 https://github.com/ndl-lab/ndlkotenocr_cli また、ノートブックの作成にあたっては、@blue0620さんのノートブックを参考にしています。ありがとうございます! https://twitter.com/blue0620/status/1617888733323485184 今回作成したノートブックでは、入力フォーマットの追加や、Googleドライブへの保存機能などを追加しています。 使い方 NDLOCRアプリの使い方とほぼ同様です。以下の動画を参考にしてください。 https://youtu.be/46p7ZZSul0o 工夫 工夫した点として、認識結果をIIIFマニフェストの形に変換し、Miradorビューアで閲覧できるようにしました。具体的には、以下のような出力が得られます。 後者のリンクをクリックすることで、以下のようなMiradorビューアが表示され、認識結果を確認することができます。 このIIIFマニフェストファイルも、Googleドライブに格納しています。 参考 NDLOCRのチュートリアルについては、以下を参考にしてください。

2023年1月25日 · 1 分 · Nakamura

JPCOARスキーマを用いたxmlファイルのバリデーション

概要 JPCOARスキーマでは、XMLスキーマ定義を以下のリポジトリで公開してくださっています。スキーマの作成およびデータの公開を行っていただき、ありがとうございます。 https://github.com/JPCOAR/schema 本記事では、上記のスキーマを使ったxmlファイルのバリデーションを試してみたので、その備忘録です。(今回のようなバリデーションは初めてのため、不正確な用語や情報を含む可能性があります。申し訳ありません。) Google Colabのノートブックも用意しました。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/JPCOARスキーマを用いたxmlファイルのバリデーション.ipynb 準備 リポジトリのクローン cd /content/ git clone https://github.com/JPCOAR/schema.git ライブラリのインストール pip install xsd-validator xsdファイルのロード(v1) from xsd_validator import XsdValidator validator = XsdValidator('/content/schema/1.0/jpcoar_scm.xsd') v1を試す OKな例 <?xml version="1.0" ?> <jpcoar:jpcoar xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:jpcoar="https://github.com/JPCOAR/schema/blob/master/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd"> <dc:title>JPCOARスキーマを用いたxmlファイルのバリデーション</dc:title> <dc:type rdf:resource="http://purl.org/coar/resource_type/c_6501">article</dc:type> </jpcoar:jpcoar> validator.assert_valid("/content/ok.xml") # エラーなし NGな例 dc:typeの後にjpcoar:subjectを置くことによるエラー? <?xml version="1.0" ?> <jpcoar:jpcoar xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:jpcoar="https://github.com/JPCOAR/schema/blob/master/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd"> <dc:title>JPCOARスキーマを用いたxmlファイルのバリデーション</dc:title> <dc:type rdf:resource="http://purl.org/coar/resource_type/c_6501">article</dc:type> <jpcoar:subject subjectScheme="Other">テスト</jpcoar:subject> </jpcoar:jpcoar> validator.assert_valid("/content/ng.xml") XsdValidationErrorWithInfo: /content/ng.xml: line 9 column 41: cvc-complex-type.2.4.a: Invalid content was found starting with element ‘{"https://github.com/JPCOAR/schema/blob/master/1.0/":subject}’. One of ‘{"https://schema.datacite.org/meta/kernel-4/":version, “http://namespace.openaire.eu/schema/oaire/":version, “https://github.com/JPCOAR/schema/blob/master/1.0/":identifier, “https://github.com/JPCOAR/schema/blob/master/1.0/":identifierRegistration, “https://github.com/JPCOAR/schema/blob/master/1.0/":relation, “http://purl.org/dc/terms/":temporal, “https://schema.datacite.org/meta/kernel-4/":geoLocation, “https://github.com/JPCOAR/schema/blob/master/1.0/":fundingReference, “https://github.com/JPCOAR/schema/blob/master/1.0/":sourceIdentifier, “https://github.com/JPCOAR/schema/blob/master/1.0/":sourceTitle, “https://github.com/JPCOAR/schema/blob/master/1.0/":volume, “https://github.com/JPCOAR/schema/blob/master/1.0/":issue, “https://github.com/JPCOAR/schema/blob/master/1.0/":numPages, “https://github.com/JPCOAR/schema/blob/master/1.0/":pageStart, “https://github.com/JPCOAR/schema/blob/master/1.0/":pageEnd, “http://ndl.go.jp/dcndl/terms/":dissertationNumber, “http://ndl.go.jp/dcndl/terms/":degreeName, “http://ndl.go.jp/dcndl/terms/":dateGranted, “https://github.com/JPCOAR/schema/blob/master/1.0/":degreeGrantor, “https://github.com/JPCOAR/schema/blob/master/1.0/":conference, “https://github.com/JPCOAR/schema/blob/master/1.0/":file}’ is expected. ...

2023年1月19日 · 1 分 · Nakamura

RELAX NGスキーマを操作するライブラリjingtrangを試す:rngファイルの作成編

概要 以下の記事で、jingtrangおよびrngファイルを用いたxmlファイルの検証を行いました。 このjingtrangライブラリでは、xmlファイルからrngファイルを作成できるということで、試してみます。 Google Colabのノートブックも用意しました。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/jingtrangを試す:作成編.ipynb rngファイルを作成する rngファイルを作成する元ファイルとして、以下を用意しました。 <root><title>aaa</title></root> 上記のファイルに対して、以下を実行します。 pytrang base.xml base.rng 結果、以下のファイルが作成されました。 <?xml version="1.0" encoding="UTF-8"?> <grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> <element name="root"> <element name="title"> <data type="NCName"/> </element> </element> </start> </grammar> このrngファイルに対して、以下のようにテストしてみました。 OK:テキストが異なるもの <root><title>bbb</title></root> pyjing base.rng ex1.xml NG:titleがない <root><aaa>bbb</aaa></root> pyjing base.rng ex2.xml /content/ex2.xml:1:12: error: element "aaa" not allowed anywhere; expected element "title" /content/ex2.xml:1:28: error: element "root" incomplete; missing required element "title" NG: 属性がある <root><title lang="en">aaa</title></root> pyjing base.rng ex3.xml /content/ex3.xml:1:24: error: found attribute "lang", but no attributes allowed here まとめ 上記のような形で、あるxmlファイルから、rngファイルを作成することができました。rngファイルの記述方法についてはさらなる勉強が必要ですが、今回のような具体例から試行錯誤ができる仕組みは有効かと思います。 ...

2023年1月18日 · 1 分 · Nakamura

RELAX NGスキーマを操作するライブラリjingtrangを試す:検証編

概要 あるスキーマに従ったXMLファイルを作成する機会があったのですが、そのスキーマに合致したXMLファイルを作成できているか、確認する必要がありました。 上記の要件に対して、RELAX NGスキーマを操作するライブラリjingtrangを使ってみましたので、その備忘録です。 https://pypi.org/project/jingtrang/ Google Colabのノートブックも用意しました。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/jingtrangを試す.ipynb Validationを試す # ライブラリのインストール pip install jingtrang # rngファイルのダウンロード(tei_allを使用) wget https://raw.githubusercontent.com/nakamura196/test2021/main/tei_all.rng # validation対象のXMLファイルの用意(校異源氏物語テキストのダウンロード) wget https://kouigenjimonogatari.github.io/tei/01.xml OKな例 以下のように実行すると、何も出力されませんでした。 pyjing tei_all.rng 01.xml NGな例 一方、TEIのスキーマに合致しない以下のようなxmlファイルを用意しました。 <a>bbb</a> その実行結果は以下です。a要素ではなく、TEIまたはteiCorpus要素が必要と出力されました。このように、スキーマに合致するか否かのチェックができました。 pyjing tei_all.rng ng.xml /content/ng.xml:1:4: error: element "a" not allowed here; expected element "TEI" or "teiCorpus" (with xmlns="http://www.tei-c.org/ns/1.0") まとめ 無事に検証を行うことができました。 ただ今回のニーズはTEI/XMLの以外のスキーマに適合するかを検証する必要がありましたので、このrngファイルの作成方法や内容について、別の記事にまとめたいと思います。

2023年1月18日 · 1 分 · Nakamura

OpenSeaに画像を登録してみる

概要 OpenSeaに画像を登録してみたので、その備忘録です。 作成したアイテムのページは以下です。 https://opensea.io/assets/ethereum/0x495f947276749ce646f68ac8c248420045cb7b5e/10640296615676167047199551942164304992363478966543389627838835760480269631489 OpenSeaへのアップロード OpenSeaへの画像のアップロードは簡単に行うことができました。 一方、それまでのMetaMaskやOpenSeaのアカウント作成などに少し時間がかかりました。この手順についてはたくさんの記事がありましたので、そちらを参考にしてください。 bitFlyerからMetaMaskへの送金 bitFlyerで保有して0.005ETHをMetaMaskへ送金しました。この送金手数料に0.005ETH($7.72, 990.48円)かかりました。(高い…笑) メタデータの凍結 編集画面の「凍結」メニューから、メタデータの凍結を試みました。この凍結にも以下のガス代がかかりました。 0.00185631883313057 Ether ($2.87) 凍結が完了したところ、以下のように、Metadataが「Frozen」と表示されます。 そのリンクをクリックしてみると、以下のjsonファイルがダウンロードされます。 { "image_url": "ipfs://bafybeic27xyqz2zk4bgqlyc7tpmvcl6itfmvkyw2jdnv2b757t3z7ifuby/image", "name": "kunshujo", "description": "『捃拾帖』九五(東京大学総合図書館所蔵)を改変", "external_url": "https://uv-v4.netlify.app/#?manifest=https://ipfs.io/ipfs/QmWMWHAwvPLinD8aDZf9HXfy14u3SNdZRTzbqgMQJ95Q3b" } さらにimage_urlの値から、URLにアクセス、またはIPFSのデスクトップアプリでbafybeic27xyqz2zk4bgqlyc7tpmvcl6itfmvkyw2jdnv2b757t3z7ifubyをBrowseすると、画像を閲覧することができました。 これらのメタデータ(json)および画像がIPFSで管理されていることが確認できます。 まとめ OpenSeaへの画像アップロードと、メタデータや画像の凍結について経験することができました。 デジタルアーカイブにおけるコンテンツ管理への応用に向けて、引き続き色々と試してみたいと思います。

2023年1月16日 · 1 分 · Nakamura

Romaを用いてカスタマイズしたrngファイルを作成する:使用するTEIタグを限定する

概要 本記事では、Romaというウェブアプリケーションを用いて、 TEI ODD (One Document Does-it-all) のカスタマイズを試みます。 https://romabeta.tei-c.org/ TEI ODDについては、以下の公式サイトをご確認ください。勉強不足により、私自身も十分に理解できておりません。 https://wiki.tei-c.org/index.php/ODD ただ一つの用途として、TEIを用いたプロジェクトにおいて、使用する(具体的には、補助や検証を行う?)タグを限定することができます。 これにより、大量に用意されたTEIのタグに悩んでしまう、といった課題を軽減することができそうです。 今回は、以下で紹介した、ExcelからTEI/XMLを作成するフローで使用するタグを想定して、Romaを用いたodd/rngファイルのカスタマイズを行ってみます。 使用するタグ 本ユースケースでは、以下のタグを使用します。 テキスト関連 pb ab lb seg choice orig note reg 画像関連 facsimile surface label zone 上記のタグに限定したodd/rngファイルを作成します。 Romaの使用 Romaにアクセスします。 https://romabeta.tei-c.org/ 「SELECT ODD」において、「TEI Minimal」を選択してみます。 設定画面において、Titleなどを修正します。特に、Language関係の2項目を日本語に設定することをお勧めします。 例えばabタグなど、各プロジェクトで使用するタグのみを選択していきます。 編集が完了したら、「RelaxNG schema」を選択してダウンロードします。 合わせて「Customization as ODD」もダウンロードしておくことをお勧めします。このODDファイルをRomaのトップ画面のフォームからアップロードすることにより、追加の編集ができました。 XMLファイルへの追加 ダウンロードしたtei_excel.rngファイルを、編集対象とするXMLファイルと同じ階層に置いた場合には、以下のように<?xml-model ... ?>を追記します。 <?xml version="1.0" encoding="utf-8"?> <?xml-model href="tei_excel.rng" schematypens="http://relaxng.org/ns/structure/1.0" type="application/xml"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <teiHeader> ... </teiHeader> ... </TEI> 一方、githubなどのサーバにアップロードした場合には、以下のように、URLの形式で指定することもできます。 ...

2023年1月12日 · 1 分 · Nakamura

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 まとめ 他のビューアについても適宜追加していきたいと思います。 導入方法について、誤りやよりよい方法があるかもしれませんが、参考になりましたら幸いです。

2022年12月26日 · 1 分 · Nakamura

nuxt3をamazon lightsailで公開する:pm2の使用

はじめに nuxt3などを用いて開発したアプリケーションについて、github pages, netlify, aws amplify, およびServerless Framework+Lambdaなどを用いてデプロイすることが多いのですが、今回はvpsを用いて公開する機会があり、その備忘録です。 参考 具体的には、Amazon Lightsailとpm2を使用します。 Amazon Lightsailインスタンスの作成 Node.jsのblueprintを選択します。 また3000番ポートを使用するので、ファイアウォールを開放しておきます。 pm2の設定 以下の記事を参考にしました。 https://it-evo.jp/blog/blog-70/ インストール sudo su npm install pm2 -g Nuxt3のダウンロードとビルド サンプルプログラムをダウンロードします。 su bitnami cd /home/bitnami/ git clone https://github.com/nakamura196/nuxt3-pm2 セットアップ cd nuxt3-pm2 npm install ビルド npm run build npm run preview localhost:3000 でNuxt3のアプリケーションをご確認いただけます。 pm2を用いて起動する cd /home/bitnami/ vi /home/bitnami/ecosystem.config.js module.exports = { apps: [{ name: 'demo', cwd: '/home/bitnami/nuxt3-pm2', exec_mode: 'cluster', instances: 'max', script: './.output/server/index.mjs', watch: ['./'], // または true watch_options: { followSymlinks: true, usePolling: true, interval: 10000, binaryInterval: 10000, }, env: { PORT: 3000, NODE_ENV: 'production', } }] } 以下のコマンドで、pm2が起動します。 ...

2022年12月22日 · 1 分 · Nakamura

TEI Boilerplateを試す

概要 TEI Boilerplateの日本語訳例は以下です。 TEI ( Text Encoding Initiative ) P5 コンテンツを最新のブラウザーで直接公開するための軽量ソリューションです。TEI Boilerplate を使用すると、サーバー側での処理や HTML への変換を行わずに、TEI XML ファイルを Web に直接提供できます。当社のTEI Boilerplate Demoは、TEI Boilerplate によってレンダリングされる多くの TEI 機能を示しています。 TEI Boilerplate は、Web 上で TEI/XML を公開および表示するための多くの優れた XSLT ソリューションに代わるものではありません。これは、より複雑な XSLT ソリューションに代わるシンプルで軽量なソリューションとなることを目的としています。 今回は、このTEI Boilerplateの使い方の例を説明します。 リポジトリのクローンとサーバの起動 以下のリポジトリを使用します。 https://github.com/TEI-Boilerplate/teibp-teach 本リポジトリは、TEI-Boilerplate 対応の http サーバを立ち上げるプロジェクト、と説明されています。 まず、リポジトリをクローンします。 git clone https://github.com/TEI-Boilerplate/teibp-teach 次に、ライブラリのインストールを行います。 cd teibp-teach npm install そして、ローカルのサーバを起動します。 node . 画面例 http://localhost:3000 にアクセスすると、以下のような画面が表示されます。 demoのリンクをクリックすると、表示例を確認することができます。この表示例では、画面右上に表示内容を切り替えることができるToolboxが提供されます。 校異源氏物語テキストへの適用 校異源氏物語テキストDBで公開されているTEI/XMLにも適用してみました。 以下のGitHub Pagesからご確認いただけます。 https://nakamura196.github.io/teibp-teach/content/01.xml ソースコードは以下からご確認いただけます。 ...

2022年12月17日 · 1 分 · Nakamura

Omeka S 4.0.0 release candidateが公開されました。

概要 Omeka S 4.0.0 release candidateが公開されました。 https://forum.omeka.org/t/omeka-s-4-0-0-release-candidate/16272 Amazon Lightsailで試してみました。以下でお試しいただけます。 http://35.172.220.59/omeka-s/ インストール 以下のスクリプトで初期セットアップを行うことができます。 # 変数 OMEKA_PATH=/home/bitnami/htdocs/omeka-s ## ハイフンは含めない DBNAME=omeka_s VERSION=4.0.0-rc ############# set -e mkdir $OMEKA_PATH # Omekaのダウンロード wget https://github.com/omeka/omeka-s/releases/download/v$VERSION/omeka-s-$VERSION.zip unzip -q omeka-s-$VERSION.zip mv omeka-s/* $OMEKA_PATH # .htaccessの移動 mv omeka-s/.htaccess $OMEKA_PATH # 不要なフォルダの削除 rm -rf omeka-s rm omeka-s-$VERSION.zip # 元からあったindex.htmlを削除(もし存在すれば) if [ -e $OMEKA_PATH/index.html ]; then rm $OMEKA_PATH/index.html fi # データベースの作成 cat <<EOF > sql.cnf [client] user = root password = $(cat /home/bitnami/bitnami_application_password) host = localhost EOF mysql --defaults-extra-file=sql.cnf -e "create database $DBNAME"; # Omeka Sの設定 cat <<EOF > $OMEKA_PATH/config/database.ini user = root password = $(cat bitnami_application_password) dbname = $DBNAME host = localhost EOF sudo chown -R daemon:daemon $OMEKA_PATH/files sudo apt install imagemagick -y 2022-12-15時点では上記に加えて、以下の作業が必要でした。 ...

2022年12月15日 · 1 分 · Nakamura

Omeka SのAPIへのアクセス制限

Omeka Sでは、標準でAPIを提供しており、例えば以下のようなURLから、リソースの取得などが可能です。 https://dev.omeka.org/omeka-s-sandbox/api/items 便利な機能である一方、APIを提供したくないケースも考えられます。その場合には、Omeka Sを設定したディレクトリの直下にある.htaccessについて、以下のような記述を追記することで、アクセス制限をかけることができます。 RewriteCond %{REQUEST_URI} ^.*/api RewriteRule ^(.*)$ – [F,L] 具体的には、以下のような形です。 SetEnv APPLICATION_ENV "production" # SetEnv APPLICATION_ENV "development" RewriteEngine On RewriteCond %{REQUEST_URI} ^.*/api RewriteRule ^(.*)$ – [F,L] # The following rule tells Apache that if the requested filename # exists, simply serve it. RewriteCond %{REQUEST_FILENAME} -f RewriteRule !\.(php[0-9]?|phtml|phps)$ - [NC,C] RewriteRule !(?:^|/)\.(?!well-known(?:/.*)?$) - [C] RewriteRule .* - [L] ... Omeka Sのアクセス制限について、参考になりましたら幸いです。

2022年12月12日 · 1 分 · Nakamura

EC2サーバセットアップ時のTODOメモ

EC2でサーバをセットアップする際のTODOメモです。 Elastic IPの付与 sudo権限のユーザ追加 sudo su useradd nakamura passwd nakamura usermod -G wheel nakamura 公開鍵の設置 cd /home/nakamura mkdir .ssh touch .ssh/authorized_keys chmod 700 .ssh chmod 600 .ssh/authorized_keys vi .ssh/authorized_keys chown -R nakamura:nakamura .ssh

2022年12月5日 · 1 分 · Nakamura

Snorql for Japan Searchのカスタマイズ方法の調査

概要 ジャパンサーチで使用されている「Snorql for Japan Search」のカスタマイズ方法について、その調査結果です。随時更新予定です。また誤りも含まれている可能性が高いので、ご注意ください。 メニュー ページのタイトルを変更する snorql_def.js _poweredByLabel: "Cultural Japan", // "Japan Search", 問い合わせ先のエンドポイントを変更する snorql_def.js _endpoint: "https://ld.cultural.jp/sparql/", //"https://jpsearch.go.jp/rdf/sparql/", poweredByLinkのURLを変更する snorql_def.js _poweredByLink: "https://cultural.jp/", // "https://jpsearch.go.jp/", その他のフッター部分を編集する index.html footer> a href="./">Snorqla> for a id="poweredby" href="#">Japan Searcha>. Use a href="https://ld.cultural.jp/sparql">basic SPARQL endpointa> basic SPARQL endpoint --> for your application. >SPARQLエンドポイント解説 > --> footer> バージョンを変更する snorql_def.js var _sldb_version = "v0.0.1"; //"v2.20.1"; トップページの説明 ...

2022年11月29日 · 4 分 · Nakamura

【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) ...

2022年11月24日 · 1 分 · Nakamura

Google ColabでTesseractを動かす(日本語対応)

Google ColabでTesseractを動かすノートブックを作成しました。日本語にも対応しています。参考になりましたら幸いです。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/Tesseractを試す.ipynb 末尾に、hocrファイルをalto形式のxmlファイルに変換するフローも紹介しています。具体的には、以下のツールを使用しています。 https://digi.bib.uni-mannheim.de/ocr-fileformat/ 参考になりましたら幸いです。

2022年11月24日 · 1 分 · Nakamura

【Omeka S モジュール紹介】PDFファイルに対してOCRを行うモジュール「Extract Ocr」

概要 PDFファイルに対してOCRを行うOmeka Sのモジュール「Extract Ocr」を紹介します。 インストール 以下のページを参考にします。 https://omeka.org/s/modules/ExtractOcr/ 本モジュールは、pdftohtmlというコマンドラインツールが必要です。 以下、omeka-sの部分は、適宜変更してください。 AWS Lightsailを用いた環境では、以下によってインストールできました。 sudo apt install poppler-utils さらに、omeka-s/config/local.config.phpを編集する必要があります。base_uriの部分は、導入した環境に応じて変更してください。例:https://omekas.aws.ldas.jp/sandbox/files 'file_store' => [ 'local' => [ 'base_path' => null, // Or the full path on the server if needed. 'base_uri' => 'https://example.org/files', ], ], 上記の設定後、モジュールをダウンロード、インストールします。 cd omeka-s/modules git clone https://github.com/symac/Omeka-S-module-ExtractOcr.git ExtractOcr AWS Lightsailの場合、インストール時に以下のエラーが発生しました。 以下のコマンドにより、omeka-s/filesにtempファイルを作成しました。 cd omeka-s/files sudo mkdir temp sudo chown daemon:daemon temp 上記の設定後、無事にインストールできました。 ファイルのアップロード アイテムの新規登録を行い、メディアとしてPDFファイルをアップロードします。 ...

2022年11月24日 · 1 分 · Nakamura

Vertex AIのworkbenchを使用した際、HuggingFaceのTrainer()が開始されない事象への対処法

Google CloudのVertex AIのworkbenchを使用した際、HuggingFaceのTrainer()が開始されない事象に遭遇しました。 この件について、以下のページで同様の不具合が報告されていました。 https://stackoverflow.com/questions/73415068/huggingface-trainer-does-nothing-only-on-vertex-ai-workbench-works-on-colab 当初、以下のような「PyTorch」の環境を選んでいましたが、この環境で上記の不具合が生じました。 そこで、上記の記事にある通り、「Python」の環境を選択することで、上記の不具合を避けることができました。 なお、上記の環境を選んだ場合、まず以下のような実行が必要です。 conda install pytorch cudatoolkit=11.0 -c pytorch 同様のことでお困りの方の参考になりましたら幸いです。

2022年11月21日 · 1 分 · Nakamura

Mroonga search モジュールのインストール(※うまくいきませんでした。)

概要 以下の記事で紹介しているMroonga search モジュールのインスールについて、AWSのLightsailで試みました。 https://nakamura196.hatenablog.com/entry/2022/03/07/083004 結果、うまくインストールできませんでしたが、備忘録のために記事化します。 Omeka Sの立ち上げ 以下の記事の通り、Omeka Sを立ち上げました。 Mroongaのインストール 以下のページを参考に、インストールを行いました。 https://mroonga.org/docs/install/debian.html sudo apt update sudo apt install -y -V apt-transport-https sudo apt install -y -V wget wget https://packages.groonga.org/debian/groonga-apt-source-latest-bullseye.deb sudo apt install -y -V ./groonga-apt-source-latest-bullseye.deb sudo apt update sudo apt install -y -V mariadb-server-10.5-mroonga 上記を実行後、mysql(mariadb)に入ります。 mysql -uroot -p パスワードは、以下のコマンド確認できます。 cat /home/bitnami/bitnami_application_password その後、以下を実行して、Mroongaを有効にします。 MariaDB [(none)]> INSTALL PLUGIN Mroonga SONAME 'ha_mroonga.so'; SHOW VARIABLES LIKE 'mroonga_version'; 以下のように表示されます。 Omeka Sモジュールのインストール 以下の通り、モジュールを展開します。 ...

2022年11月21日 · 1 分 · Nakamura

ResourceSyncのPythonライブラリを試す

概要 ResourceSyncのPythonライブラリである「py-resourcesync」を試したので、その備忘録です。 https://github.com/resourcesync/py-resourcesync セットアップ git clone https://github.com/resourcesync/py-resourcesync cd py-resourcesync python setup install 実行 resourcelist まず、出力用のresource_dirディレクトリを作成します。カレントディレクトリにex_resource_dirフォルダが作成されます。 resource_dir = "ex_resource_dir" !mkdir -p $resource_dir 次に以下を実行します。適宜generatorを変更して使用するようですが、以下ではEgGeneratorというサンプルのものを使用しています。 from resourcesync.resourcesync import ResourceSync # from my_generator import MyGenerator from resourcesync.generators.eg_generator import EgGenerator my_generator = EgGenerator() metadata_dir = "ex_metadata_dir" # 適宜変更してください。 rs = ResourceSync(strategy=0, resource_dir=resource_dir, metadata_dir=metadata_dir) rs.generator = my_generator rs.execute() 結果、ex_resource_dir/ex_metadata_dirに、.well_known、capabilitylist.xml、resourcelist_0000.xmlが作成されます。 <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:rs="http://www.openarchives.org/rs/terms/"> <rs:ln href="http://www.example.com/.well-known/resourcesync" rel="up" /> <rs:md capability="capabilitylist" /> <url> <loc>http://www.example.com/metadata_dir/resourcelist_0000.xml</loc> <rs:md capability="resourcelist" /> </url> </urlset> <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:rs="http://www.openarchives.org/rs/terms/"> <rs:ln href="http://www.example.com/metadata_dir/capabilitylist.xml" rel="up" /> <rs:md at="2022-11-21T00:13:46Z" capability="resourcelist" completed="2022-11-21T00:13:46Z" /> <url> <loc>http://www.resourcesync.org</loc> <lastmod>2016-10-01T00:00:00Z</lastmod> <rs:md hash="md5:cc9895a21e335bbe66d61f2b62ce3a8e" length="20" type="application/xml" /> </url> </urlset> changelist strategyを1に変更することでnew_changelist、2に変更することでinc_changelistを作成することができました。 Resourcedump と Changedump strategyを3に変更することでresourcedump、4に変更することでchangedumpを作成できるようですが、これらについては設定方法を十分に理解することができず、未検証です。 ...

2022年11月21日 · 1 分 · Nakamura

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で読み込んでみます。 ...

2022年11月18日 · 3 分 · Nakamura