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 がインストールされる).
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f
    REM Python をシステム領域にインストール
    winget install --scope machine --id Python.Python.3.12 -e --silent
    REM Python のパス
    set "INSTALL_PATH=C:\Program Files\Python312"
    echo "%PATH%" | find /i "%INSTALL_PATH%" >nul
    if errorlevel 1 setx PATH "%PATH%;%INSTALL_PATH%" /M >nul
    echo "%PATH%" | find /i "%INSTALL_PATH%\Scripts" >nul
    if errorlevel 1 setx PATH "%PATH%;%INSTALL_PATH%\Scripts" /M >nul
    
  4. 【関連する外部サイト】

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

Visual Studio 2022 Build Toolsとランタイムのインストール

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。


REM Visual Studio 2022 Build Toolsとランタイムのインストール
winget install --scope machine Microsoft.VisualStudio.2022.BuildTools Microsoft.VCRedist.2015+.x64
set VS_INSTALLER="C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"
set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools"
REM C++開発ワークロードのインストール
%VS_INSTALLER% modify --installPath %VS_PATH% ^
--add Microsoft.VisualStudio.Workload.VCTools ^
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
--add Microsoft.VisualStudio.Component.Windows11SDK.22621 ^
--includeRecommended --quiet --norestart

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 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 での実行結果を示す.