Python から libpcl を使う(GitHub の davidcaron/pclpy, Python を使用)(Ubuntu 上)
【目次】
利用条件などは利用者において確認してください
【サイト内の関連ページ】
参考Webページ
- Github の Web ページ: https://www.github.com/davidcaron/pclpy
- Pypi の Web ページ: https://pypi.org/project/pclpy/
謝辞:このページで使用しているソフトウェア類の作者に感謝します
前準備
Python のインストール(Windows上)
注:既にPython(バージョン3.12を推奨)がインストール済みの場合は,この手順は不要である.
winget(Windowsパッケージマネージャー)を使用してインストールを行う
- Windowsで,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。 - winget(Windowsパッケージマネージャー)が利用可能か確認する:
winget --version
- 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
- Python詳細ガイド:Pythonまとめ »
【関連する外部サイト】
【サイト内の関連ページ】
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/
Gitのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
REM Git をシステム領域にインストール
7-Zip のインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
REM 7-Zip をシステム領域にインストール
winget install --scope machine --id 7zip.7zip -e --silent
REM 7-Zip のパス設定
set "SEVENZIP_PATH=C:\Program Files\7-Zip"
if exist "%SEVENZIP_PATH%" (
echo "%PATH%" | find /i "%SEVENZIP_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%SEVENZIP_PATH%" /M >nul
)
libpcl 1.9.1 のインストール
davidcaron/pclpy を使いたい.次のページによれば,バージョンは 1.9.1 が指定されている.
davidcaron/pclpy の URL: https://github.com/davidcaron/pclpy
- Windows での libpcl のインストール手順は,別ページ »で説明
- Ubuntu の場合は,次のコマンドを実行する.
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install libboost-all-dev libeigen3-dev libvtk9-dev libflann-dev
cd /usr/local
sudo rm -rf pcl-pcl-1.9.1
cd /tmp
curl -O -L https://github.com/PointCloudLibrary/pcl/archive/refs/tags/pcl-1.9.1.tar.gz
cd /usr/local
sudo tar -xvzof /tmp/pcl-1.9.1.tar.gz
sudo chown -R $USER pcl-pcl-1.9.1
cd pcl-pcl-1.9.1
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j2
sudo make install
davidcaron/pclpy のインストール
davidcaron/pclpy の URL: https://github.com/davidcaron/pclpy
- インストールディレクトリを空にする
- github の davidcaron/pclpy のダウンロード
- 前提パッケージのインストール
- インストール
Ubuntu の場合
sudo chown -R $USER /usr/local/pytools/pclpy
cd /usr/local/pytools/pclpy
PYTHON=python3 bash scripts/download_pcl.sh
PYTHON=python3 bash scripts/generate_points_and_bindings.sh
# scripts/generate_hpp_point_types.sh
cd generators
PCL_REPO_PATH=/usr/local/pcl-pcl-1.9.1 PYTHONPATH=/usr/local/pytools/pclpy python3 generate_point_types.py
cd ..
python3 setup.py build
sudo python3 setup.py install
- 動作確認
https://github.com/davidcaron/pclpy/blob/master/README.md に記載の Python プログラムを実行してみる
エラーメッセージが出なければOKとする
import pclpy
from pclpy import pcl
point_cloud = pclpy.read("/usr/local/pclpy/tests/test_data/street.las", "PointXYZRGBA")
mls = pcl.surface.MovingLeastSquaresOMP.PointXYZRGBA_PointNormal()
tree = pcl.search.KdTree.PointXYZRGBA()
mls.setSearchRadius(0.05)
mls.setPolynomialFit(False)
mls.setNumberOfThreads(12)
mls.setInputCloud(point_cloud)
mls.setSearchMethod(tree)
mls.setComputeNormals(True)
output = pcl.PointCloud.PointNormal()
mls.process(output)