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은 열 센서의 종류를 나타냅니다:fir.FIR_SHIELD: 16x4 픽셀 (MLX90621).fir.FIR_MLX90621: 16x4 픽셀.fir.FIR_MLX90640: 32x24 픽셀.fir.FIR_MLX90641: 16x12 픽셀.fir.FIR_AMG8833: 8x8 픽셀.
기본적으로
type은-1이며, 이 경우fir.init()이 I2C 주소를 기반으로 연결된 열 센서를 자동으로 스캔하여 초기화합니다.fir.FIR_MLX90640과fir.FIR_MLX90641은 동일한 I2C 주소를 공유하므로, MLX90641을 구체적으로 초기화하려면type에fir.FIR_MLX90641을 전달해야 합니다.refresh는 열 센서의 갱신 속도(Hz)입니다:fir.FIR_MLX90621: 기본값 64 Hz. 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 Hz가 가능합니다.fir.FIR_MLX90640: 기본값 32 Hz. 1, 2, 4, 8, 16, 32, 64 Hz가 가능합니다.fir.FIR_MLX90641: 기본값 32 Hz. 1, 2, 4, 8, 16, 32, 64 Hz가 가능합니다.fir.FIR_AMG8833: 10 Hz로 고정.
갱신 속도가 높을수록 정확도가 낮아지며, 그 반대도 마찬가지입니다.
resolution은 열 센서의 측정 해상도(비트)입니다:fir.FIR_MLX90621: 기본값 18. 15, 16, 17, 18이 가능합니다.fir.FIR_MLX90640: 기본값 19. 16, 17, 18, 19가 가능합니다.fir.FIR_MLX90641: 기본값 19. 16, 17, 18, 19가 가능합니다.fir.FIR_AMG8833: 12로 고정.
해상도가 높을수록 최대 온도 범위가 낮아지며, 그 반대도 마찬가지입니다.
- 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_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)에 오도록 그립니다.ir은fir.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)입니다:image.AREA: 축소 시 영역 스케일링을 사용합니다.image.BILINEAR: 이중 선형 스케일링을 사용합니다.image.BICUBIC: 이중 삼차 스케일링을 사용합니다.image.CENTER: 대상에서 이미지를 중앙에 배치합니다.image.HMIRROR: 수평으로 미러링합니다.image.VFLIP: 수직으로 뒤집습니다.image.TRANSPOSE: 전치합니다(x/y 교환).image.EXTRACT_RGB_CHANNEL_FIRST: 스케일링 전에 rgb_channel 추출을 적용합니다.image.APPLY_COLOR_PALETTE_FIRST: 스케일링 전에 색상 팔레트를 적용합니다.image.SCALE_ASPECT_KEEP: 종횡비를 유지하면서 대상 안에 맞춥니다.image.SCALE_ASPECT_EXPAND: 종횡비를 유지하면서 대상을 채웁니다(잘라냄).image.SCALE_ASPECT_IGNORE: 종횡비를 무시하면서 대상을 채웁니다(늘림).image.ROTATE_90: 90도 회전합니다.image.ROTATE_180: 180도 회전합니다.image.ROTATE_270: 270도 회전합니다.
scale은ir배열을 스케일링하는 데 사용되는 최저/최고 온도(섭씨)를 제어하는 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)입니다:image.AREA: 축소 시 영역 스케일링을 사용합니다.image.BILINEAR: 이중 선형 스케일링을 사용합니다.image.BICUBIC: 이중 삼차 스케일링을 사용합니다.image.CENTER: 대상에서 이미지를 중앙에 배치합니다.image.HMIRROR: 수평으로 미러링합니다.image.VFLIP: 수직으로 뒤집습니다.image.TRANSPOSE: 전치합니다(x/y 교환).image.EXTRACT_RGB_CHANNEL_FIRST: 스케일링 전에 rgb_channel 추출을 적용합니다.image.APPLY_COLOR_PALETTE_FIRST: 스케일링 전에 색상 팔레트를 적용합니다.image.SCALE_ASPECT_KEEP: 종횡비를 유지하면서 대상 안에 맞춥니다.image.SCALE_ASPECT_EXPAND: 종횡비를 유지하면서 대상을 채웁니다(잘라냄).image.SCALE_ASPECT_IGNORE: 종횡비를 무시하면서 대상을 채웁니다(늘림).image.ROTATE_90: 90도 회전합니다.image.ROTATE_180: 180도 회전합니다.image.ROTATE_270: 270도 회전합니다.
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의 별칭입니다.