Adattatore FLIR Lepton¶
Il modulo adattatore FLIR Lepton collega i nuclei termici FLIR Lepton (venduti separatamente) alla OpenMV Cam, con modalità sia AGC sia termica diretta per la misurazione della temperatura di persone / oggetti.
Per il datasheet completo, le foto e gli ordini consulta la pagina prodotto dell’adattatore FLIR Lepton.
In evidenza¶
Compatibile con i nuclei FLIR Lepton 1.x / 2.x / 3.x (venduti separatamente)
Modalità sia AGC sia termica diretta con mappatura della temperatura
Vede nella completa oscurità
Compatibile con tutte le schede base modulari delle OpenMV Cam
Utilizzo¶
Pilota il Lepton tramite csi.CSI con cid= csi.LEPTON. Il driver effettua internamente l’upscaling del frame nativo del Lepton, 80x60 (1.x/2.x) o 160x120 (3.x), fino a qualsiasi framesize tu imposti:
import csi
import time
csi0 = csi.CSI(cid=csi.LEPTON)
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
print(clock.fps())
Per ottenere frame colorizzati direttamente dal sensore, passa il pixformat a csi.RGB565 e imposta csi.CSI.color_palette su image.PALETTE_IRONBOW: il driver emette frame RGB565 con la palette già applicata, così snapshot() restituisce direttamente frame colorati in ironbow:
csi0.pixformat(csi.RGB565)
csi0.color_palette(image.PALETTE_IRONBOW)
Misurazione della temperatura¶
I Lepton radiometrici (Lepton 2.5 / 3.5) forniscono dati di temperatura per pixel calibrati. Abilita la modalità di misurazione tramite csi.CSI.ioctl con csi.IOCTL_LEPTON_SET_MODE, quindi delimita la finestra di temperatura con csi.IOCTL_LEPTON_SET_RANGE (min_celsius, max_celsius). Il driver del Lepton mappa linearmente il valore di pixel in scala di grigi 0 su min_celsius e 255 su max_celsius, così ogni pixel diventa una ricerca di temperatura all’interno della finestra configurata. I pixel più freddi di min_celsius saturano a 0, i pixel più caldi di max_celsius saturano a 255.
csi.IOCTL_LEPTON_SET_MODE accetta due flag. Il primo attiva la misurazione; il secondo seleziona l’intervallo di temperatura del sensore:
Intervallo basso —
(True, False)— copertura del sensore da-10 °Ca+140 °C(scene su scala ambiente). Delimita la finestra all’area di interesse, ad es.(20.0, 40.0)per il tracciamento del calore corporeo:csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, False) csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, 20.0, 40.0)
Intervallo alto —
(True, True)— copertura del sensore tipica da-10 °Ca~+450 °C(~+400 °Ca temperatura ambiente) per oggetti caldi. Delimita ad es. a(0.0, 400.0)per il tracciamento di fornaci o elementi caldi:csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, True) csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, 0.0, 400.0)
Per riconvertire un pixel in scala di grigi in gradi Celsius:
def p_to_temp(p, min_t, max_t):
return (p * (max_t - min_t)) / 255.0 + min_t
Questo funziona sui singoli pixel o su statistiche aggregate (ad es. stats.mean() da Image.get_statistics) all’interno di una ROI quando si individuano regioni calde/fredde con Image.find_blobs.
Nota
La misurazione della temperatura richiede il Lepton in modalità scala di grigi senza alcuna palette di colori impostata: la mappatura lineare pixel-temperatura vale solo sull’output grezzo in scala di grigi. Per colorizzare ai fini della visualizzazione, fallo separatamente disegnando il frame in scala di grigi su un buffer di output RGB con Image.draw_image e color_palette= image.PALETTE_IRONBOW
out = image.Image(csi0.width(), csi0.height(), image.RGB565)
out.draw_image(img, 0, 0, color_palette=image.PALETTE_IRONBOW)