fir — 열 센서 드라이버 (fir == far infrared, 원적외선)

fir 모듈은 I2C를 통해 OpenMV Cam에 연결된 원적외선(FIR) 서모파일 배열을 구동합니다 – 8x8, 16x4, 16x12, 32x24 센서가 지원됩니다(이 페이지 하단의 상수 참조). 각 프레임은 픽셀별 온도를 섭씨 단위로 반환하며, 이는 snapshot()을 사용하여 독립적인 열화상 이미지로 렌더링하거나, draw_ir()을 사용하여 CSI 센서의 가시광선 프레임 위에 합성할 수 있습니다. 보통 image.PALETTE_RAINBOW이나 image.PALETTE_IRONBOW 같은 색상 팔레트를 거쳐 표시됩니다.

사용 예시:

import csi
import fir

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

fir.init()

while True:
    img = csi0.snapshot()
    ta, ir, to_min, to_max = fir.read_ir()
    fir.draw_ir(img, ir)
    print("====================")
    print("Ambient temperature: %0.2f" % ta)
    print("Min temperature seen: %0.2f" % to_min)
    print("Max temperature seen: %0.2f" % to_max)

함수

fir.init(type: int = -1, refresh: int | None = None, resolution: int | None = None) None

연결된 열 센서를 초기화합니다.

type은 열 센서의 종류를 나타냅니다:

기본적으로 type-1이며, 이 경우 fir.init()이 I2C 주소를 기반으로 연결된 열 센서를 자동으로 스캔하여 초기화합니다. fir.FIR_MLX90640fir.FIR_MLX90641은 동일한 I2C 주소를 공유하므로, MLX90641을 구체적으로 초기화하려면 typefir.FIR_MLX90641을 전달해야 합니다.

refresh는 열 센서의 갱신 속도(Hz)입니다:

갱신 속도가 높을수록 정확도가 낮아지며, 그 반대도 마찬가지입니다.

resolution은 열 센서의 측정 해상도(비트)입니다:

해상도가 높을수록 최대 온도 범위가 낮아지며, 그 반대도 마찬가지입니다.

fir.deinit() None

열 센서를 해제하고 리소스를 반환합니다.

fir.width() int

사용 중인 열 센서의 가로 해상도(픽셀)를 반환합니다.

fir.height() int

사용 중인 열 센서의 세로 해상도(픽셀)를 반환합니다.

fir.type() int

사용 중인 열 센서의 종류를 반환합니다. fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641, fir.FIR_AMG8833 중 하나입니다.

fir.refresh() int

fir.init() 호출 시 설정된 현재 갱신 속도(Hz)를 반환합니다.

fir.resolution() int

fir.init() 호출 시 설정된 현재 해상도(비트)를 반환합니다.

fir.read_ta() float

주변 온도(즉, 센서 온도)를 섭씨 단위의 float으로 반환합니다.

fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]

주변 온도, width * height 크기의 평탄화된 float 온도 리스트, 관측된 최저 온도, 관측된 최고 온도를 담은 4-튜플 (ta, ir, to_min, to_max)을 반환합니다. 모든 값은 섭씨 단위입니다.

hmirror가 True이면 ir 배열을 수평으로 미러링합니다.

vflip이 True이면 ir 배열을 수직으로 뒤집습니다.

transpose가 True이면 ir 배열을 전치합니다(가로와 세로를 교환).

timeout이 -1이 아니면, 새 프레임을 기다릴 밀리초 수입니다.

fir.draw_ir(image: image.Image, ir: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None

ir 배열을 image 위에 왼쪽 상단 모서리가 (x, y)에 오도록 그립니다.

irfir.read_ir()이 반환하는 width * height 크기의 평탄화된 온도 리스트입니다.

x_scale은 렌더링된 이미지를 x 방향으로 얼마나 확대할지 제어합니다. 음수 값은 수평으로 뒤집습니다. 지정하지 않으면 종횡비를 유지하기 위해 y_scale에 맞춥니다.

y_scale은 렌더링된 이미지를 y 방향으로 얼마나 확대할지 제어합니다. 음수 값은 수직으로 뒤집습니다. 지정하지 않으면 종횡비를 유지하기 위해 x_scale에 맞춥니다.

roi는 그릴 소스 IR 데이터의 관심 영역 사각형 (x, y, w, h)입니다.

rgb_channel 은 대상 이미지가 RGB565일 때 대상 이미지에 렌더링할 RGB 채널(0=R, 1=G, 2=B)입니다. -1 (기본값)은 모든 채널을 렌더링합니다.

alpha는 소스 이미지를 대상에 얼마나 블렌딩할지 제어합니다(0-255). 255는 완전히 불투명하며, 0은 아무런 수정도 하지 않습니다.

color_palette는 색상 팔레트 열거형(예: image.PALETTE_RAINBOW, image.PALETTE_IRONBOW)이거나, 그레이스케일 소스 값에 대한 룩업 테이블로 사용되는 256픽셀 RGB565 이미지입니다.

alpha_palette는 소스 픽셀 값별로 alpha를 조절하는 알파 룩업 테이블로 사용되는 256픽셀 GRAYSCALE 이미지입니다.

hint는 다음 값들의 논리합(OR)입니다:

scaleir 배열을 스케일링하는 데 사용되는 최저/최고 온도(섭씨)를 제어하는 2-튜플 (min, max)입니다. 기본값은 실제 ir의 최솟값과 최댓값입니다.

fir.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = -1) image.Image

열 센서에서 프레임을 캡처하여 image.Image로 반환합니다. sensor.snapshot()과 유사하게 동작합니다. copy_to_fb가 False이면 새 이미지는 MicroPython 힙(용량이 제한됨)에 할당됩니다. 대신 결과를 프레임 버퍼에 쓰려면 copy_to_fb를 True로 설정하세요.

hmirror가 True이면 새 이미지를 수평으로 미러링합니다.

vflip이 True이면 새 이미지를 수직으로 뒤집습니다.

transpose가 True이면 새 이미지를 전치합니다.

x_scale은 새 이미지를 x 방향으로 얼마나 확대할지 제어합니다. 음수 값은 수평으로 뒤집습니다. 지정하지 않으면 종횡비를 유지하기 위해 y_scale에 맞춥니다.

y_scale은 새 이미지를 y 방향으로 얼마나 확대할지 제어합니다. 음수 값은 수직으로 뒤집습니다. 지정하지 않으면 종횡비를 유지하기 위해 x_scale에 맞춥니다.

roi는 그릴 소스 IR 데이터의 관심 영역 사각형 (x, y, w, h)입니다.

rgb_channel 은 렌더링할 RGB 채널(0=R, 1=G, 2=B)입니다. -1 (기본값)은 모든 채널을 렌더링합니다.

alpha는 소스 이미지를 얼마나 블렌딩할지 제어합니다(0-255). 255는 완전히 불투명합니다.

color_palette는 색상 팔레트 열거형이거나, 그레이스케일 소스 값에 대한 룩업 테이블로 사용되는 256픽셀 RGB565 이미지입니다.

alpha_palette는 알파 룩업 테이블로 사용되는 256픽셀 GRAYSCALE 이미지입니다.

hint는 다음 값들의 논리합(OR)입니다:

scale은 IR 배열을 스케일링하는 데 사용되는 최저/최고 온도(섭씨)를 제어하는 2-튜플 (min, max)입니다. 기본값은 실제 IR의 최솟값과 최댓값입니다.

pixformat은 출력 픽셀 형식을 제어합니다. image.GRAYSCALE 또는 image.RGB565여야 합니다.

copy_to_fb가 True이면 힙에 할당하는 대신 결과를 프레임 버퍼에 씁니다.

timeout이 -1이 아니면, 새 프레임을 기다릴 밀리초 수입니다.

상수

fir.FIR_SHIELD: int

OpenMV Cam Thermopile Shield (MLX90621). fir.FIR_MLX90621의 별칭입니다.

fir.FIR_MLX90621: int

MLX90621 열 센서 (16x4).

fir.FIR_MLX90640: int

MLX90640 열 센서 (32x24).

fir.FIR_MLX90641: int

MLX90641 열 센서 (16x12).

fir.FIR_AMG8833: int

AMG8833 열 센서 (8x8).