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.
typeudává typ termálního senzoru:fir.FIR_SHIELD: 16x4 pixelů (MLX90621).fir.FIR_MLX90621: 16x4 pixelů.fir.FIR_MLX90640: 32x24 pixelů.fir.FIR_MLX90641: 16x12 pixelů.fir.FIR_AMG8833: 8x8 pixelů.
Ve výchozím nastavení je
type-1, což způsobí, žefir.init()automaticky vyhledá a inicializuje připojený termální senzor podle jeho I2C adresy. Pamatujte, žefir.FIR_MLX90640afir.FIR_MLX90641sdílejí stejnou I2C adresu, takže pro specifickou inicializaci musíte dotypepředatfir.FIR_MLX90641.refreshje 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.
resolutionje rozlišení měření termálního senzoru v bitech:fir.FIR_MLX90621: Výchozí hodnota 18. Může být 15, 16, 17 nebo 18.fir.FIR_MLX90640: Výchozí hodnota 19. Může být 16, 17, 18 nebo 19.fir.FIR_MLX90641: Výchozí hodnota 19. Může být 16, 17, 18 nebo 19.fir.FIR_AMG8833: Pevně nastaveno na 12.
Vyšší rozlišení snižuje maximální teplotní rozsah a naopak.
- fir.type() int¶
Vrací typ používaného termálního senzoru. Jeden z
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641nebofir.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_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ý seznamwidth * heightteplot typu float, minimální naměřenou teplotu a maximální naměřenou teplotu. Všechny hodnoty jsou ve stupních Celsia.hmirrorpokud je True, horizontálně zrcadlí poleir.vflippokud je True, vertikálně překlápí poleir.transposepokud je True, transponuje poleir(prohodí šířku a výšku).timeoutpokud 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
irnaimages levým horním rohem na(x, y).irje plochý seznam teplotwidth * heightvrácený funkcífir.read_ir().x_scaleurč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_scalepro zachování poměru stran.y_scaleurč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_scalepro zachování poměru stran.roije obdélník oblasti zájmu(x, y, w, h)zdrojových IR dat, která se mají vykreslit.rgb_channelje 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.alphaurč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_paletteje 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_paletteje 256pixelový GRAYSCALE obraz použitý jako vyhledávací tabulka alfa, která modulujealphapodle hodnoty každého zdrojového pixelu.hintje logický součin OR z:image.AREA: Použít plošné škálování při zmenšování.image.BILINEAR: Použít bilineární škálování.image.BICUBIC: Použít bikubické škálování.image.CENTER: Vycentrovat obraz na cíli.image.HMIRROR: Horizontálně zrcadlit.image.VFLIP: Vertikálně překlopit.image.TRANSPOSE: Transponovat (prohodit x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplikovat extrakci rgb_channel před škálováním.image.APPLY_COLOR_PALETTE_FIRST: Aplikovat barevnou paletu před škálováním.image.SCALE_ASPECT_KEEP: Vejít se do cíle se zachováním poměru stran.image.SCALE_ASPECT_EXPAND: Vyplnit cíl se zachováním poměru stran (ořezává).image.SCALE_ASPECT_IGNORE: Vyplnit cíl bez ohledu na poměr stran (roztahuje).image.ROTATE_90: Otočit o 90 stupňů.image.ROTATE_180: Otočit o 180 stupňů.image.ROTATE_270: Otočit o 270 stupňů.
scaleje 2-tice(min, max)určující minimální/maximální teplotu (ve stupních Celsia) použitou ke škálování poleir. Výchozí hodnotou je skutečné minimum a maximumir.
- 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ě jakosensor.snapshot(). Pokud jecopy_to_fbFalse, nový obraz se alokuje na haldě MicroPythonu (která je omezená); nastavtecopy_to_fbna True, aby se výsledek místo toho zapsal do snímkového bufferu (frame buffer).hmirrorpokud je True, horizontálně zrcadlí nový obraz.vflippokud je True, vertikálně překlápí nový obraz.transposepokud je True, transponuje nový obraz.x_scaleurč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_scalepro zachování poměru stran.y_scaleurč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_scalepro zachování poměru stran.roije obdélník oblasti zájmu(x, y, w, h)zdrojových IR dat, která se mají vykreslit.rgb_channelje RGB kanál (0=R, 1=G, 2=B), který se má vykreslit.-1(výchozí) vykreslí všechny kanály.alphaurčuje, jak moc se zdrojový obraz prolne (0-255). 255 je plně neprůhledný.color_paletteje enum barevné palety nebo 256pixelový RGB565 obraz použitý jako vyhledávací tabulka pro hodnotu zdrojového pixelu ve stupních šedi.alpha_paletteje 256pixelový GRAYSCALE obraz použitý jako vyhledávací tabulka alfa.hintje logický součin OR z:image.AREA: Použít plošné škálování při zmenšování.image.BILINEAR: Použít bilineární škálování.image.BICUBIC: Použít bikubické škálování.image.CENTER: Vycentrovat obraz na cíli.image.HMIRROR: Horizontálně zrcadlit.image.VFLIP: Vertikálně překlopit.image.TRANSPOSE: Transponovat (prohodit x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplikovat extrakci rgb_channel před škálováním.image.APPLY_COLOR_PALETTE_FIRST: Aplikovat barevnou paletu před škálováním.image.SCALE_ASPECT_KEEP: Vejít se do cíle se zachováním poměru stran.image.SCALE_ASPECT_EXPAND: Vyplnit cíl se zachováním poměru stran (ořezává).image.SCALE_ASPECT_IGNORE: Vyplnit cíl bez ohledu na poměr stran (roztahuje).image.ROTATE_90: Otočit o 90 stupňů.image.ROTATE_180: Otočit o 180 stupňů.image.ROTATE_270: Otočit o 270 stupňů.
scaleje 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.pixformaturčuje výstupní formát pixelů. Musí býtimage.GRAYSCALEneboimage.RGB565.copy_to_fbpokud je True, zapíše výsledek do snímkového bufferu (frame buffer) místo alokace na haldě.timeoutpokud 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.