fir — driver del sensore termico (fir == far infrared)

Il modulo fir pilota array di termopile a infrarossi lontani (FIR) collegati a una OpenMV Cam tramite I2C – sono supportati sensori 8x8, 16x4, 16x12 e 32x24 (vedi le costanti in fondo a questa pagina). Ogni frame restituisce una temperatura per pixel in gradi Celsius, che puo essere visualizzata come immagine termica autonoma con snapshot() oppure sovrapposta a un frame in luce visibile proveniente dal sensore CSI con draw_ir(), normalmente attraverso una palette di colori come image.PALETTE_RAINBOW o image.PALETTE_IRONBOW.

Esempio di utilizzo:

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)

Funzioni

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

Inizializza un sensore termico collegato.

type indica il tipo di sensore termico:

Per impostazione predefinita type è -1, il che fa sì che fir.init() esegua automaticamente la scansione e inizializzi un sensore termico collegato in base al suo indirizzo I2C. Nota che fir.FIR_MLX90640 e fir.FIR_MLX90641 condividono lo stesso indirizzo I2C, quindi devi passare fir.FIR_MLX90641 a type per inizializzarlo specificamente.

refresh è la frequenza di aggiornamento del sensore termico in Hz:

Una frequenza di aggiornamento più alta riduce l’accuratezza e viceversa.

resolution è la risoluzione di misura del sensore termico in bit:

Una risoluzione più alta riduce l’intervallo massimo di temperatura e viceversa.

fir.deinit() None

Deinizializza il sensore termico e libera le risorse.

fir.width() int

Restituisce la risoluzione orizzontale (in pixel) del sensore termico in uso.

fir.height() int

Restituisce la risoluzione verticale (in pixel) del sensore termico in uso.

fir.type() int

Restituisce il tipo del sensore termico in uso. Uno tra fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 o fir.FIR_AMG8833.

fir.refresh() int

Restituisce la frequenza di aggiornamento corrente (Hz) impostata durante la chiamata a fir.init().

fir.resolution() int

Restituisce la risoluzione corrente (bit) impostata durante la chiamata a fir.init().

fir.read_ta() float

Restituisce la temperatura ambiente (cioè la temperatura del sensore) in gradi Celsius come float.

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

Restituisce una tupla a 4 elementi (ta, ir, to_min, to_max) contenente la temperatura ambiente, una lista piatta width * height di temperature float, la temperatura minima rilevata e la temperatura massima rilevata. Tutti i valori sono in gradi Celsius.

hmirror se True specchia orizzontalmente l’array ir.

vflip se True capovolge verticalmente l’array ir.

transpose se True traspone l’array ir (scambia larghezza e altezza).

timeout se diverso da -1, il numero di millisecondi da attendere per un nuovo frame.

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

Disegna l’array ir su image con l’angolo in alto a sinistra in (x, y).

ir è la lista piatta di temperature width * height restituita da fir.read_ir().

x_scale controlla quanto l’immagine renderizzata viene scalata nella direzione x. Un valore negativo la specchia orizzontalmente. Se non specificato, corrisponde a y_scale per mantenere le proporzioni.

y_scale controlla quanto l’immagine renderizzata viene scalata nella direzione y. Un valore negativo la capovolge verticalmente. Se non specificato, corrisponde a x_scale per mantenere le proporzioni.

roi è il rettangolo della regione di interesse (x, y, w, h) dei dati IR sorgente da disegnare.

rgb_channel è il canale RGB (0=R, 1=G, 2=B) da renderizzare sull’immagine di destinazione quando la destinazione è RGB565. -1 (predefinito) renderizza tutti i canali.

alpha controlla quanta parte dell’immagine sorgente fondere nella destinazione (0-255). 255 è completamente opaco; 0 non comporta alcuna modifica.

color_palette è un enum di palette di colori (ad es. image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) o un’immagine RGB565 di 256 pixel usata come tabella di lookup sul valore sorgente in scala di grigi.

alpha_palette è un’immagine GRAYSCALE di 256 pixel usata come tabella di lookup alpha che modula alpha per ciascun valore di pixel sorgente.

hint è un OR logico di:

scale è una tupla a 2 elementi (min, max) che controlla la temperatura minima/massima (in gradi Celsius) usata per scalare l’array ir. Per impostazione predefinita corrisponde al minimo e massimo effettivi di 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

Cattura un frame dal sensore termico e lo restituisce come image.Image. Funziona in modo simile a sensor.snapshot(). Se copy_to_fb è False, la nuova immagine viene allocata nell’heap di MicroPython (che è limitato); imposta copy_to_fb a True per scrivere il risultato nel frame buffer.

hmirror se True specchia orizzontalmente la nuova immagine.

vflip se True capovolge verticalmente la nuova immagine.

transpose se True traspone la nuova immagine.

x_scale controlla quanto la nuova immagine viene scalata nella direzione x. Un valore negativo la specchia orizzontalmente. Se non specificato, corrisponde a y_scale per mantenere le proporzioni.

y_scale controlla quanto la nuova immagine viene scalata nella direzione y. Un valore negativo la capovolge verticalmente. Se non specificato, corrisponde a x_scale per mantenere le proporzioni.

roi è il rettangolo della regione di interesse (x, y, w, h) dei dati IR sorgente da disegnare.

rgb_channel è il canale RGB (0=R, 1=G, 2=B) da renderizzare. -1 (predefinito) renderizza tutti i canali.

alpha controlla quanta parte dell’immagine sorgente viene fusa (0-255). 255 è completamente opaco.

color_palette è un enum di palette di colori o un’immagine RGB565 di 256 pixel usata come tabella di lookup sul valore sorgente in scala di grigi.

alpha_palette è un’immagine GRAYSCALE di 256 pixel usata come tabella di lookup alpha.

hint è un OR logico di:

scale è una tupla a 2 elementi (min, max) che controlla la temperatura minima/massima (in gradi Celsius) usata per scalare l’array IR. Per impostazione predefinita corrisponde al minimo e massimo effettivi dell’IR.

pixformat controlla il formato dei pixel in uscita. Deve essere image.GRAYSCALE o image.RGB565.

copy_to_fb se True scrive il risultato nel frame buffer invece di allocarlo nell’heap.

timeout se diverso da -1, il numero di millisecondi da attendere per un nuovo frame.

Costanti

fir.FIR_SHIELD: int

L’OpenMV Cam Thermopile Shield (MLX90621). Alias di fir.FIR_MLX90621.

fir.FIR_MLX90621: int

Sensore termico MLX90621 (16x4).

fir.FIR_MLX90640: int

Sensore termico MLX90640 (32x24).

fir.FIR_MLX90641: int

Sensore termico MLX90641 (16x12).

fir.FIR_AMG8833: int

Sensore termico AMG8833 (8x8).