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.
typewskazuje typ sensora termicznego:fir.FIR_SHIELD: 16x4 pikseli (MLX90621).fir.FIR_MLX90621: 16x4 pikseli.fir.FIR_MLX90640: 32x24 pikseli.fir.FIR_MLX90641: 16x12 pikseli.fir.FIR_AMG8833: 8x8 pikseli.
Domyślnie
typema wartość-1, co powoduje, żefir.init()automatycznie skanuje i inicjalizuje podłączony sensor termiczny na podstawie jego adresu I2C. Należy pamiętać, żefir.FIR_MLX90640ifir.FIR_MLX90641mają ten sam adres I2C, więc aby zainicjalizować ten ostatni, należy jawnie przekazaćfir.FIR_MLX90641dotype.refreshto częstotliwość odświeżania sensora termicznego w Hz:fir.FIR_MLX90621: Domyślnie 64 Hz. Może wynosić 1, 2, 4, 8, 16, 32, 64, 128, 256 lub 512 Hz.fir.FIR_MLX90640: Domyślnie 32 Hz. Może wynosić 1, 2, 4, 8, 16, 32 lub 64 Hz.fir.FIR_MLX90641: Domyślnie 32 Hz. Może wynosić 1, 2, 4, 8, 16, 32 lub 64 Hz.fir.FIR_AMG8833: Ustalona na 10 Hz.
Wyższa częstotliwość odświeżania obniża dokładność i odwrotnie.
resolutionto rozdzielczość pomiaru sensora termicznego w bitach:fir.FIR_MLX90621: Domyślnie 18. Może wynosić 15, 16, 17 lub 18.fir.FIR_MLX90640: Domyślnie 19. Może wynosić 16, 17, 18 lub 19.fir.FIR_MLX90641: Domyślnie 19. Może wynosić 16, 17, 18 lub 19.fir.FIR_AMG8833: Ustalona na 12.
Wyższa rozdzielczość obniża maksymalny zakres temperatur i odwrotnie.
- fir.type() int¶
Zwraca typ używanego sensora termicznego. Jedna z wartości
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641lubfir.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 * heighttemperatur zmiennoprzecinkowych, minimalną zaobserwowaną temperaturę oraz maksymalną zaobserwowaną temperaturę. Wszystkie wartości podane są w stopniach Celsjusza.hmirrorjeśli True, odbija poziomo tablicęir.vflipjeśli True, odwraca pionowo tablicęir.transposejeśli True, transponuje tablicęir(zamienia szerokość i wysokość).timeoutjeś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ę
irnaimagez jej lewym górnym rogiem w punkcie(x, y).irto płaska lista temperaturwidth * heightzwracana przezfir.read_ir().x_scalekontroluje stopień skalowania renderowanego obrazu w kierunku x. Wartość ujemna odbija poziomo. Jeśli nie podano, dopasowuje się doy_scale, aby zachować proporcje.y_scalekontroluje stopień skalowania renderowanego obrazu w kierunku y. Wartość ujemna odbija pionowo. Jeśli nie podano, dopasowuje się dox_scale, aby zachować proporcje.roito prostokąt obszaru zainteresowania(x, y, w, h)źródłowych danych IR do narysowania.rgb_channelto 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.alphakontroluje, ile obrazu źródłowego zostanie zmieszane z docelowym (0-255). 255 oznacza pełną nieprzezroczystość; 0 nie powoduje żadnych zmian.color_paletteto 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_paletteto obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa, która modulujealphadla każdej wartości piksela źródłowego.hintto logiczna suma (OR):image.AREA: Użyj skalowania obszarowego przy pomniejszaniu.image.BILINEAR: Użyj skalowania dwuliniowego.image.BICUBIC: Użyj skalowania dwusześciennego.image.CENTER: Wyśrodkuj obraz na celu.image.HMIRROR: Odbij poziomo.image.VFLIP: Odwróć pionowo.image.TRANSPOSE: Transponuj (zamień x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Zastosuj ekstrakcję rgb_channel przed skalowaniem.image.APPLY_COLOR_PALETTE_FIRST: Zastosuj paletę kolorów przed skalowaniem.image.SCALE_ASPECT_KEEP: Zmieść wewnątrz celu, zachowując proporcje.image.SCALE_ASPECT_EXPAND: Wypełnij cel, zachowując proporcje (przycina).image.SCALE_ASPECT_IGNORE: Wypełnij cel, ignorując proporcje (rozciąga).image.ROTATE_90: Obróć o 90 stopni.image.ROTATE_180: Obróć o 180 stopni.image.ROTATE_270: Obróć o 270 stopni.
scaleto 2-elementowa krotka(min, max)kontrolująca minimalną/maksymalną temperaturę (w stopniach Celsjusza) używaną do skalowania tablicyir. Domyślnie przyjmuje rzeczywiste wartości min i max tablicyir.
- 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 dosensor.snapshot(). Jeślicopy_to_fbjest False, nowy obraz jest alokowany na stercie MicroPython (która jest ograniczona); ustawcopy_to_fbna True, aby zamiast tego zapisać wynik do bufora ramki.hmirrorjeśli True, odbija poziomo nowy obraz.vflipjeśli True, odwraca pionowo nowy obraz.transposejeśli True, transponuje nowy obraz.x_scalekontroluje stopień skalowania nowego obrazu w kierunku x. Wartość ujemna odbija poziomo. Jeśli nie podano, dopasowuje się doy_scale, aby zachować proporcje.y_scalekontroluje stopień skalowania nowego obrazu w kierunku y. Wartość ujemna odbija pionowo. Jeśli nie podano, dopasowuje się dox_scale, aby zachować proporcje.roito prostokąt obszaru zainteresowania(x, y, w, h)źródłowych danych IR do narysowania.rgb_channelto kanał RGB (0=R, 1=G, 2=B) do renderowania.-1(domyślnie) renderuje wszystkie kanały.alphakontroluje, ile obrazu źródłowego jest mieszane (0-255). 255 oznacza pełną nieprzezroczystość.color_paletteto 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_paletteto obraz GRAYSCALE o 256 pikselach używany jako tablica przeglądowa alfa.hintto logiczna suma (OR):image.AREA: Użyj skalowania obszarowego przy pomniejszaniu.image.BILINEAR: Użyj skalowania dwuliniowego.image.BICUBIC: Użyj skalowania dwusześciennego.image.CENTER: Wyśrodkuj obraz na celu.image.HMIRROR: Odbij poziomo.image.VFLIP: Odwróć pionowo.image.TRANSPOSE: Transponuj (zamień x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Zastosuj ekstrakcję rgb_channel przed skalowaniem.image.APPLY_COLOR_PALETTE_FIRST: Zastosuj paletę kolorów przed skalowaniem.image.SCALE_ASPECT_KEEP: Zmieść wewnątrz celu, zachowując proporcje.image.SCALE_ASPECT_EXPAND: Wypełnij cel, zachowując proporcje (przycina).image.SCALE_ASPECT_IGNORE: Wypełnij cel, ignorując proporcje (rozciąga).image.ROTATE_90: Obróć o 90 stopni.image.ROTATE_180: Obróć o 180 stopni.image.ROTATE_270: Obróć o 270 stopni.
scaleto 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.pixformatkontroluje wyjściowy format pikseli. Musi byćimage.GRAYSCALElubimage.RGB565.copy_to_fbjeśli True, zapisuje wynik do bufora ramki zamiast alokować na stercie.timeoutjeś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.