3D点群やメッシュのファイル形式としてPLYファイルがよく使用されます。今回は、このPLYファイルをPythonで読み込む方法を紹介します。
私はPytorchを利用してグラフニューラルネットワークベースの3D点群処理を行いたいという背景から、Pythonで簡単に点群のPLYファイルを読み込める方法を探していました。
今回はplyfileモジュールを用いたPLYファイルの読み込み方法を紹介します。
今回紹介するplyfile pythonモジュールは、ASCII ファイルとバイナリ PLY ファイルを読み書きするための簡単な機能を提供します。pipを利用して以下のコマンドでインストールできます。
pip install plyfile
読み込みはimportを除けば、たった1行で実現できます。下記コードの‘longdress_vox10_1051.ply’のところに読み込みたいPLYファイルのパスを記述してください。
import numpy as np
from plyfile import PlyData
# Loading PLY data
plydata = PlyData.read('longdress_vox10_1051.ply')
もし同じデータでテストしたい場合にはJPEG Pleno Database: 8i Voxelized Full Bodies (8iVFB v2)からデータをダウンロードできます。
以下のようにprintすると、PLYファイルの中身を知ることができます。今回使用したデータセットは、面などは持たない点のみのデータセットのためelementはvertex(頂点)のみです。また、各頂点は6つ(x, y, z, red, green, blue)のpropertyを持ちます。
print(plydata)
点群の持つ各属性(頂点、色……)は、numpyの配列として取得することができます。頂点や色の情報を獲得するにはどうすればよいでしょうか。
例えば以下のような記述でposdataに全ての点の座標値を、colordataの全ての点の色の値をnumpyの配列として得ることができます。
import numpy as np
from plyfile import PlyData
# Loading PLY data
plydata = PlyData.read('longdress_vox10_1051.ply')
# Getting position and color
vertices = plydata['vertex'];
posdata = np.vstack([vertices['x'], vertices['y'], vertices['z']]).T
colordata = np.vstack([vertices['red'], vertices['green'], vertices['blue']]).T
print(posdata)
print(colordata)