ラベル 構築 の投稿を表示しています。 すべての投稿を表示
ラベル 構築 の投稿を表示しています。 すべての投稿を表示

2025年5月22日木曜日

3D空間分析用データベースの構築

 Building a database for 3D spatial analysis


We built a database for 3D spatial analysis of the shell layer on the northern slope of the Ariyoshi Kita Shell Mound. It consists of three databases: a rock terrain database, a shell layer database, and an artifact database. The artifact database is stored in postgreSQL, and a csv file is output by query, plotted in the Blender3D viewport using Python, and analyzed.


有吉北貝塚北斜面貝層における3D空間分析用データベースを構築しました。地山地形データベース、貝層データベース、遺物データベースの3つから構成しました。遺物データベースはpostgreSQLに格納し、クエリでcsvファイル出力したものをPythonでBlender3Dビューポートにプロットして表示し、分析します。

1 3D空間分析用データベースの構成


3D空間分析用データベースの構成

データベースは地山地形データベース、貝層データベース、遺物データベースの3つから構成し、Blender3D空間で表示、分析できるものとして構築しました。

地山地形データベースでは、地山地形3Dモデル(Wabefront(.obj)ファイル)を作成し、Blenderで表示し利用できるようにしました。3Dモデルは地山平面図(手書き標高点、地形情報図、B3判14枚)から読みとった標高点(3933)リストに、セクション図断面から読みとった標高点、地形図から読みとった標高点を加えた標高点リストを作成し、そのデータによりQGIS(GRASSプラグイン、v.surf.rstツール)で作成しました。


地山地形データベース

貝層データベースでは、貝層断面図(32断面、Illustratorファイル、画像ファイル)及び貝層大区分図(32断面、Illustratorファイル、画像ファイル)を作成し、Blenderで表示利用できるようにしました。また、貝層断面図、貝層大区分図からBlender機能を利用して貝層3Dモデルを作成し、分析に活用できます。貝層断面図等はセクション図(手書き貝層断面図、B3判87枚)を集成して作成しました。

また、セクション図注記から貝層(分層)記述データベース(postgreSQLファイル、Excelファイル)を作成しました。

このデータベースは将来、貝層(分層)統計分析に使います。


貝層データベース

遺物データベースでは、3D座標を含む49項目で構成されるデータ集合(postgreSQLファイル、Excelファイル、64096レコード)を作成し、Blenderにプロットして利用できるようにしました。データ集合は遺物台帳(4200ページ、64096 レコード)、遺物分布図(手書き遺物平面分布図、B3判146枚)、発掘調査報告書掲載遺物リスト(33 項目)から作成しました。このデータ集合は発掘調査報告書掲載遺物リストの詳細項目とリレーションしています。Blender3D空間では、遺物はオブジェクト(立方体など)としてプロットし表示します。


遺物データベース


遺物データベースの主な項目

2 データベース作成作業

2023年夏に千葉県教育庁森宮分室で発掘原票の複写を行いました。


遺物台帳の複写


遺物台帳複写画像

遺物台帳4000ページの複写は書画カメラにより想定以上に効率的に行うことが出来ました。


図面の複写


図面複写画像(B3サイズの中央部分のA3画像)

遺物分布図等250枚の複写はA3サイズスキャナーで行いましたが、図面はA3サイズより大きなB3サイズであり、図面の端に重要情報が記入されている場合が多く、結局1枚の図面を2~4回複写することになり、苦労しました。

データベース作成では膨大な入力作業を行い、巨大数値表を扱うなど、煩雑な作業を伴いました。この作業を正確かつ効率的に実施するために、Pythonスクリプト(プログラム)記述利用を多用しました。例えば、平面座標読取作業はPythonによる自作アプリを開発して効率的に行いました。なお作業開始時期とAI普及(ChatGPT登場)時期が重なり、Pythonスクリプト生成においてChatGPT支援を利用することが出来ました。これにより、作業進行が大幅に加速しました。


自作座標読取ツールの操作画面

2025年5月現在、遺物台帳全6万件余のデジタル化は終了しています。デジタル化ではOCR活用を幾度も試みましたが何れも失敗し、結局全部手入力となりました。図面の画像処理、集成作業は全て終わり、座標読取作業の一部が残っています。

3 データベース利用システム


データベース利用システム

データベース利用の基本は、遺物データベース(postgreSQLファイル)からクエリで必要な遺物データをcsvファイルで取り出し、BlenderでBlenderPythonを利用してそのcsvファイルを3D空間にプロットして表示することです。

4 3D空間表示と分析方法


分析用にカスタマイズされたBlender画面(モニター2画面用)

データベースの3D空間表示はBlenderの3Dビューポートを3D空間カンバス(仮想3D空間)として利用しました。遺物、貝層、地山地形などのオブジェクト(3Dモデル)を現実空間と同じスケールの3D空間にプロット展開しました。遺物は5㎝×5㎝×5㎝の立方体オブジェクトで表示し、貝層境界や地形面は曲面オブジェクトで表示しました。

遺物に関する分析(分類、密集度など)はPythonで行い、その結果をBlender にプロットしたものが多いです。遺物と貝層の空間関係分析はBlender内のBlenderPythonやgeometry nodesを使って行ったものが多いです。

5 感想

3D空間分析用データベースは本邦貝塚研究では初出であると考えています。考古学一般でも初出である可能性があります。もし、3D空間分析を意識したデータベース構築例を考古学分野でご存じの方がいらっしゃれば、情報を教えてください。


2022年9月22日木曜日

遺物出土座標計測システムの構築

 Construction of a coordinate measurement system for excavated relics


I built a system in Blender to measure the coordinates (X, Y, Z) of the excavated pottery from the excavated pottery distribution map (plan, elevation) of the north slope shell layer of Ariyoshi Kita Shell Mound. This system enables pottery 3D distribution analysis.

In addition, as the next step, it will be possible to identify the excavated shell layer of pottery by correlating the excavated coordinates with the shell layer cross-section.


有吉北貝塚北斜面貝層の土器片出土分布図(平面図、立面図)から個別土器片の出土座標(X、Y、Z)を計測するシステムをBlenderの中で構築しました。このシステムにより個別土器片の出土座標を計測すれば、次のステップとして、出土座標を貝層断面図と対応させることにより個別土器片の出土貝層を突きとめることが可能になります。

1 土器片出土分布図(平面図、立面図)のBlender3D空間配置

土器片出土分布図(発掘調査報告書では「北斜面貝層土器出土状況」)(平面図、立面図)をBlender縮尺実寸に合わせて3D空間配置しました。Blender原点に北斜面貝層2mメッシュⅡ00の左上隅を対応させました。


土器片出土分布図をBlender3D空間に配置した画面


平面図配置の様子 Blender画面


立面図配置の様子 Blender画面

2 座標計測指標(赤小立方体)の3Dカーソル位置生成

3D空間に配置した土器片出土分布図(平面図、立面図)から土器片出土座標を正確に計測するために、出土位置に座標計測指標(赤小立方体)を生成させます。具体的には出土位置で3Dカーソルをクリックして、その3Dカーソル位置に座標計測指標(赤小立方体)を生成させます。3Dカーソルの3D座標及び赤小立方体の3D座標はBlender機能で取得できますから、座標計測指標(赤小立方体)を残すことによりいつでも作業を検証することができます。


3Dカーソル位置に生成した座標計測指標(赤小立方体)

X座標を手前にした場合、3Dカーソル位置に赤小立方体左下奥の頂点が対応します。赤小立方体の大きさは10㎝×10㎝×10㎝です。ちなみに、このBlender画面のメッシュは1m×1mです。

3Dカーソル位置に座標計測指標(赤小立方体)を生成するPythonスクリプトは次の通りです。

……………………………………………………………………

#一辺0.1mの色付きキューブをカーソル位置に生成する

#このスクリプトは、https://qiita.com/masterkeaton12/items/3d8245d1f301baf4c126の「立方体を生成する」スクリプトを引用一部改変したものです。


import bpy


#立方体を形成する頂点と面を定義する

verts = [(0,0,0),(0,0.1,0),(0.1,0.1,0),(0.1,0,0),(0,0,0.1),(0,0.1,0.1),(0.1,0.1,0.1),(0.1,0,0.1)]

faces = [(0,1,2,3), (4,5,6,7), (0,4,5,1), (1,5,6,2), (2,6,7,3), (3,7,4,0)]


#メッシュを定義する

mesh = bpy.data.meshes.new("Cube_mesh")

#頂点と面のデータからメッシュを生成する

mesh.from_pydata(verts,[],faces)

mesh.update(calc_edges=True)


#マテリアル、色を設定する 赤=1001、青=0011、緑=0101、黒=0001、薄緑=0111、灰=1110、黄=1101

ma = []

ma.append(bpy.data.materials.new('color'))

ma[0].diffuse_color = (1, 0, 0, 1)

mesh.materials.append(ma[0])


#メッシュのデータからオブジェクトを定義する

obj = bpy.data.objects.new("Cube", mesh)   


#オブジェクトの生成場所をカーソルに指定する

obj.location = bpy.context.scene.cursor.location


#オブジェクトをシーンにリンク(表示)させる

bpy.context.scene.collection.objects.link(obj)

……………………………………………………………………

このスクリプトは、https://qiita.com/masterkeaton12/items/3d8245d1f301baf4c126の「立方体を生成する」スクリプトを引用一部改変したものです。原著作者に感謝します。

実際にBlender画面でこのPythonスクリプトを適用すると次のようになります。


218土器の1つの土器片の出土位置で3Dカーソルをクリックして座標計測指標(赤小立方体)を生成させた様子(立面図)


同上拡大

z座標の値が4.3831mとなっています。z座標=0を標高20mに対応させていますから、この土器片の標高は24.3831mになります。x座標値、y座標値は同じ方法で平面図から求めます。

3 メモ

・土器片出土分布図(平面図、立面図)のBlender3D空間貼り付けは、Blender3D空間の座標がしっかりしているので、個別図面の各種誤差累積がなく、想定以上に高精度で出来ました。

・Pythonスクリプトを見様見真似で活用しました。Pythonスクリプト活用はBlender活用に必須であることを思い知らされました。Pythonスクリプトに習熟すれば、今回作成したスクリプトをアドオン化して、より効率的に活用できるようになると考えます。

・3D分析前半のための分析インフラ構築ができましたので、早速データ計測してみることにします。