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

조회수 280

안녕하세요. 따뜻한 봄날, 꽃들이 피어나고 기온도 점점 올라가고 있습니다.

이렇게 날씨가 변하는 걸 보니 온도라는 것이 우리 일상에서 얼마나 중요한 요소인지 새삼 느껴지네요.


오늘은 Spinnaker SDK를 활용해 FLIR A Series 카메라에서 온도 데이터를 가져오는 방법을 알아보겠습니다.

특히 PySpin을 사용해 Temperature Linear 모드를 설정하고 온도를 섭씨로 변환하며 

이를 이미지 형태로 표현하는 과정까지 살펴볼 예정입니다.

함께 배워보면서 더욱 유용한 데이터 활용법을 익혀보아요!



* 강좌 목차


[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 예제


Python으로 Spinnaker SDK를 활용해 FLIR A Series 카메라를 제어하는 방법을 배워보세요.

본 강좌에서는 FLIR의 공식 예제를 기반으로 하여  PySpin을 사용한 Temperature Linear(100K, 10K)

모드 설정, 온도값 확인 및 섭씨 변환, 그리고 데이터를 이미지로 변환하는 과정을 다룹니다.

특히 Spinnaker SDK를 활용한 온도 데이터 처리에 관심 있는 분들에게 유용한 정보가 될 것입니다.



1. Temperature Linear 모드 설정


raw_data를 온도 데이터로 변환하여 ROI에 대한 값과 Max, Min값 등 유의미한 값을 확인할 수 있습니다.


1-1. Pixel Format을 16bit로 설정합니다.


Pixel Format은 스트리밍 하면 변경할 수 없습니다.

PySpin카메라에서 온도값 가져오기(1) 강을 참고하여 Mono16 비트로 설정합니다.



if node_pixel_format.GetAccessMode() == PySpin.RW:    # Mono8 모드의 노드 가져옴    node_pixel_format_mono16 = PySpin.CEnumEntryPtr(node_pixel_format.GetEntryByName('Mono16'))    # Mono8 value Get    pixel_format_mono16 = node_pixel_format_mono16.GetValue()    # node_pixel_format 노드에 Mono8 적용    node_pixel_format.SetIntValue(pixel_format_mono16)



1-2. IR Format을 TemperatureLinear으로 맞추어 줍니다.


IR Format을 변경하게 되면, 이미지를 grab(GetNextImage)하는 raw_data가 선택한 모드에 따라 들어오게 됩니다.

IR Format은 스트리밍 중에도 변경이 가능합니다.

하지만, 스트리밍 중 모드가 변경되면 raw_data 후처리를 변경한 모드에 따라 변경해주어야 합니다.

PySpin카메라에서 온도값 가져오기(1) 강을 참고하여 IRFormat node를 TemperatureLinear 모드로 설정합니다.





1) TemperatureLinear 10K


if node_IRFormat.GetAccessMode() == PySpin.RW:    node_temp_linear_low = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('TemperatureLinear10K'))    node_temp_low = node_temp_linear_low.GetValue()    node_IRFormat.SetIntValue(node_temp_low) else:    print("node_IRFormat is not available")




2) TemperatureLinear 100K


if node_IRFormat.GetAccessMode() == PySpin.RW:    node_temp_linear_low = PySpin.CEnumEntryPtr(node_IRFormat.GetEntryByName('TemperatureLinear100K'))    node_temp_low = node_temp_linear_low.GetValue()    node_IRFormat.SetIntValue(node_temp_low) else:    print("node_IRFormat is not available")




2. 온도값 확인 및 섭씨 변환


TemperatureLinear 모드 변경 후, 들어오는 raw data 해상도의 각 픽셀은kelvin 단위의 온도값 입니다.

10K와 100K는 각 픽셀에 맞게 일정한 값을 곱해주고, kelvin을 Celsius값으로 변경이 필요합니다.



1) TemperatureLinear 10K

TemperatureLinear 10K는 측정된 값을 섭씨 온도로 변환할 때, 기존 데이터에 0.01을 곱한 후 -273.15를 빼주는 방식으로 처리됩니다.




  • TemperatureLinear 10K raw_data


  • TemperatureLinear 10K 섭씨 변환 공식
    Celsius_data = (image_data * 0.01) - 273.15


2) TemperatureLinear 100K

TemperatureLinear 100K는 측정된 값을 섭씨 온도로 변환할 때, 기존 데이터에 0.1을 곱한 후 -273.15를 빼주는 방식으로 처리됩니다.



  • TemperatureLinear 100K raw_data



  • TemperatureLinear 100K 섭씨 변환 공식

Celsius_data = (image_data * 0.1) - 273.15


위의 과정이 끝난 후, 모든 픽셀 데이터를 Celsius data로 얻을 수 있습니다.


  • 최종 Celsius 데이터




3. 온도값 이미지 시각화


raw_data로부터 이미지를 시각화하여 상대적인 온도 분포를 눈으로 확인할 수 있습니다.


Temperature Linear모드로 들어오는 rawdata는 16bit의 0 ~ 66535 사이의 값입니다.

이미지 표현 범위인 0~255로 변경하기 위하여 정규화를 진행합니다.


1) 정규화를 하기 위하여 raw_data를 섭씨로 바꾼 데이터의 최댓값과 최솟값을 구해줍니다.

max 값 : max_temperature = np.max(Celsius_data)

min 값 : min_temperature = np.min(Celsius_data)

2) Celsius_data와 max값, min값을 사용해 정규화를 진행합니다.(정규화 시 cv2.normalize 함수를 사용해도 무관합니다.)

# 온도 데이터를 0 ~ 255 범위로 정규화

# 정규화는 0~1 범위로 매핑되고, 255를 곱해서 표현 범위(0~255)로 확장

temp_to_img = 255 * (Celsius_int - min_temperature) / (max_temperature - min_temperature)

# float -> int8 변환

output_image = temp_to_img.astype(np.uint8)

# 단일 채널(1채널) -> 3채널로 변경

output_image = cv2.cvtColor(output_image, cv2.COLOR_GRAY2BGR)



  • 최종 ouput_image


이렇게 해서 Spinnaker SDK를 활용해 FLIR A Series 카메라에서 온도 데이터를 가져오고

이를 섭씨로 변환한 후 이미지로 시각화하는 과정까지 살펴보았습니다.


Temperature Linear 모드를 적절히 설정하면 보다 정밀한 온도 측정이 가능하며

데이터를 이미지 형태로 변환하면 시각적으로 쉽게 분석할 수 있습니다.


다음 강좌에서는 더욱 효율적인 데이터 활용법과 추가적인 기능을 다룰 예정이니 많은 관심 부탁드립니다.

궁금한 점이 있거나 더 알고 싶은 내용이 있다면 아래 문의 바로가기로 남겨주세요!


감사합니다😊






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.