# cumo
cumoは、Pythonから3D点群をブラウザ上で表示するためのライブラリです。
## インストール
```console
$ pip install cumo
```
## ドキュメント
sphinxでドキュメントの生成が可能です。
devcontainer環境を使用することで、ビルド環境を構築することができます。
その中で以下のようにすると、`lib/docs/`以下にドキュメントが生成されます。
```console
$ cd lib
$ poetry install
$ poetry run sphinx-apidoc --append-syspath -F -o ./docs .
```
## 使用例
`lib/cumo/__main__.py`は3面図を撮る例です。
`lib/`以下に適当なPCDファイル(以下の例では`pcl_logo.pcd`)を用意して、以下のようにするとpcdファイルを閲覧できます。
```console
$ cd lib
$ poetry run python -m cumo pcl_logo.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での使用も可能です。
```console
$ 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(filename, "rb") as f:
>>> b = f.read()
>>> viewer.send_pointcloud_pcd(b)
```
## cumo開発者向け
### 大まかな構成
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ファイルの中に格納されます。
```console
$ ./build.sh
```
### テスト
以下のようにするとテスト用のモードでクライアントページを配信することができます。
```console
$ cd client
$ yarn serve
```
上のようにしてクライアントを配信するサーバを起動した後、ブラウザでクライアントを開きます(大抵の場合自動で開かれます)。
クライアントを開いた後、ライブラリ側を起動するとクライアント側に接続されます。
```console
$ cd lib
$ poetry run python -m cumo pcl_logo.pcd
```
Raw data
{
"_id": null,
"home_page": "https://github.com/kurusugawa-computer/cumo",
"name": "cumo",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.7",
"maintainer_email": null,
"keywords": "point-cloud, pcd",
"author": "Kurusugawa Computer",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/40/af/e2d5faa9b43cfcb5f01c989ce7731f86240d1308d2caac05d281be2772e7/cumo-0.33.7.tar.gz",
"platform": null,
"description": "# cumo\n\ncumo\u306f\u3001Python\u304b\u30893D\u70b9\u7fa4\u3092\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002\n\n## \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\n```console\n$ pip install cumo\n```\n\n## \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\n\nsphinx\u3067\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u751f\u6210\u304c\u53ef\u80fd\u3067\u3059\u3002\ndevcontainer\u74b0\u5883\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30d3\u30eb\u30c9\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n\u305d\u306e\u4e2d\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068\u3001`lib/docs/`\u4ee5\u4e0b\u306b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\n\n```console\n$ cd lib\n$ poetry install\n$ poetry run sphinx-apidoc --append-syspath -F -o ./docs .\n```\n\n## \u4f7f\u7528\u4f8b\n\n`lib/cumo/__main__.py`\u306f3\u9762\u56f3\u3092\u64ae\u308b\u4f8b\u3067\u3059\u3002\n`lib/`\u4ee5\u4e0b\u306b\u9069\u5f53\u306aPCD\u30d5\u30a1\u30a4\u30eb(\u4ee5\u4e0b\u306e\u4f8b\u3067\u306f`pcl_logo.pcd`)\u3092\u7528\u610f\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068pcd\u30d5\u30a1\u30a4\u30eb\u3092\u95b2\u89a7\u3067\u304d\u307e\u3059\u3002\n\n```console\n$ cd lib\n$ poetry run python -m cumo pcl_logo.pcd\nopen: http://127.0.0.1:8082\nsetup...\nresize window and press custom control button \"start\"\nsaved: screenshot_x.png\nsaved: screenshot_y.png\nsaved: screenshot_z.png\n```\n\nREPL\u3067\u306e\u4f7f\u7528\u3082\u53ef\u80fd\u3067\u3059\u3002\n\n```console\n$ poetry run python\nPython 3.8.7 (default, Apr 9 2022, 21:34:33)\n[GCC 9.4.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> from cumo import PointCloudViewer\n>>> viewer = PointCloudViewer()\n>>> viewer.start()\n>>> # open localhost:8082 on your browser\n>>> with open(filename, \"rb\") as f:\n>>> b = f.read()\n>>> viewer.send_pointcloud_pcd(b)\n```\n\n## cumo\u958b\u767a\u8005\u5411\u3051\n\n### \u5927\u307e\u304b\u306a\u69cb\u6210\n\ncumo\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3001\u5927\u307e\u304b\u306b2\u3064\u306e\u8981\u7d20\u304b\u3089\u306a\u308a\u307e\u3059\u3002\n\n- `lib/` : Python\u30e9\u30a4\u30d6\u30e9\u30ea\u3002PointCloudViewer\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eHTML\u3092\u914d\u4fe1\u3057\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068WebSocket\u901a\u4fe1\u3092\u884c\u3046\u3002\n- `client/` : \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30da\u30fc\u30b8\u3002\u30e9\u30a4\u30d6\u30e9\u30ea\u3068WebSocket\u901a\u4fe1\u3092\u884c\u3044\u3001\u30e9\u30a4\u30d6\u30e9\u30ea\u304b\u3089\u306e\u64cd\u4f5c\u3092\u53d7\u3051\u4ed8\u3051\u308b\u3002\n\n\u3053\u308c\u30892\u3064\u306e\u901a\u4fe1\u306fWebSocket\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\n\u901a\u4fe1\u30c7\u30fc\u30bf\u306fProtocol Buffers\u306b\u3088\u308a\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u308c\u305e\u308c\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u8a00\u8a9e\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u81ea\u52d5\u3067\u751f\u6210\u3055\u308c\u307e\u3059\u3002\n\n- `protobuf/server.proto`: \u30e9\u30a4\u30d6\u30e9\u30ea\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3078\u9001\u4fe1\u3055\u308c\u308b\u30c7\u30fc\u30bf\n- `protobuf/client.proto`: \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u30e9\u30a4\u30d6\u30e9\u30ea\u3078\u9001\u4fe1\u3055\u308c\u308b\u30c7\u30fc\u30bf\n\n### \u30d3\u30eb\u30c9\n\ndevcontainer\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30d3\u30eb\u30c9\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\ndevcontainer\u74b0\u5883\u306b\u5165\u308a\u3001\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068`lib/dist/`\u4ee5\u4e0b\u306btar.gz\u3068whl\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eHTML\u7b49\u306f\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u542b\u307e\u308c\u3001tar.gz\u3084whl\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002\n\n```console\n$ ./build.sh\n```\n\n### \u30c6\u30b9\u30c8\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068\u30c6\u30b9\u30c8\u7528\u306e\u30e2\u30fc\u30c9\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30da\u30fc\u30b8\u3092\u914d\u4fe1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n\n```console\n$ cd client\n$ yarn serve\n```\n\n\u4e0a\u306e\u3088\u3046\u306b\u3057\u3066\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u914d\u4fe1\u3059\u308b\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3057\u305f\u5f8c\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u958b\u304d\u307e\u3059(\u5927\u62b5\u306e\u5834\u5408\u81ea\u52d5\u3067\u958b\u304b\u308c\u307e\u3059)\u3002\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u958b\u3044\u305f\u5f8c\u3001\u30e9\u30a4\u30d6\u30e9\u30ea\u5074\u3092\u8d77\u52d5\u3059\u308b\u3068\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u306b\u63a5\u7d9a\u3055\u308c\u307e\u3059\u3002\n\n```console\n$ cd lib\n$ poetry run python -m cumo pcl_logo.pcd\n```\n",
"bugtrack_url": null,
"license": "BSD",
"summary": "Web\u30d6\u30e9\u30a6\u30b6\u4e0a\u306b\u70b9\u7fa4\u3092\u63cf\u753b\u3059\u308b python \u30e9\u30a4\u30d6\u30e9\u30ea",
"version": "0.33.7",
"project_urls": {
"Homepage": "https://github.com/kurusugawa-computer/cumo",
"Repository": "https://github.com/kurusugawa-computer/cumo"
},
"split_keywords": [
"point-cloud",
" pcd"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bbec8f8892f62a2890fe42cb9547b99851c0e9ba892ee120b5d9c80c52d70d27",
"md5": "2cb3e24ea7a155e9118a12fccaca3af2",
"sha256": "da937129790a8c12bf8656f32ac83835fcca06f146c87a54e1af9c278174ea7f"
},
"downloads": -1,
"filename": "cumo-0.33.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2cb3e24ea7a155e9118a12fccaca3af2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.7",
"size": 1184406,
"upload_time": "2024-06-13T08:28:57",
"upload_time_iso_8601": "2024-06-13T08:28:57.848297Z",
"url": "https://files.pythonhosted.org/packages/bb/ec/8f8892f62a2890fe42cb9547b99851c0e9ba892ee120b5d9c80c52d70d27/cumo-0.33.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "40afe2d5faa9b43cfcb5f01c989ce7731f86240d1308d2caac05d281be2772e7",
"md5": "63017de944d5da830817e466a25129c3",
"sha256": "19cb6417418b6f0e80bb8ca9e2fdef9d54222f666428c402017302905e76828a"
},
"downloads": -1,
"filename": "cumo-0.33.7.tar.gz",
"has_sig": false,
"md5_digest": "63017de944d5da830817e466a25129c3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.7",
"size": 1169182,
"upload_time": "2024-06-13T08:29:00",
"upload_time_iso_8601": "2024-06-13T08:29:00.349086Z",
"url": "https://files.pythonhosted.org/packages/40/af/e2d5faa9b43cfcb5f01c989ce7731f86240d1308d2caac05d281be2772e7/cumo-0.33.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-13 08:29:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kurusugawa-computer",
"github_project": "cumo",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"lcname": "cumo"
}