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.
typeindica il tipo di sensore termico: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.
Per impostazione predefinita
typeè-1, il che fa sì chefir.init()esegua automaticamente la scansione e inizializzi un sensore termico collegato in base al suo indirizzo I2C. Nota chefir.FIR_MLX90640efir.FIR_MLX90641condividono lo stesso indirizzo I2C, quindi devi passarefir.FIR_MLX90641atypeper inizializzarlo specificamente.refreshè la frequenza di aggiornamento del sensore termico in Hz:fir.FIR_MLX90621: Predefinito a 64 Hz. Può essere 1, 2, 4, 8, 16, 32, 64, 128, 256 o 512 Hz.fir.FIR_MLX90640: Predefinito a 32 Hz. Può essere 1, 2, 4, 8, 16, 32 o 64 Hz.fir.FIR_MLX90641: Predefinito a 32 Hz. Può essere 1, 2, 4, 8, 16, 32 o 64 Hz.fir.FIR_AMG8833: Fisso a 10 Hz.
Una frequenza di aggiornamento più alta riduce l’accuratezza e viceversa.
resolutionè la risoluzione di misura del sensore termico in bit:fir.FIR_MLX90621: Predefinito a 18. Può essere 15, 16, 17 o 18.fir.FIR_MLX90640: Predefinito a 19. Può essere 16, 17, 18 o 19.fir.FIR_MLX90641: Predefinito a 19. Può essere 16, 17, 18 o 19.fir.FIR_AMG8833: Fisso a 12.
Una risoluzione più alta riduce l’intervallo massimo di temperatura e viceversa.
- fir.type() int¶
Restituisce il tipo del sensore termico in uso. Uno tra
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641ofir.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 piattawidth * heightdi temperature float, la temperatura minima rilevata e la temperatura massima rilevata. Tutti i valori sono in gradi Celsius.hmirrorse True specchia orizzontalmente l’arrayir.vflipse True capovolge verticalmente l’arrayir.transposese True traspone l’arrayir(scambia larghezza e altezza).timeoutse 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
irsuimagecon l’angolo in alto a sinistra in(x, y).irè la lista piatta di temperaturewidth * heightrestituita dafir.read_ir().x_scalecontrolla quanto l’immagine renderizzata viene scalata nella direzione x. Un valore negativo la specchia orizzontalmente. Se non specificato, corrisponde ay_scaleper mantenere le proporzioni.y_scalecontrolla quanto l’immagine renderizzata viene scalata nella direzione y. Un valore negativo la capovolge verticalmente. Se non specificato, corrisponde ax_scaleper 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.alphacontrolla 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 modulaalphaper ciascun valore di pixel sorgente.hintè un OR logico di:image.AREA: Usa lo scaling per area durante la riduzione.image.BILINEAR: Usa lo scaling bilineare.image.BICUBIC: Usa lo scaling bicubico.image.CENTER: Centra l’immagine sulla destinazione.image.HMIRROR: Specchia orizzontalmente.image.VFLIP: Capovolge verticalmente.image.TRANSPOSE: Traspone (scambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Applica l’estrazione di rgb_channel prima dello scaling.image.APPLY_COLOR_PALETTE_FIRST: Applica la palette di colori prima dello scaling.image.SCALE_ASPECT_KEEP: Adatta all’interno della destinazione mantenendo le proporzioni.image.SCALE_ASPECT_EXPAND: Riempie la destinazione mantenendo le proporzioni (ritaglia).image.SCALE_ASPECT_IGNORE: Riempie la destinazione ignorando le proporzioni (stira).image.ROTATE_90: Ruota di 90 gradi.image.ROTATE_180: Ruota di 180 gradi.image.ROTATE_270: Ruota di 270 gradi.
scaleè una tupla a 2 elementi(min, max)che controlla la temperatura minima/massima (in gradi Celsius) usata per scalare l’arrayir. Per impostazione predefinita corrisponde al minimo e massimo effettivi diir.
- 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 asensor.snapshot(). Secopy_to_fbè False, la nuova immagine viene allocata nell’heap di MicroPython (che è limitato); impostacopy_to_fba True per scrivere il risultato nel frame buffer.hmirrorse True specchia orizzontalmente la nuova immagine.vflipse True capovolge verticalmente la nuova immagine.transposese True traspone la nuova immagine.x_scalecontrolla quanto la nuova immagine viene scalata nella direzione x. Un valore negativo la specchia orizzontalmente. Se non specificato, corrisponde ay_scaleper mantenere le proporzioni.y_scalecontrolla quanto la nuova immagine viene scalata nella direzione y. Un valore negativo la capovolge verticalmente. Se non specificato, corrisponde ax_scaleper 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.alphacontrolla 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:image.AREA: Usa lo scaling per area durante la riduzione.image.BILINEAR: Usa lo scaling bilineare.image.BICUBIC: Usa lo scaling bicubico.image.CENTER: Centra l’immagine sulla destinazione.image.HMIRROR: Specchia orizzontalmente.image.VFLIP: Capovolge verticalmente.image.TRANSPOSE: Traspone (scambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Applica l’estrazione di rgb_channel prima dello scaling.image.APPLY_COLOR_PALETTE_FIRST: Applica la palette di colori prima dello scaling.image.SCALE_ASPECT_KEEP: Adatta all’interno della destinazione mantenendo le proporzioni.image.SCALE_ASPECT_EXPAND: Riempie la destinazione mantenendo le proporzioni (ritaglia).image.SCALE_ASPECT_IGNORE: Riempie la destinazione ignorando le proporzioni (stira).image.ROTATE_90: Ruota di 90 gradi.image.ROTATE_180: Ruota di 180 gradi.image.ROTATE_270: Ruota di 270 gradi.
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.pixformatcontrolla il formato dei pixel in uscita. Deve essereimage.GRAYSCALEoimage.RGB565.copy_to_fbse True scrive il risultato nel frame buffer invece di allocarlo nell’heap.timeoutse 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.