Python을 통해 결과를 계산하기

기능

이 스텝에서는 Python을 통해 사용자 정의 스크립트를 실행하고 계산 결과를 Mech-MSR로 출력할 수 있습니다.

이 스텝의 특징은 다음과 같습니다.

  • 멀티스레드 사용을 지원합니다.

  • Python 스크립트는 실시간으로 로드될 수 있습니다.

  • C++와 Python 간에 데이터를 전송할 때 여러 데이터 유형의 변환을 지원합니다.

  • Python 측에서 Mech-MSR로 로그 리디렉션을 지원합니다.

응용 시나리오

사용자 정의 계산이 필요한 경우 사용자는 이 스텝을 사용하여 작성된 Python 스크립트를 실행하여 측정 솔루션을 단순화할 수 있습니다.

입력 및 출력

  • 입력: 입력 포트 파라미터에 입력된 데이터 유형에 따라 결정됩니다.

  • 출력: 출력 포트 파라미터에 입력된 데이터 유형에 따라 결정됩니다.

이번 스텝의 입출력 포트의 데이터 유형은 이전 스텝과 이후 스텝의 입출력 포트의 데이터 유형에 따라 결정될 수 있습니다.

설치 및 사용

설치 방법

Mech-MSR에는 Python 3.9.13과 일반적으로 사용되는 두 가지 Python 라이브러리인 NumPy 및 OpenCV가 내장되어 있습니다. 'Python을 통해 결과를 계산하기' 스텝이 실행되는 동안 내장된 Python 환경을 사용합니다. 사용 중에 누락된 Python 라이브러리가 있는 경우Mech-MSR의 내장 Python 환경에 라이브러리를 설치해야 합니다. 설치 방법은 다음과 같습니다.

  1. Mech-MSR의 Python이 설치된 디렉터리로 이동합니다. 예를 들어 C:\App\Mech-MSR-2.1.0 \python 입니다.

  2. 현재 디렉터리에서 Shift키를 누른 채 마우스 오른쪽 버튼을 클릭한 다음 메뉴에서 여기에 PowerShell 창 열기를 클릭합니다.

  3. Windows PowerShell 창에서 python -m pip install xxx 명령(xxx는 Python 라이브러리의 이름)을 실행하여 해당 Python 라이브러리를 다운로드하고 설치합니다.

    install python library

사용 방법

Python 스크립트를 준비한 후 이 스텝을 다음과 같이 사용하십시오(각 파라미터에 대한 설명은 파라미터 설명 부분 참조).

  1. 입력/출력 포트의 데이터 유형을 설정합니다. 이전 또는 이후 스텝의 입력/출력 포트의 데이터 유형에 따라 입력 포트출력 포트의 데이터 유형을 입력합니다.

  2. Python 스크립트 경로를 설정합니다. 스크립트 파일 경로에서 로드할 스크립트의 경로를 선택합니다.

  3. 호출할 함수의 이름을 설정합니다. 스크립트 파일 경로가 지정되면 이 스텝에서는 스크립트의 함수 이름을 자동으로 검색하고 호출할 함수 이름의 드롭다운 목록에서 호출할 함수 이름을 선택합니다.

  4. 스텝을 실행합니다.

Python 스크립트를 작성할 때 데이터를 얻기 위해 스크립트에 명령문을 작성하지 않고도 Mech-MSR 데이터를 처리하는 함수를 직접 작성할 수 있습니다.

사용 시 주의사항

Python 스크립트를 작성하고 이 스텝에서 스크립트를 실행할 때 다음 문제에 주의하십시오.

타사 라이브러리 사용 권장

Mech-MSR에서 Python 스크립트를 실행하는 것은 Python 환경에서 스크립트를 직접 실행하는 것과 다르기 때문에 일부 Python 라이브러리가 성공적으로 설치되지 않거나 설치 후 제대로 작동하지 않을 수 있으므로 타사 라이브러리를 사용하는 것이 좋습니다.

NumPy 라이브러리 사용

NumPy 라이브러리는 일부 복잡한 형식의 데이터를 지원하는 데 사용됩니다. 파라미터 유형이 NumPy인데 NumPy를 가져오지 않은 경우 오류가 발생할 수 있습니다. 따라서 스크립트 시작 부분에 import numpy를 추가해야 합니다.

스크립트 작성 시 데이터 차원 주의

Python 스크립트 작성 시 스텝의 각 포트에 해당하는 데이터의 차원을 참고하시기 바랍니다.

  • 기본 데이터 차원이 0: Image, Cloud(XYZ), Cloud(XYZ-Normal), Surface, Profile

  • 기본 데이터 차원이 1: Image, Cloud(XYZ), Cloud(XYZ-Normal), Surface, Profile

  • 기본 데이터 차원이 2: PoseList, Pose2DList, Size3DList

데이터 차원을 추가하려면 데이터 유형 뒤에 "[]"를 사용하십시오.

예를 들어 NumberList의 데이터 차원은 1이고 NumberList[]의 데이터 차원은 2입니다.

사전 정의된 모듈 가져오기

이 스텝의 입력 또는 출력 포트 유형이 Surface, Profile 또는 Shape3DList인 경우 사전 정의된 모듈을 가져와야 합니다.

Mech-MSR에서 Python 스크립트를 사용하여 Surface, Profile 또는 Shape3DList 유형의 데이터를 처리하는 경우 사전 정의된 해당 모듈을 스크립트로 가져와야 합니다. 이를 통해 Python은 스크립트를 실행할 때 데이터 구조를 인식하고 작동할 수 있습니다. 필요한 모듈을 가져오지 않으면 스크립트가 이러한 클래스를 인식하지 못하고 실행 중에 오류가 발생합니다.

소프트웨어 설치 디렉터리(예: C:\Mech-MSR-2.1.0\python\Lib\py_module)에서 이러한 사전 정의된 모듈을 찾을 수 있습니다. 이러한 모듈은 다음 세 가지 유형의 데이터를 처리하는 데 사용할 수 있습니다.

  • 표면 데이터

    • 설명: 일반적으로 뎁스 맵과 광도 이미지를 포함하여 물체 표면의 스캔 데이터를 나타냅니다.

    • 포트 유형: 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_featuremmind_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]]
(각 배열에서 처음 두 값은 각각 좌표의 X, Y 값이고 세 번째 값은 각도)

NumberList

리스트

[1.1, 2, 999.9, -22]

StringList

문자열

['string_1', 'string_2', 'string_3']

Image

8비트 부호 없는 정수/64비트 부동 소수점 숫자

이미지 데이터

Cloud(XYZ)

배열(Array)

[[0.1, 0.2, 0.3], [0.2, 0.3, 0.4], [0.3, 0.4, 0.5], [0.4, 0.5, 0.6], [0.5, 0.6, 0.7]]

(각 배열에서 세 숫자는 각각 점의 X, Y, Z 좌표를 나타냅니다.)

Cloud(XYZ-Normal)

배열(Array)

[[0.1, 0.2, 0.3, 0.4, 0.5, 0.6], [0.2, 0.3, 0.4, 0.5, 0.6, 0.7], [0.3, 0.4, 0.5, 0.6, 0.7, 0.8], [0.4, 0.5, 0.6, 0.7, 0.8, 0.9], [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]]

(각 배열에서 처음 세 값은 점의 X, Y, Z 좌표이고, 마지막 세 값은 각각 법선 벡터의 X, Y, Z 구성 요소입니다.)

Cloud(XYZ-RGB)

배열(Array)

[[0.1, 0.2, 0.3, 52, 64, 13], [0.2, 0.3, 0.4, 45, 21, 72], [0.3, 0.4, 0.5, 17, 69, 13], [0.4, 0.5, 0.6, 12, 8, 37], [0.5, 0.6, 0.7, 25, 58, 46]]

(각 배열에서 처음 세 값은 점의 X, Y, Z 좌표이고, 마지막 세 값은 각각 점의 빨간색, 녹색, 파란색 구성 요소입니다.)

Size3DList

64비트 부동 소수점 숫자

[[2.5, 5, 0.001], [6, 5, 0.02]]

(각 배열에서 처음 두 값은 너비와 높이이고 세 번째 값은 각 픽셀의 길이)

IndexList

정수

[45, 10, 90]

BoolList

부울

[True, False, True]

Surface

사용자 정의

표면 데이터 (뎁스 맵 및 광도 이미지 포함)

Profile

사용자 정의

프로파일 데이터

Shape3DList

리스트

[PyPoint3D(), PyPoint3D(), …​]
[PyLine3D(), PyLine3D(), …​]
[PyPlane3D(), PyPlane3D(), …​]
[PyCircle3D(), PyCircle3D(), …​]
여기서 PyPoint3D, PyLine3D, PyPlane3D 및 PyCircle3D는 모두 점, 선, 평면, 원의 기하학적 특징을 각각 나타내는 사용자 정의 클래스입니다.

스크립트 파일 경로

파라미터 설명: 이 파라미터는 로드할 스크립트의 파일 경로를 선택하는 데 사용됩니다.

호출되는 함수 이름

파라미터 설명: 이 파라미터는 호출할 스크립트 함수의 이름을 설정하는 데 사용됩니다.

오류 분석

일반적인 오류 메시지와 해결 방법은 오류 코드 리스트를 참조하세요.

이 페이지가 도움이 되었습니까?

다음 방법을 통해 피드백을 보내주실 수 있습니다:

저희는 귀하의 개인정보를 소중히 다룹니다.

당사 웹사이트는 최상의 사용자 경험을 제공하기 위해 쿠키를 사용하고 있습니다. "모두 수락"을 클릭하시면 쿠키 사용에 동의하시는 것이며, "모두 거부"를 클릭하시면 이 웹사이트 방문 시 귀하의 정보가 추적되거나 기억되지 않도록 단일 쿠키만 사용됩니다.