[Python][Python/FLIR] PySpin 카메라 제어(1. 온도 범위 변경) #8

조회수 231


안녕하세요 시원한 9월입니다!😊

이번 목차에서는 FLIR 열화상 카메라를 활용해 Python 기반 Spinnaker SDK(PySpin)를 제어하는 방법을 소개합니다.

특히, 실무에서 많이 사용하는 온도값 측정 범위 변경 기능을 중점적으로 다뤄보겠습니다.


본 강좌는 FLIR의 공식 예제를 기반으로 하며, 실습에는 FLIR A50 카메라를 사용하였습니다.

Python 환경에서 직접 코드를 실행해 보면서 SDK 활용법을 익히실 수 있도록 단계별로 정리했으니

FLIR 카메라를 연구·개발·산업 현장에서 사용하시는 분들에게 큰 도움이 될 것입니다.



전 강의 보러가기

🔽🔽🔽

https://blog.naver.com/mdstech_flir/223892971852





* 강좌 목차


[Python/FLIR] Spinnaker SDK, PySpin 설치 가이드

· FLIR Spinnaker SDK 설치 및 실행(Windows, Ubuntu)


[Python/FLIR] PySpin Node 사용법

· 노드의 개념, 타입, 사용법 설명, spinview에서 노드 정보 확인


[Python/FLIR] PySpin 카메라 스트리밍 기본

· Pyspin 사용하여 카메라 Connect 및 Grab 해보기


[Python/FLIR] PySpin카메라에서 온도값 가져오기(1)

· Nodemap으로 pixelformat 변경, IRFormat 변경하기


[Python/FLIR] PySpin 카메라에서 온도값 가져오기(2)

· TemperatureLinear(10K, 100K)으로 온도값 가져오기


[Python/FLIR] PySpin 카메라에서 온도값 가져오기(3)

· Radiometric으로 온도값 가져오기


[Python/FLIR] PySpin 온도 데이터 팔레트 적용

· 온도값 팔레트 이미지 만들어보기


[Python/FLIR] PySpin 카메라 제어(1)

· QueryCase를 사용한 측정 온도 범위 변경 예제


[Python/FLIR] PySpin 카메라 제어(2)

· FPS변경 및 NUC Excute 예제




1. Spinnaker 온도 범위 변경 확인


1-1. Spinview 참고


Spinview의 feature / FLIR Camera Control에 온도값 변경과 관련된 옵션들이 있습니다.




옵션 변경과 관련된 Parameter로는 CurrentCase, QueryCase, QueryCaseLowLimit, QueryCaseHighLimit,

QueryEnable이 있습니다.

 



1-2 Parameter 설명

각 파라미터들은 사용 순서와 동일하게 설명하겠습니다.


1)    QueryCase

QueryCase는 유저가 사용하려는 값에 대하여 질문하는 것이라고 설명할 수 있습니다.

쿼리케이스에 바꾸고 싶은 값을 넣어 사용할 수 있는지 노드를 통해 질문합니다.

예를 들어 A50 카메라에 온도 범위 설정 2를 선택할 수 있는지 묻는 것과 같습니다.


2)    QueryCaseEnable

QueryCase로 바꾸고 싶은 값을 넣으면 QueryCaseEnable로 값이 유효한지 확인할 수 있습니다.

QueryCase로 질문을 하면 QueryCaseEnable이 변화하여 True, False값을 가지게 됩니다.

True일 때는 카메라에서 사용할 수 있는 값이며, False일 때는 사용할 수 없는 값입니다.


3)    QueryCaseLowLimit , QueryCaseHighLimit

QueryCaseEnable이 True로 반환되었다면 질문한 값을 사용할 수 있습니다.

QueryCaseLowLimit과 QueryCaseHighLimit은 해당 range가 측정할 수 있는 최솟값과 최댓값을 반환합니다.

온도의 척도는 kelvin값으로 받습니다.



* Spinview에서는 쿼리케이스를 바꾸고 파라미터를 더블클릭하여 확인합니다.

QueryCase가 1일 때,  LowLimit의 값 확인




ex) A50 QueryCase 0 -> QueryCaseLowLimit :  253.15, QueryCaseHighLimit : 448.15

        QueryCase 0 -> QueryCaseLowLimit :  448.15, QueryCaseHighLimit : 1273.15



4)    CurrentCase

CurrentCase는 최종적으로 온도를 적용하는 Parameter입니다.

CurrentCase를 변경하게 되면 최종적으로 원하는 레인지로 온도를 감지할 수 있습니다.




1-3 확인 시퀀스


1) QueryCase로 값을 전달한다.

2) QueryEnable로 사용할 수 있는 값인지 확인한다.

3) QueryEnable이 True라면 해당 값의 LowLimit과 HighLimit을 확인한다.

4) 최종적인 값을 CurrentCase에 적용한다.



2. 쿼리케이스 변경 파이썬 코드

쿼리케이스 변경 시퀀스를 파이썬 코드로 구현합니다.

자세한 내용과 실습은 하단 실습 파일을 확인 부탁드립니다.


QueryCase 변경 함수

2-1 check_querycase 함수

QueryCase를 변경하여 QueryCaseEnable이 True인지 확인하고,

QueryCaseEnable, QueryCaseHighLimit , QueryCaseLowLimit을 리턴합니다.

 


함수 예제



def check_querycase(self, query_value):    print(f"query_value = {query_value}")    """    Check QueryCaseEnable value and set QueryCase to check QueryCaseLow and QueryCaseHigh values.        :param cam: Camera object    """    try:        # Check QueryCaseEnable value         # Set QueryCase to a specific value (example: 1)        node_query_case = PySpin.CIntegerPtr(self.nodemap.GetNode("QueryCase")) #QueryCase노드 가져옴        if PySpin.IsAvailable(node_query_case) and PySpin.IsWritable(node_query_case): # QueryCase 노드 사용 가능 확인            node_query_case.SetValue(query_value)            print("QueryCase set to 1")        else:            print("QueryCase node is not available or writable.")         # Check QueryCaseLow value after setting QueryCase // 기존 CurrentCase의 LowLimit 체크        query_case_low = None        node_query_case_low = PySpin.CFloatPtr(self.nodemap.GetNode("QueryCaseLowLimit"))        if PySpin.IsAvailable(node_query_case_low) and PySpin.IsReadable(node_query_case_low):            query_case_low = node_query_case_low.GetValue()            # print(f"QueryCaseLow: {query_case_low}")        else:            print("QueryCaseLow node is not available or readable.")          # Check QueryCaseHigh value after setting QueryCase // 기존 CurrentCase의 HighLimit 체크        query_case_high = None        node_query_case_high = PySpin.CFloatPtr(self.nodemap.GetNode("QueryCaseHighLimit"))        if PySpin.IsAvailable(node_query_case_high) and PySpin.IsReadable(node_query_case_high):            query_case_high = node_query_case_high.GetValue()            # print(f"QueryCaseHigh: {query_case_high}")        else:            print("QueryCaseHigh node is not available or readable.")        query_case_enable = None        node_query_case_enable = PySpin.CBooleanPtr(self.nodemap.GetNode("QueryCaseEnabled")) # QueryCaseEnabled 체크        if PySpin.IsAvailable(node_query_case_enable) and PySpin.IsReadable(node_query_case_enable):            query_case_enable = node_query_case_enable.GetValue()            print(f"QueryCaseEnable: {query_case_enable}")        else:            print("QueryCaseEnable node is not available or readable.")                    return query_case_enable, query_case_high, query_case_low     except PySpin.SpinnakerException as ex:                print(f"Error: {ex}")




2-1 CurrentCase 변경 함수


CurrentCase값을 변경하여 카메라에 적용합니다.



함수 예제



def set_temperature_range(self, query_value):    # check_querycase값 함수 값 반환    query_case_enable, query_case_high, query_case_low = self.check_querycase(query_value)     if query_case_enable == True: # True일 때 high, low 값 저장 및 CurrentCase변경        self.query_case_high = query_case_high        self.query_case_low = query_case_low        current_case_node = PySpin.CIntegerPtr(self.nodemap.GetNode("CurrentCase"))        if PySpin.IsAvailable(current_case_node) and PySpin.IsWritable(current_case_node):            current_case_node.SetValue(query_value)            print(f"CurrentCase = {query_value}")        else:            print("QueryCase value node is not available or writable.")    else:        print("QueryCase value is invalid")




더 자세한 내용은 “온도범위 변경 실습.ipynd” 파일을 참고 부탁 드립니다.


        📁파일 다운로드 바로가기 클릭하기!



이번 강좌에서는 Spinnaker SDK을 통해 카메라 온도값 범위 변경에 대한 내용과

실제 파이썬 코드로 실습해보는 시간을 가져보았습니다.

다음 강좌에서는 카메라 FPS와 NUC설정에 관한 실습을 진행하겠습니다.


감사합니다☺️




Contact us.

블로그 바로가기
www.blog.naver.com/mdstec_flir

블로그 방문하기

MDS 교육 수강하기
상반기/ 하반기 진행시 오픈 예정

수강신청 바로가기


@MDS Tech Inc. All Rights Reserved.

Youtube↖︎

Instagram↖︎

Facebook↖︎

주소 : 13493 경기도 성남시 분당구 대왕판교로 644번길 49 DTC타워 9층TEL: 031-627-3000 FAX:031-627-3008

사업자등록번호 : 117-81-22859대표자 : 이창열, 이정승


©MDS Tech Inc. All Rights Reserved.

주소 : 13493 경기도 성남시 분당구 대왕판교로 644번길 49 DTC타워 9층

TEL: 031-627-3000 FAX:031-627-3008

사업자등록번호 : 117-81-22859대표자 : 이창열, 이정승

©MDS Tech Inc. All Rights Reserved.