cumoは、Pythonから3D点群をブラウザ上で表示するためのライブラリです。
$ pip install cumo
sphinxでドキュメントの生成が可能です。
devcontainer環境を使用することで、ビルド環境を構築することができます。
その中で以下のようにすると、lib/docs/
以下にドキュメントが生成されます。
$ make docs
また、serve-docs
ターゲットを実行するとPythonのサーバーが起動し、http://localhost:8000
でドキュメントを閲覧できます。
$ make serve-docs
lib/cumo/__main__.py
は3面図を撮る例です。
lib/
以下に適当なPCDファイル(以下の例ではsample_data.pcd
)を用意して、以下のようにするとpcdファイルを閲覧できます。
$ cd lib
$ poetry run python -m cumo sample_data.pcd
open: http://127.0.0.1:8082
setup...
resize window and press custom control button "start"
saved: screenshot_x.png
saved: screenshot_y.png
saved: screenshot_z.png
REPLでの使用も可能です。
$ poetry run python
Python 3.8.7 (default, Apr 9 2022, 21:34:33)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from cumo import PointCloudViewer
>>> viewer = PointCloudViewer()
>>> viewer.start()
>>> # open localhost:8082 on your browser
>>> with open("sample_data.pcd", "rb") as f:
>>> b = f.read()
>>> viewer.send_pointcloud_pcd(b)
cumoは以下のように、大まかに2つの要素からなります。
lib/
: Pythonライブラリ。PointCloudViewerクラスを提供する。クライアントのHTMLを配信し、クライアントとWebSocket通信を行う。client/
: クライアントページ。ライブラリとWebSocket通信を行い、ライブラリからの操作を受け付ける。
これら2つの通信はWebSocketを使用しています。 通信データはProtocol Buffersにより定義されており、それぞれで使われている言語のライブラリが自動で生成されます。
protobuf/server.proto
: ライブラリからクライアントへ送信されるデータprotobuf/client.proto
: クライアントからライブラリへ送信されるデータ
devcontainerを使用することで、ビルド環境を構築することができます。
devcontainer環境に入り、下のようにするとlib/dist/
以下にtar.gzとwhlファイルが生成されます。
クライアントのHTML等はライブラリに含まれ、tar.gzやwhlファイルの中に格納されます。
$ make
make
(またはmake all
)を実行していれば、サンプル用のpcdファイルsample_data.pcd
がlib/
以下に生成されています。
以下のようにするとテスト用のモードでクライアントページを配信することができます。
$ make serve
上のようにしてクライアントを配信するサーバを起動した後、ブラウザでクライアントを開きます(大抵の場合自動で開かれます)。 別のターミナルでライブラリ側を起動するとクライアント側に接続されます。
$ cd lib
$ poetry run python -m cumo sample_data.pcd