0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】ChatGPTに点群データ出力を手伝ってもらった

Posted at

概要

研究で使おうとしていた点群データがテキストファイルで提供されており、可視化をしたいと思ったものの3Dファイルの作り方がよくわからなかったので、ChatGPT様にお願いしました。

今回使用するデータセットhttps://github.com/czq142857/BAE-NET にて提供されているデータセット

(元データはA Scalable Active Framework for Region Annotation in 3D Shape Collections

ChatGPTの回答

質問内容

以下のような、一番右の値がクラスIDを示す、テキストファイルに書かれた点群データを、同じクラスIDを持つ点に同じ色を付与して、obj形式に変換したい。pythonで実装する方法を教えて。

-0.182850 0.206710 -0.143640 0.156600 -0.987600 0.007967 12.000000
-0.219480 0.243130 0.110640 -0.963900 -0.030290 0.264400 12.000000
-0.233670 0.382100 -0.009580 -0.953300 0.298200 -0.048420 12.000000
-0.205430 0.209390 -0.143920 -0.372100 -0.928000 -0.018820 12.000000
0.112450 0.048600 -0.033050 0.003796 1.000000 0.000014 13.000000
0.110120 0.048700 0.084670 0.048400 0.998800 0.000005 13.000000
0.111600 0.048630 0.042720 0.043930 0.999000 0.000002 13.000000
0.101950 0.049040 -0.020610 0.042370 0.999100 0.000032 13.000000

回答

Pythonで実装するには、まずファイルから点群データを読み込み、それらをパースして、必要な情報を抽出します。その後、それらの点に対して色を割り当て、obj形式に変換して保存することができます。

詳細な手順は以下になります。

  1. ファイルから点群データを読み込み、それらをパースします。

    points = []
    with open("points.txt", "r") as f:
        for line in f:
            x, y, z, a, b, c, class_id = [float(i) for i in line.split()]
            points.append([x, y, z, class_id])
    
  2. 各クラスIDに対して色を割り当てます。

    colors = {}
    for point in points:
        class_id = point[-1]
        if class_id not in colors:
            # 適当な色を割り当てる
            colors[class_id] = [random.random(), random.random(), random.random()]
    
  3. obj形式のテキストを生成し、ファイルに保存します。

    with open("points.obj", "w") as f:
    for point in points:
        class_id = point[-1]
        color = colors[class_id]
        f.write("v {} {} {} {} {} {}\n".format(point[0], point[1], point[2], color[0], color[1], color[2]))
    

まとめ

文章として分かりづらい日本語でも、きちんと返してくれるのが素直にすごいと思いました。しかもちゃんと動く。

色部分だけはクラスIDごとに特定の色になるように別途color_listを用意して設定して、さっそく点群データ(.obj)を生成してみました。

生成結果
image.png
MeshLabのスクショなので見づらいですが、きちんと色分けされています。

点群のみであればv行だけでよいのも今回初めて知りました。
ChatGPTを今後も活用しながら勉強してみようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?