はじめに
点群(Point Cloud)を扱うエンジニアや研究者の皆さん、こんな「小さなストレス」を感じていませんか?
- 深層学習の推論結果を確認するたびに、CloudCompareなどの外部アプリを立ち上げるのが面倒
- データをドラッグ&ドロップして、データを選択して……という数秒の作業を1日数十回繰り返している
- 共同研究者やクライアントにコードを渡す際、「可視化のためにこのアプリをインストールしてください」と言うのが心苦しい
- Ground TruthとPredictionなど、複数の点群を並べて比較したいが、ウィンドウの配置が大変
これらは一つ一つは小さな手間ですが、積もり積もれば開発のテンポを削いでしまいます。
そこで、Pythonコードから直接ブラウザを立ち上げ、サクッと点群を確認できるツールMultiplePointViewerを作成しました。
作ったもの:MultiplePointViewer
GitHub: Riku-r9/MultiplePointViewer
このツールは、PyViz3D ライブラリをベースにしたラッパーツールです。
「点群データを入力するだけで、ブラウザで可視化する」という点に特化しています。
主な特徴
| 特徴 | 説明 |
|---|---|
| アプリ不要 | ブラウザを利用するため、CloudCompareなどの専用ソフトのインストールが不要 |
| コード完結 | Pythonスクリプトの最後に数行足すだけで、実行直後にブラウザが自動起動 |
| 複数表示に対応 | Ground TruthとPredictionなどを同時に表示し、比較が容易 |
| 多様なファイル形式 | LAZ/LAS/PLY形式に対応 |
| 分類ラベルの可視化 | セマンティックセグメンテーションの結果を色分けして表示可能 |
既存ツールとの比較
点群の可視化には様々なツールがありますが、それぞれ特徴が異なります。
| ツール | 特徴 | 課題 |
|---|---|---|
| CloudCompare | 高機能、業界標準 | 別アプリの起動が必要、自動化しにくい |
| Open3D | Python統合、高速 | GUIウィンドウが別途開く、複数比較が手間 |
| Matplotlib 3D | 手軽、Pythonネイティブ | 大規模データに弱い、インタラクティブ性が低い |
| PyViz3D | ブラウザベース、軽量 | 複数点群の同時比較機能がシンプル |
| MultiplePointViewer | PyViz3Dベース、複数比較に特化 | 本ツール |
MultiplePointViewerは、PyViz3Dの強みを活かしつつ、複数点群の比較表示と開発ワークフローへの統合に特化しています。
使い方
使い方は非常にシンプルです。
1. インストール
git clone https://github.com/Riku-r9/MultiplePointViewer.git
cd MultiplePointViewer
pip install -r requirements.txt
依存ライブラリ:pyviz3d, open3d, laspy, plyfile
2. 単一ファイルを表示(Single Viewer)
以下のコマンドで単一点群を表示するデモを実行できます。
python example/singleViewer_demo.py
cd singleViewer_demo
python -m http.server 6008
# ブラウザで http://localhost:6008 を開く
これだけで、ブラウザが立ち上がり、マウス操作で自由に回転・ズーム可能な3Dビューアが表示されます。
3. 複数ファイルを表示(Multi Viewer)
以下のコマンドで2つの点群を1つのブラウザで表示するデモを実行できます。
python example/multiViewer_demo.py
cd multiViewer_demo
python app.py
# ブラウザで http://localhost:6008 を開く
4. 自分のコードから直接呼び出す
デモだけでなく、自分のスクリプトから直接APIを呼び出すこともできます。
from utils.visualizers import visualize_single_points, visualize_multiple_points
# 単一の点群を可視化
visualize_single_points(
points_path='data/your_cloud.laz', # .laz / .las / .ply に対応
output_dir='viz_single',
downsample=True # 大規模データ向けのダウンサンプリング
)
# 複数の点群を可視化(それぞれ個別のビューで表示)
visualize_multiple_points(
points_list=[
'data/ground_truth.laz',
'data/prediction.ply'
],
base_output_dir='viz_multi',
downsample=False
)
MultiplePointViewerでToronto3dデータを可視化
Toronto3dのデータを入力して、点群の表示を行いました!
RGBやClassificationを自動で取得でき、チェックボタンを押すだけで、Classificationを可視化できています!
使い方
- データ選択ページ(左)で表示したいデータを選択
- データ表示ページ(右)右上のチェックボックスから、表示したいレイヤを選択
下の項目が上に重なるように表示されるため、上から2番目のレイヤを表示したい場合、上から3番目までの選択を外す必要があります - データ表示ページ(右)左上のボタンからデータ選択ページ(左)に戻る
プロジェクト構成
MultiplePointViewer/
├── example/ # デモ用エントリーポイント
│ ├── singleViewer_demo.py
│ └── multiViewer_demo.py
├── utils/ # コアユーティリティ
│ ├── visualizers.py # メインの可視化関数
│ ├── loaders.py # LAZ/LAS/PLYの読み込み
│ ├── color_generators.py # 分類ラベル・強度の色マッピング
│ └── point_cloud_data.py # 点群データコンテナ、ダウンサンプリング
├── src/ # PyViz3Dビューア用フロントエンドアセット
└── requirements.txt
なぜこれを作ったのか(開発背景)
普段、点群のセグメンテーションや分類タスクを行っていると、「今の学習エポックでの推論結果をちょっと見たい」という場面が多々あります。
しかし、その「ちょっと」のために外部アプリを起動し、ファイルをエクスポートして読み込ませて、Classificationを選択するという一連の作業に小さなストレスを感じていました。
また、初学者に点群を体験してもらうために、アプリをインストールしてもらう必要があることを何とか解消したいと考えていました。
このようの悩みから、「開発フローの中に、可視化が組み込まれているべきだ」 と考え、今回のツールを作成しました。
技術的なポイント
PyViz3Dについて
PyViz3Dは、3Dシーンをブラウザで直接可視化できるPythonパッケージです。HTMLとJavaScriptを自動生成し、ローカルサーバーを立てるだけでインタラクティブな3D表示が可能になります。
MultiplePointViewerでは、このPyViz3Dをベースに以下を追加しています。
- 複数点群の統合表示: 複数のPyViz3Dビューアを1つのページにまとめて表示
- ファイルローダーの統一: LAZ/LAS/PLY形式を統一的に扱えるローダー
- 分類ラベルの色付け: セマンティックセグメンテーション結果の可視化に便利なカラーマッピング
おわりに
今後は、点群のクラス(RGBやIntensityなど)や分類ラベルなどをカスタマイズできるようにconfigを追加することを検討しています!
興味を持っていただけたら、GitHubのリポジトリを除いてもらえると嬉しいです!
GitHubリポジトリはこちら:
https://github.com/Riku-r9/MultiplePointViewer


