fir — sterownik sensora termicznego (fir == far infrared, daleka podczerwień)

Moduł fir obsługuje matryce termopilowe dalekiej podczerwieni (FIR) podłączone do OpenMV Cam przez I2C – obsługiwane są sensory 8x8, 16x4, 16x12 i 32x24 (zobacz stałe na dole tej strony). Każda ramka zwraca temperaturę poszczególnych pikseli w stopniach Celsjusza, którą można wyświetlić jako samodzielny obraz termiczny za pomocą snapshot() lub złożyć z ramką światła widzialnego z sensora CSI za pomocą draw_ir(), zwykle przy użyciu palety kolorów takiej jak image.PALETTE_RAINBOW lub image.PALETTE_IRONBOW.

Przykład użycia:

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)

Funkcje

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

Inicjalizuje podłączony sensor termiczny.

type wskazuje typ sensora termicznego:

Domyślnie type ma wartość -1, co powoduje, że fir.init() automatycznie skanuje i inicjalizuje podłączony sensor termiczny na podstawie jego adresu I2C. Należy pamiętać, że fir.FIR_MLX90640 i fir.FIR_MLX90641 mają ten sam adres I2C, więc aby zainicjalizować ten ostatni, należy jawnie przekazać fir.FIR_MLX90641 do type.

refresh to częstotliwość odświeżania sensora termicznego w Hz:

Wyższa częstotliwość odświeżania obniża dokładność i odwrotnie.

resolution to rozdzielczość pomiaru sensora termicznego w bitach:

Wyższa rozdzielczość obniża maksymalny zakres temperatur i odwrotnie.

fir.deinit() None

Deinicjalizuje sensor termiczny i zwalnia zasoby.

fir.width() int

Zwraca poziomą rozdzielczość (w pikselach) używanego sensora termicznego.

fir.height() int

Zwraca pionową rozdzielczość (w pikselach) używanego sensora termicznego.

fir.type() int

Zwraca typ używanego sensora termicznego. Jedna z wartości fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 lub fir.FIR_AMG8833.

fir.refresh() int

Zwraca aktualną częstotliwość odświeżania (Hz) ustawioną podczas wywołania fir.init().

fir.resolution() int

Zwraca aktualną rozdzielczość (bity) ustawioną podczas wywołania fir.init().

fir.read_ta() float

Zwraca temperaturę otoczenia (tj. temperaturę sensora) w stopniach Celsjusza jako liczbę zmiennoprzecinkową.

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

Zwraca 4-elementową krotkę (ta, ir, to_min, to_max) zawierającą temperaturę otoczenia, płaską listę width * height temperatur zmiennoprzecinkowych, minimalną zaobserwowaną temperaturę oraz maksymalną zaobserwowaną temperaturę. Wszystkie wartości podane są w stopniach Celsjusza.

hmirror jeśli True, odbija poziomo tablicę ir.

vflip jeśli True, odwraca pionowo tablicę ir.

transpose jeśli True, transponuje tablicę ir (zamienia szerokość i wysokość).

timeout jeśli różny od -1, liczba milisekund oczekiwania na nową ramkę.

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

Rysuje tablicę ir na image z jej lewym górnym rogiem w punkcie (x, y).

ir to płaska lista temperatur width * height zwracana przez fir.read_ir().

x_scale kontroluje stopień skalowania renderowanego obrazu w kierunku x. Wartość ujemna odbija poziomo. Jeśli nie podano, dopasowuje się do y_scale, aby zachować proporcje.

y_scale kontroluje stopień skalowania renderowanego obrazu w kierunku y. Wartość ujemna odbija pionowo. Jeśli nie podano, dopasowuje się do x_scale, aby zachować proporcje.

roi to prostokąt obszaru zainteresowania (x, y, w, h) źródłowych danych IR do narysowania.

rgb_channel to kanał RGB (0=R, 1=G, 2=B) renderowany na obrazie docelowym, gdy cel jest w formacie RGB565. -1 (domyślnie) renderuje wszystkie kanały.

alpha kontroluje, ile obrazu źródłowego zostanie zmieszane z docelowym (0-255). 255 oznacza pełną nieprzezroczystość; 0 nie powoduje żadnych zmian.

color_palette to wartość enum palety kolorów (np. image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) lub obraz RGB565 o 256 pikselach używany jako tablica przeglądowa dla wartości źródłowej w skali szarości.

alpha_palette to obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa, która moduluje alpha dla każdej wartości piksela źródłowego.

hint to logiczna suma (OR):

scale to 2-elementowa krotka (min, max) kontrolująca minimalną/maksymalną temperaturę (w stopniach Celsjusza) używaną do skalowania tablicy ir. Domyślnie przyjmuje rzeczywiste wartości min i max tablicy 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

Przechwytuje ramkę z sensora termicznego i zwraca ją jako image.Image. Działa podobnie do sensor.snapshot(). Jeśli copy_to_fb jest False, nowy obraz jest alokowany na stercie MicroPython (która jest ograniczona); ustaw copy_to_fb na True, aby zamiast tego zapisać wynik do bufora ramki.

hmirror jeśli True, odbija poziomo nowy obraz.

vflip jeśli True, odwraca pionowo nowy obraz.

transpose jeśli True, transponuje nowy obraz.

x_scale kontroluje stopień skalowania nowego obrazu w kierunku x. Wartość ujemna odbija poziomo. Jeśli nie podano, dopasowuje się do y_scale, aby zachować proporcje.

y_scale kontroluje stopień skalowania nowego obrazu w kierunku y. Wartość ujemna odbija pionowo. Jeśli nie podano, dopasowuje się do x_scale, aby zachować proporcje.

roi to prostokąt obszaru zainteresowania (x, y, w, h) źródłowych danych IR do narysowania.

rgb_channel to kanał RGB (0=R, 1=G, 2=B) do renderowania. -1 (domyślnie) renderuje wszystkie kanały.

alpha kontroluje, ile obrazu źródłowego jest mieszane (0-255). 255 oznacza pełną nieprzezroczystość.

color_palette to wartość enum palety kolorów lub obraz RGB565 o 256 pikselach używany jako tablica przeglądowa dla wartości źródłowej w skali szarości.

alpha_palette to obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa.

hint to logiczna suma (OR):

scale to 2-elementowa krotka (min, max) kontrolująca minimalną/maksymalną temperaturę (w stopniach Celsjusza) używaną do skalowania tablicy IR. Domyślnie przyjmuje rzeczywiste wartości min i max tablicy IR.

pixformat kontroluje wyjściowy format pikseli. Musi być image.GRAYSCALE lub image.RGB565.

copy_to_fb jeśli True, zapisuje wynik do bufora ramki zamiast alokować na stercie.

timeout jeśli różny od -1, liczba milisekund oczekiwania na nową ramkę.

Stałe

fir.FIR_SHIELD: int

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

fir.FIR_MLX90621: int

Sensor termiczny MLX90621 (16x4).

fir.FIR_MLX90640: int

Sensor termiczny MLX90640 (32x24).

fir.FIR_MLX90641: int

Sensor termiczny MLX90641 (16x12).

fir.FIR_AMG8833: int

Sensor termiczny AMG8833 (8x8).