Open3D のインストール,Python のプログラム例

複数の写真から,3次元の立体を構成する技術がある. レーザー光線等を用いて,3次元のものをダイレクトに計測する技術もある. これらでは,3次元点群という点の集まりのデータが得られる. 3次元の中の点ですので,x, y, z の 3つの値を持つ. Open3D には,3次元点群について,次のような機能がある. 知っておいて損がありません.

目次

利用条件などは利用者において確認してください

前準備

Python のインストール(Windows上)

注:既にPython(バージョン3.12を推奨)がインストール済みの場合は,この手順は不要である.

winget(Windowsパッケージマネージャー)を使用してインストールを行う

  1. Windowsで,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. winget(Windowsパッケージマネージャー)が利用可能か確認する:
    winget --version
    
  3. Pythonのインストール(下のコマンドにより Python 3.12 がインストールされる).
    winget install --scope machine Python.Launcher
    winget install --scope machine Python.Python.3.12
    
  4. 【関連する外部サイト】

    【サイト内の関連ページ】

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)または Visual Studio 2022 のインストール(Windows 上)

CUDAツールキットは、GPU上でコードをコンパイルするためにC++コンパイラを必要とします。そのため、事前にMicrosoft C++ Build Tools または Visual Studio (C++開発ワークロードを含む) をインストールしておく必要があります。

インストールの判断Build Tools for Visual Studio は,C++コンパイラなどを含む開発ツールセットです. Visual Studio は統合開発環境であり,いくつかのエディションがあり,Build Tools for Visual Studioの機能を含むか連携して使用します.インストールは以下の基準で判断してください:

不明な点がある場合は,Visual Studio 全体をインストール する方が、後で機能を追加する手間が省ける場合があります.

Build Tools for Visual Studio 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動します(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)。

    以下のwingetコマンドを実行します。wingetはWindows標準のパッケージマネージャーです。

    --scope machine オプションはシステム全体にインストールすることを意味します。

    次のコマンドは,Build Tools for Visual Studio 2022と、多くのプログラムで必要とされるVC++ 2015以降の再頒布可能パッケージをインストールします.

    winget install --scope machine Microsoft.VisualStudio.2022.BuildTools
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Build Tools for Visual Studio 2022 で C++ によるデスクトップ開発関連コンポーネントのインストール

    CUDA開発には、標準のC++開発ツールに加えて、特定のコンポーネントが必要になる場合があります。

    1. Visual Studio Installer を起動します。

      起動方法: スタートメニューから「Visual Studio Installer」を探して実行します.

    2. Visual Studio Build Tools 2022 の項目で「変更」ボタンをクリックします.
    3. 「ワークロード」タブで「C++ によるデスクトップ開発」をクリックして選択します。画面右側の「インストールの詳細」で、必要に応じて「v143 ビルドツール用 C++/CLI サポート(最新)」、「ATL」、「MFC」などをチェックします(これらは一般的なC++開発や特定のプロジェクトタイプで必要になる場合があります)。その後、「変更」をクリックしてインストールまたは変更を適用します.

Visual Studio Community 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動します。
  2. インストールコマンドの実行

    以下のwingetコマンドを実行します。--override "--add ..." 部分で、インストールするワークロードやコンポーネントを指定しています。

    winget install Microsoft.VisualStudio.2022.Community --scope machine --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Component.CoreEditor Microsoft.VisualStudio.Component.NuGet Microsoft.VisualStudio.Component.Roslyn.Compiler Microsoft.VisualStudio.Component.TextTemplating Microsoft.VisualStudio.Component.Windows.SDK.Latest Microsoft.VisualStudio.Component.VC.Tools.x86.x64 Microsoft.VisualStudio.Component.VC.ATL Microsoft.VisualStudio.Component.VC.ATLMFC"
    winget install Microsoft.VisualStudio.2022.Community --scope machine Microsoft.VCRedist.2015+.x64
    

    インストールされる主要なコンポーネントの説明:

    • NativeDesktop (C++によるデスクトップ開発): CUDA開発に必要なC++コンパイラ(VC.Tools.x86.x64)やWindows SDK (Windows.SDK.Latest)など、基本的な開発ツール一式を含みます。
    • CoreEditor: Visual Studioの基本的なコードエディタ機能を提供します。
    • VC.CLI.Support: C++/CLIを用いた開発サポート(通常、純粋なCUDA C++開発では不要な場合もあります)。
    • NuGet: .NETライブラリ管理用(C++プロジェクトでも利用されることがあります)。
    • VC.ATL / VC.ATLMFC: 特定のWindowsアプリケーション開発フレームワーク(通常、CUDA開発自体には直接必要ありません)。

    システム要件と注意事項:

    • 管理者権限でのインストールが必須です。
    • 必要ディスク容量:10GB以上(選択するコンポーネントにより変動)。
    • 推奨メモリ:8GB以上のRAM。
    • インストール過程でシステムの再起動が要求される可能性があります。
    • 安定したインターネット接続環境が必要です。

    後から追加のコンポーネントが必要になった場合は,Visual Studio Installerを使用して個別にインストールすることが可能です.

  3. インストール完了の確認

    インストールが成功したか確認するには、管理者権限のコマンドプロンプトで以下のコマンドを実行します。

    winget list Microsoft.VisualStudio.2022.Community
    

    リストに表示されればインストールされています。

    トラブルシューティング:

    インストール失敗時は,以下のログファイルを確認すると原因究明の手がかりになります:

    %TEMP%\dd_setup_.log
    %TEMP%\dd_bootstrapper_.log

    ( は実行日時に対応する文字列)

  4. (オプション) Visual Studio Installer での確認と変更

    wingetでのインストール後も、Visual Studio Installerを使ってインストール内容を確認・変更できます。

    1. Visual Studio Installer を起動します。
    2. Visual Studio Community 2022 の項目で「変更」をクリックします。
    3. 「ワークロード」タブで「C++ によるデスクトップ開発」がチェックされていることを確認します。必要であれば、「個別のコンポーネント」タブで特定のツール(例: 特定バージョンのMSVCコンパイラ、CMakeツールなど)を追加・削除できます。「インストールの詳細」で「v143 ビルドツール用 C++/CLI サポート(最新)」などが選択されているかも確認できます。変更後、「変更」または「インストール」をクリックします。

Git のインストール(Windows 上)

Gitは,バージョン管理システム.ソースコードの管理や複数人での共同に役立つ.

サイト内の関連ページWindows での Git のインストール: 別ページ »で説明

関連する外部ページGit の公式ページ: https://git-scm.com/

CMake のインストール

CMake の公式ダウンロードページ: https://cmake.org/download/

Open3D のインストール(Windows 上)

http://www.open3d.org/docs/release/compilation.html に記載の手順による.

Windows での Open3D のインストール

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. pip を用いて,Open3D のインストール
    python -m pip install -U open3d
    
  3. バージョンの確認

    次のコマンドを実行.「Version」の右に表示されるバージョンを確認.

    python -m pip show open3d
    

    関連ファイルのインストールを行いたいので,下に書いた手順を進める.

  4. Open3D 関連ファイルのインストール

    エラーを回避するために「/utf-8」を設定.

    python -m pip install -U --ignore-installed numpy scikit-image
    cd %LOCALAPPDATA%
    rmdir /s /q Open3D
    git clone --recursive https://github.com/isl-org/Open3D
    cd Open3D
    del CMakeCache.txt
    rmdir /s /q CMakeFiles\
    cmake -G "Visual Studio 17 2022" -A x64 -T host=x64 ^
      -DCMAKE_C_FLAGS="/DWIN32 /D_WINDOWS /W0 /utf-8" ^
      -DCMAKE_CXX_FLAGS="/DWIN32 /D_WINDOWS /GR /EHsc /W0 /utf-8" ^
      -DCMAKE_INSTALL_PREFIX="c:/Open3D" .
    cmake --build . --config Release --target ALL_BUILD
    cmake --build . --config Release --target INSTALL
    
  5. 確認のため Open3DViewer を起動してみる.

    起動ができれば OK とする.

    %LOCALAPPDATA%\Open3D\bin\Open3D\Release\Open3DViewer.exe
    
  6. Open3D-ML 関連ファイルのインストール

    次のコマンドを実行する.

    cd %LOCALAPPDATA%
    rmdir /s /q Open3D-ML
    git clone --recursive https://github.com/isl-org/Open3D-ML
    cd Open3D-ML
    python -m pip install -r requirements.txt
    python -m pip install -r requirements-torch.txt
    

Ubuntu での Open3D のインストール

  1. 端末を開く
  2. pip を用いて,Open3D のインストール
    sudo pip3 install -U open3d
    
  3. バージョンの確認

    次のコマンドを実行.「Version」の右に表示されるバージョンを確認.

    pip3 show open3d
    

    以降,関連ファイルのインストールを行いたいので,下に書いた手順を進める.

  4. cmake のインストール: 別ページ で説明している.
  5. Open3D 関連ファイルのインストール

    次のコマンドを実行する.

    git clone では「-b v0.13.0」のようにバージョンを指定する.このバージョンは, さきほど「pip3 show open3d」で確認したバージョンに一致させること.

    sudo apt -y update
    sudo apt -y install build-essential gcc g++ make
    sudo apt -y install git
    sudo pip3 install -U numpy scikit-image
    sudo mkdir /usr/local
    cd /usr/local
    sudo rm -rf Open3D
    sudo git clone -b v0.13.0 --recursive https://github.com/isl-org/Open3D
    sudo chown -R $USER Open3D
    cd Open3D
    git switch -
    yes | bash util/install_deps_ubuntu.sh
    rm -f CMakeCache.txt
    /usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local .
    make
    sudo make install
    
  6. NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.5,NVIDIA cuDNN v8 のインストール: 別ページ »で説明
  7. Open3D-ML 関連ファイルのインストール

    次のコマンドを実行する.

    git clone では「-b r0.13.0」のようにバージョンを指定する.このバージョンは, さきほど「pip3 show open3d」で確認したバージョンに一致させること.

    cd /usr/local
    sudo rm -rf Open3D-ML
    sudo git clone --recursive -b r0.13.0 https://github.com/isl-org/Open3D-ML
    sudo chown -R $USER Open3D
    sudo chown -R $USER Open3D-ML
    cd Open3D-ML
    git switch -
    sudo pip3 install -r requirements.txt
    sudo pip3 install -r requirements-tensorflow.txt
    sudo pip3 install -r requirements-torch.txt
    sudo pip3 install -U numpy chumpy json-tricks munkres xtcocotools yapf
    cd ../Open3D
    rm -f CMakeCache.txt
    /usr/local/bin/cmake \
      -DBUILD_PYTORCH_OPS=ON \
      -DBUILD_TENSORFLOW_OPS=ON \
      -DBUNDLE_OPEN3D_ML=ON \
      -DOPEN3D_ML_ROOT=/usr/local/Open3D-ML \
      -DGLIBCXX_USE_CXX11_ABI=OFF \
      -DCMAKE_INSTALL_PREFIX=/usr/local .
    make
    sudo make install
    

Open3D に付属の Python のプログラムを動かしてみる(Python を使用)

  1. カレントディレクトリの移動

    Windows では 「cd %LOCALAPPDATA%\Open3D\docs\jupyter」

    Ubuntu では 「cd /usr/local/Open3D/docs/jupyter」

  2. Python プログラムの実行

    Python プログラムの実行: 別ページ »で説明

    Python のまとめ: 別ページ »にまとめ

    pointcloud.ipynb に記載の Python プログラムを実行

    • 準備
      import open3d as o3d
      import numpy as np
      import matplotlib.pyplot as plt
      import copy
      import os
      import sys
      
      # only needed for tutorial, monkey patches visualization
      sys.path.append('..')
      import open3d_tutorial as o3dtut
      # change to True if you want to interact with the visualization windows
      o3dtut.interactive = not "CI" in os.environ
      

      Windows での実行結果を示す.

    • 表示
      print("Load a ply point cloud, print it, and render it")
      pcd = o3d.io.read_point_cloud("../../examples/test_data/fragment.ply")
      print(pcd)
      print(np.asarray(pcd.points))
      o3d.visualization.draw_geometries([pcd],
                                        zoom=0.3412,
                                        front=[0.4257, -0.2125, -0.8795],
                                        lookat=[2.6172, 2.0475, 1.532],
                                        up=[-0.0694, -0.9768, 0.2024])
      

      Windows での実行結果を示す.

    • ダウンサンプリング
      print("Downsample the point cloud with a voxel of 0.05")
      downpcd = pcd.voxel_down_sample(voxel_size=0.05)
      o3d.visualization.draw_geometries([downpcd],
                                        zoom=0.3412,
                                        front=[0.4257, -0.2125, -0.8795],
                                        lookat=[2.6172, 2.0475, 1.532],
                                        up=[-0.0694, -0.9768, 0.2024])
      

      Windows での実行結果を示す.

    • Convex hull
      bunny = o3d.data.BunnyMesh()
      mesh = o3d.io.read_triangle_mesh(bunny.path)
      mesh.compute_vertex_normals()
      
      pcl = mesh.sample_points_poisson_disk(number_of_points=2000)
      hull, _ = pcl.compute_convex_hull()
      hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull)
      hull_ls.paint_uniform_color((1, 0, 0))
      o3d.visualization.draw_geometries([pcl, hull_ls])
      
      pcl = o3dtut.get_bunny_mesh().sample_points_poisson_disk(number_of_points=2000)
      hull, _ = pcl.compute_convex_hull()
      hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull)
      hull_ls.paint_uniform_color((1, 0, 0))
      o3d.visualization.draw_geometries([pcl, hull_ls])
      

      Windows での実行結果を示す.

    • DBSCAN クラスタリング
      pcd = o3d.io.read_point_cloud("../../examples/test_data/fragment.ply")
      
      with o3d.utility.VerbosityContextManager(
              o3d.utility.VerbosityLevel.Debug) as cm:
          labels = np.array(
              pcd.cluster_dbscan(eps=0.02, min_points=10, print_progress=True))
      
      max_label = labels.max()
      print(f"point cloud has {max_label + 1} clusters")
      colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1))
      colors[labels < 0] = 0
      pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])
      o3d.visualization.draw_geometries([pcd],
                                        zoom=0.455,
                                        front=[-0.4999, -0.1659, -0.8499],
                                        lookat=[2.1813, 2.0619, 2.0999],
                                        up=[0.1204, -0.9852, 0.1215])
      

      Windows での実行結果を示す.

    • 平面のセグメンテーション
      pcd = o3d.io.read_point_cloud("../../examples/test_data/fragment.pcd")
      plane_model, inliers = pcd.segment_plane(distance_threshold=0.01,
                                               ransac_n=3,
                                               num_iterations=1000)
      [a, b, c, d] = plane_model
      print(f"Plane equation: {a:.2f}x + {b:.2f}y + {c:.2f}z + {d:.2f} = 0")
      
      inlier_cloud = pcd.select_by_index(inliers)
      inlier_cloud.paint_uniform_color([1.0, 0, 0])
      outlier_cloud = pcd.select_by_index(inliers, invert=True)
      o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud],
                                        zoom=0.8,
                                        front=[-0.4999, -0.1659, -0.8499],
                                        lookat=[2.1813, 2.0619, 2.0999],
                                        up=[0.1204, -0.9852, 0.1215])
      

      Windows での実行結果を示す.