Python을 통해 결과를 계산하기

현재 버전 (2.1.0)에 대한 매뉴얼을 보고 계십니다. 다른 버전에 액세스하려면 페이지 오른쪽 상단 모서리에 있는 '버전 전환' 버튼을 클릭하세요.

■ 최신 버전의 소프트웨어를 사용하려면 Mech-Mind 다운로드 센터를 방문하여 다운로드하세요.

■ 현재 사용하고 있는 제품의 버전이 확실하지 않은 경우에는 언제든지 당사 기술 지원팀에 문의하시기 바랍니다.

기능

이 스텝에서는 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
  • 프로파일 데이터

    • 설명: 프로파일 데이터를 나타냅니다. 프로파일은 단면의 높이 변화를 반영하는 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
  • 기하학적 특징

    • 설명: 점, 선, 평면, 원과 같은 기하학적 특징을 나타냅니다.

    • 포트 유형: 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에서 사용되는 데이터 유형 입력 데이터 예시

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 비트 무부호 정수(1채널 또는 3채널)

16 비트 무부호 정수(1채널 또는 3채널)

32 비트 부동 소수점(1채널)

1채널만 기진 그레이스케일 이미지를 예로, 입력된 데이터는 다음과 같습니다.

\[[ 78 205 67 120 207], [136 201 46 187 166], [224 10 43 179 166], [253 245 29 1 122], [128 99 156 241 252]]

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는 모두 점, 선, 평면, 원의 기하학적 특징을 각각 나타내는 사용자 정의 클래스입니다.

스크립트 파일 경로

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

호출되는 함수 이름

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

오류 분석

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

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

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

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

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