fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření)

Modul fir ovládá termopilové matice vzdáleného infračerveného záření (FIR) připojené k OpenMV Cam přes I2C – podporovány jsou senzory 8x8, 16x4, 16x12 a 32x24 (viz konstanty na konci této stránky). Každý snímek vrací teplotu jednotlivých pixelů ve stupních Celsia, kterou lze vykreslit jako samostatný termální obraz pomocí snapshot() nebo složit se snímkem viditelného světla z CSI senzoru pomocí draw_ir(), obvykle prostřednictvím barevné palety jako image.PALETTE_RAINBOW nebo image.PALETTE_IRONBOW.

Příklad použití:

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)

Funkce

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

Inicializuje připojený termální senzor.

type udává typ termálního senzoru:

Ve výchozím nastavení je type -1, což způsobí, že fir.init() automaticky vyhledá a inicializuje připojený termální senzor podle jeho I2C adresy. Pamatujte, že fir.FIR_MLX90640 a fir.FIR_MLX90641 sdílejí stejnou I2C adresu, takže pro specifickou inicializaci musíte do type předat fir.FIR_MLX90641.

refresh je obnovovací frekvence termálního senzoru v Hz:

  • fir.FIR_MLX90621: Výchozí hodnota 64 Hz. Může být 1, 2, 4, 8, 16, 32, 64, 128, 256 nebo 512 Hz.

  • fir.FIR_MLX90640: Výchozí hodnota 32 Hz. Může být 1, 2, 4, 8, 16, 32 nebo 64 Hz.

  • fir.FIR_MLX90641: Výchozí hodnota 32 Hz. Může být 1, 2, 4, 8, 16, 32 nebo 64 Hz.

  • fir.FIR_AMG8833: Pevně nastaveno na 10 Hz.

Vyšší obnovovací frekvence snižuje přesnost a naopak.

resolution je rozlišení měření termálního senzoru v bitech:

Vyšší rozlišení snižuje maximální teplotní rozsah a naopak.

fir.deinit() None

Deinicializuje termální senzor a uvolní prostředky.

fir.width() int

Vrací horizontální rozlišení (v pixelech) používaného termálního senzoru.

fir.height() int

Vrací vertikální rozlišení (v pixelech) používaného termálního senzoru.

fir.type() int

Vrací typ používaného termálního senzoru. Jeden z fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 nebo fir.FIR_AMG8833.

fir.refresh() int

Vrací aktuální obnovovací frekvenci (Hz) nastavenou při volání fir.init().

fir.resolution() int

Vrací aktuální rozlišení (bity) nastavené při volání fir.init().

fir.read_ta() float

Vrací okolní teplotu (tj. teplotu senzoru) ve stupních Celsia jako float.

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

Vrací 4-tici (ta, ir, to_min, to_max) obsahující okolní teplotu, plochý seznam width * height teplot typu float, minimální naměřenou teplotu a maximální naměřenou teplotu. Všechny hodnoty jsou ve stupních Celsia.

hmirror pokud je True, horizontálně zrcadlí pole ir.

vflip pokud je True, vertikálně překlápí pole ir.

transpose pokud je True, transponuje pole ir (prohodí šířku a výšku).

timeout pokud není -1, počet milisekund čekání na nový snímek.

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

Vykreslí pole ir na image s levým horním rohem na (x, y).

ir je plochý seznam teplot width * height vrácený funkcí fir.read_ir().

x_scale určuje, jak moc je vykreslený obraz škálován ve směru osy x. Záporná hodnota horizontálně překlopí. Není-li zadáno, odpovídá y_scale pro zachování poměru stran.

y_scale určuje, jak moc je vykreslený obraz škálován ve směru osy y. Záporná hodnota vertikálně překlopí. Není-li zadáno, odpovídá x_scale pro zachování poměru stran.

roi je obdélník oblasti zájmu (x, y, w, h) zdrojových IR dat, která se mají vykreslit.

rgb_channel je RGB kanál (0=R, 1=G, 2=B), který se vykreslí do cílového obrazu, když je cíl RGB565. -1 (výchozí) vykreslí všechny kanály.

alpha určuje, jak moc se zdrojový obraz prolne do cílového (0-255). 255 je plně neprůhledný; 0 nezpůsobí žádnou změnu.

color_palette je enum barevné palety (např. image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) nebo 256pixelový RGB565 obraz použitý jako vyhledávací tabulka pro hodnotu zdrojového pixelu ve stupních šedi.

alpha_palette je 256pixelový GRAYSCALE obraz použitý jako vyhledávací tabulka alfa, která moduluje alpha podle hodnoty každého zdrojového pixelu.

hint je logický součin OR z:

scale je 2-tice (min, max) určující minimální/maximální teplotu (ve stupních Celsia) použitou ke škálování pole ir. Výchozí hodnotou je skutečné minimum a maximum 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

Zachytí snímek z termálního senzoru a vrátí jej jako image.Image. Funguje podobně jako sensor.snapshot(). Pokud je copy_to_fb False, nový obraz se alokuje na haldě MicroPythonu (která je omezená); nastavte copy_to_fb na True, aby se výsledek místo toho zapsal do snímkového bufferu (frame buffer).

hmirror pokud je True, horizontálně zrcadlí nový obraz.

vflip pokud je True, vertikálně překlápí nový obraz.

transpose pokud je True, transponuje nový obraz.

x_scale určuje, jak moc je nový obraz škálován ve směru osy x. Záporná hodnota horizontálně překlopí. Není-li zadáno, odpovídá y_scale pro zachování poměru stran.

y_scale určuje, jak moc je nový obraz škálován ve směru osy y. Záporná hodnota vertikálně překlopí. Není-li zadáno, odpovídá x_scale pro zachování poměru stran.

roi je obdélník oblasti zájmu (x, y, w, h) zdrojových IR dat, která se mají vykreslit.

rgb_channel je RGB kanál (0=R, 1=G, 2=B), který se má vykreslit. -1 (výchozí) vykreslí všechny kanály.

alpha určuje, jak moc se zdrojový obraz prolne (0-255). 255 je plně neprůhledný.

color_palette je enum barevné palety nebo 256pixelový RGB565 obraz použitý jako vyhledávací tabulka pro hodnotu zdrojového pixelu ve stupních šedi.

alpha_palette je 256pixelový GRAYSCALE obraz použitý jako vyhledávací tabulka alfa.

hint je logický součin OR z:

scale je 2-tice (min, max) určující minimální/maximální teplotu (ve stupních Celsia) použitou ke škálování IR pole. Výchozí hodnotou je skutečné minimum a maximum IR.

pixformat určuje výstupní formát pixelů. Musí být image.GRAYSCALE nebo image.RGB565.

copy_to_fb pokud je True, zapíše výsledek do snímkového bufferu (frame buffer) místo alokace na haldě.

timeout pokud není -1, počet milisekund čekání na nový snímek.

Konstanty

fir.FIR_SHIELD: int

OpenMV Cam Thermopile Shield (MLX90621). Alias pro fir.FIR_MLX90621.

fir.FIR_MLX90621: int

Termální senzor MLX90621 (16x4).

fir.FIR_MLX90640: int

Termální senzor MLX90640 (32x24).

fir.FIR_MLX90641: int

Termální senzor MLX90641 (16x12).

fir.FIR_AMG8833: int

Termální senzor AMG8833 (8x8).