Pythonを使用して結果を計算
機能
Pythonでユーザーが作成したカスタムスクリプトを実行し、その計算結果をMech-MSRに出力します。
このステップの特徴は以下の通りです。
-
マルチスレッドをサポートします。
-
Pythonスクリプトをリアルタイムで読み込むことができます。
-
C++とPython間でデータを相互に転送する際、さまざまなデータ型の変換をサポートします。
-
Python側のログをMech-MSRにリダイレクトすることが可能です。
入力と出力
-
入力:入力ポート パラメータに設定されたデータ型によって決定されます。
-
出力:出力ポート パラメータに設定されたデータ型によって決定されます。
前後のステップの入力/出力ポートのデータ型に応じて、このステップの入力/出力ポートのデータ型も決定できます。 |
インストールと使用
インストール方法
Mech-MSRにはPython 3.9.13と、NumPyおよびOpenCVという2つの一般的なPythonライブラリが内蔵されています。「Pythonを使用して結果を計算」ステップを実行する際は、ソフトウェア内蔵のPython環境が使用されます。使用中にPythonライブラリが不足している場合は、必要なライブラリをMech-MSRに内蔵されたPython環境にインストールする必要があります。インストール方法は以下の通りです。
-
Mech-MSRのPythonインストールディレクトリに移動します。例えば:C:\App\Mech-MSR-2.0.0\python。
-
現在のディレクトリ内でShiftキーを押しながら右クリックし、右クリックメニューから PowerShellウィンドウをここで開く を選択します。
-
Windows PowerShellウィンドウで、
python -m pip install xxx
(xxx
はインストールするPythonライブラリの名前)コマンドを実行し、対応するPythonライブラリをダウンロードしてインストールします。
使用方法
Pythonスクリプトの準備が整ったら、このステップを以下の手順で使用します。各パラメータの詳細については、パラメータ説明 をご参照ください。
-
入出力ポートのデータ型を設定します。前後のステップの入出力ポートのデータ型や実際のニーズに応じて、入力ポート と 出力ポート のデータ型を設定します。
-
Pythonスクリプトのパスを設定します。スクリプトファイルのパス を指定し、読み込む必要があるスクリプトを選択します。
-
呼び出される関数の名前を設定します。スクリプトパスを選択すると、ステップは自動的にそのスクリプト内の関数名を取得します。その後、呼び出される関数名 のドロップダウンリストで必要な関数名を選択します。
-
ステップを実行します。
Pythonスクリプトを作成する際、データを処理する関数をそのまま記述すればよく、Mech-MSRのデータを取得するためのコードは記述する必要はありません。 |
使用上の注意事項
Pythonスクリプトを作成し、このステップで実行する際の注意事項は以下の通りです。
サードパーティライブラリの使用を推奨
Mech-MSRでPythonスクリプトを実行する際、通常のPython環境とは異なる動作をする可能性があります。一部のPythonライブラリがインストールできなかったり、インストール後に使用できなかったりすることがあるため、サードパーティライブラリの使用を推奨します。
NumPyライブラリの使用に注意
Pythonがサポートするデータ型の中で、比較的複雑な型はNumPyライブラリを中間フォーマットとして使用します。あるパラメータがNumPyの配列型である場合、NumPyをインポートしていないとエラーが発生します。そのため、スクリプトの最初に import numpy を追加する必要があります。
スクリプト作成時にデータ型の次元に注意
Pythonスクリプトを作成する際には、ステップポートの基本データ型の次元にも注意が必要です。
-
デフォルトのデータ次元が0: Image、Cloud(XYZ)、Cloud(XYZ-Normal)、Surface、Profile。
-
デフォルトのデータ次元が1: NumberList、BoolList、IndexList、StringList、Shape3DList。
-
デフォルトのデータ次元が2: PoseList、Pose2DList、Size3DList。
データ型の後に「[]」を追加すると、データの次元を増やすことができます。 例えば、NumberListは1次元の数値リストを示し、NumberList[]は2次元の数値リストを示します。 |
事前定義モジュールのインポート
このステップの入力または出力ポートタイプがSurface、Profile、またはShape3DListの場合、事前定義モジュールをインポートする必要があります。 |
Mech-MSRソフトウェア内でPythonスクリプトを使用してこれらのデータタイプ(Surface、Profile、Shape3DList)を処理する際には、対応する事前定義モジュールをインポートする必要があります。これにより、Pythonがこれらのデータ構造を認識し、操作できるようになります。モジュールをインポートしない場合、スクリプトはこれらのクラスを認識できず、実行時にエラーが発生します。
これらの事前定義モジュールは、ソフトウェアのインストールディレクトリ(例:C:\Mech-MSR-2.0.0\python\Lib\py_module)内にあります。事前定義モジュールは、以下の3種類のデータを処理するために使用されます。
-
サーフェスデータ
-
説明:対象物表面のスキャンデータを表し、通常は深度画像と強度画像を含みます。
-
ポートタイプ:Surface
-
インポートするPythonスクリプトのモジュール:
mmind_surface
使用説明
from mmind_surface import * # must be imported def test_surface(surface): print(surface) # is a class print(type(surface)) # is a class print(surface.depth) # is numpy.ndarray (n, m) print(surface.intensity) # is numpy.ndarray (n, m) print(surface.xResolution) print(surface.yResolution) print(surface.xOffset) print(surface.yOffset) print(surface.zOffset) return surface def test_surfaces(surfaces): print(type(surfaces)) # is list for surface in surfaces: print(type(surface)) # is class print(surface.depth) print(surface.intensity) print(surface.xResolution) print(surface.yResolution) print(surface.xOffset) print(surface.yOffset) print(surface.zOffset) return surfaces
python
-
-
プロファイルデータ
-
説明:プロファイルデータを表します。プロファイルは点で構成され、各点のX、Z値を含み、物体の断面高さの変化を反映します。
-
ポートタイプ:Profile
-
インポートするPythonスクリプトのモジュール:
mmind_profile
使用説明
from mmind_profile import * # must be imported def test_surface(profile): print(profile) # is a class print(type(profile)) # is a class print(profile.points) # is numpy.ndarray (n,2) print(profile.yResolution) print(profile.xOffset) return profile def test_surfaces(profiles): print(type(profiles)) # is list for profile in profiles: print(type(profile)) # is a class print(profile.points) # is numpy.ndarray (n,2) print(profile.yResolution) print(profile.xOffset) return profiles
python
-
-
幾何学的特徴
-
説明:点、直線、平面、円などの幾何学的特徴を表します。
-
ポートタイプ:Shape3DList
-
インポートするPythonスクリプトのモジュール:
mmind_feature
とmmind_util
使用説明
from mmind_util import * # must be imported from mmind_feature import * # must be imported def test_shape3dList(point_list, line_list, plane_list, circle_list): point = point_list[0] # class PyPoint3D line = line_list[0] # class PyLine3D plane = plane_list[0] # class PyPlane3D circle = circle_list[0] # class PyCircle3D p_x = point.x # number p_y = point.y p_z = point.z l_p = line.point # class PyVector3D l_d = line.direction # class PyVector3D print(l_d.x, l_d.y, l_d.z) p_a = plane.a # number p_b = plane.b p_c = plane.c p_d = plane.d c_p = circle.point # class PyVector3D c_r = circle.radius # number c_n = circle.normal # class PyVector3D def create_shape3dList(): point1 = PyPoint3D(1.0, 2.0, 3.0) point2 = PyPoint3D() point2.x = 4.0 # must be a number point2.y = 5.0 point2.z = 6.0 line1 = PyLine3D(PyVector3D(1.0, 1.0, 1.0), PyVector3D(1.0, 1.0, 0.0)) line2 = PyLine3D() line2.point = PyVector3D(1.1, 1.2, 1.3) # can be PyVector3D or PyPoint3D line2.direction.x = 0.0 # must be a number line2.direction.y = 1.0 line2.direction.z = 1.0 plane1 = PyPlane3D(2.0, 0.0, 0.0, 10.0) plane2 = PyPlane3D() plane2.a = 0.0056 # must be a number plane2.b = 0.001 plane2.c = 0.0023 plane2.d = -3.22 circle1 = PyCircle3D(point1, 10.0, PyVector3D(0.0, 0.0, 1.0)) circle2 = PyCircle3D() circle2.point = point2 # can be PyVector3D or PyPoint3D circle2.radius = 100.0 # must be a number circle2.normal = PyVector3D(0.0, 1.0, 0.0) # must be unit vector return [point1, point2], [line1, line2], [plane1, plane2], [circle1, circle2]
python
-
パラメータ説明
- 入力ポート
-
パラメータ説明:このパラメータは、ステップの入力ポートのデータ型を設定するために使用されます。入力データ型は、関数呼び出し時に対応する順序でパラメータとして渡されます。
初期値:空
- 出力ポート
-
パラメータ説明:このパラメータは、ステップの出力ポートのデータ型を設定するために使用されます。関数が返すデータは、対応する順序でステップに返され、それぞれのデータ型に従って解析されます。
初期値:空
現在対応しているデータ型は以下の通りです。
ステップのポートタイプ | Pythonで使用されるデータ型 | 入力データの例 |
---|---|---|
PoseList |
リスト |
[[10, 20, 30, 0.951, 0.255, 0.168, 0.045]], [10, 20, 30, 0.951, 0.255, 0.168, 0.045]]
|
Pose2DList |
リスト |
[[0, 0, 0]], [2, 0, 120]]
|
NumberList |
リスト |
[1.1, 2, 999.9, -22] |
StringList |
文字列 |
['string_1', 'string_2', 'string_3'] |
Image |
8ビット符号なし整数 / 64ビット浮動小数点数 |
画像データ |
Cloud(XYZ) |
配列 |
点群 |
Cloud(XYZ-Normal) |
配列 |
法線ベクトル付きの点群 |
Cloud(XYZ-RGB) |
配列 |
カラー点群 |
Size3DList |
64ビット浮動小数点数 |
[[2.5, 5, 0.001], [6, 5, 0.02]] 最初の2つの数値は幅と高さ、3番目の数値はピクセルの長さ |
IndexList |
整数 |
[45, 10, 90] |
BoolList |
ブール値 |
[True, False, True] |
Surface |
カスタムクラス |
サービスデータ(通常は深度画像と強度画像を含む) |
Profile |
カスタムクラス |
プロファイルデータ |
Shape3DList |
リスト |
[PyPoint3D(), PyPoint3D(), …]
|
- スクリプトパス
-
パラメータ説明:このパラメータは、読み込む必要があるスクリプトのファイルパスを選択するために使用されます。
- 呼び出される関数名
-
パラメータ説明:このパラメータは、呼び出されるスクリプト関数の名前を設定するために使用されます。
トラブルシューティング
共通のエラー情報と解決方法については、エラーコード一覧 をご参照ください。