lepton_get_object_temp.py

# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Esempio di lettura della temperatura di un oggetto con Lepton
#
# Questo esempio mostra come ottenere la temperatura di un oggetto usando il tracciamento del colore.

# Disattivando l'AGC e impostando un intervallo di temperatura massima e minima puoi trasformare il lepton in
# un ottimo sensore per vedere oggetti a una particolare temperatura. Detto ciò, il FLIR lepton è un
# microbolometro e non un termopile. Quindi, ha bisogno di ricalibrarsi spesso (operazione chiamata
# flat-field-correction - FFC). Inoltre, i dispositivi microbolometrici richiedono supporto di elaborazione
# a bordo per gestire gli effetti della deriva termica, chiamato supporto alla radiometria.

# Nota sull'otturatore FLIR Lepton: i FLIR Lepton con radiometria e otturatore mettono spesso in pausa il video
# mentre si riscaldano per ricalibrarsi. Questo accadrà sempre meno frequentemente man mano che la temperatura del sensore
# si stabilizza. Se necessario, puoi impedire che la ricalibrazione avvenga tramite l'API del lepton.
# Tuttavia, non è consigliato perché l'immagine si degraderà nel tempo.

# Se stai usando un LEPTON diverso dal Lepton 3.5, questo script potrebbe non funzionare perfettamente poiché altri
# lepton non hanno supporto alla radiometria oppure non attivano il loro processo di calibrazione abbastanza
# spesso da gestire i cambiamenti di temperatura (FLIR 2.5).

import csi
import time

# Soglie di tracciamento colore (Grayscale Min, Grayscale Max)
threshold_list = [(200, 255)]

# Imposta qui l'intervallo di temperatura target
min_temp_in_celsius = 20.0
max_temp_in_celsius = 40.0

# Inizializza il sensore.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)

# Abilita la modalità di misurazione
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True)
csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)

# Salta fotogrammi
csi0.snapshot(time=5000)
clock = time.clock()

print("Radiometry: " + "Yes" if csi0.ioctl(csi.IOCTL_LEPTON_GET_RADIOMETRY) else "No")
print("Resolution: %dx%d" % (csi0.ioctl(csi.IOCTL_LEPTON_GET_WIDTH), csi0.ioctl(csi.IOCTL_LEPTON_GET_HEIGHT)))

# Solo i blob con più pixel di "pixel_threshold" e più area di "area_threshold" vengono
# restituiti da "find_blobs" qui sotto. Modifica "pixels_threshold" e "area_threshold" se cambi la
# risoluzione della fotocamera. "merge=True" unisce tutti i blob sovrapposti nell'immagine.


def map_g_to_temp(g):
    return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius


while True:
    clock.tick()
    img = csi0.snapshot()
    for blob in img.find_blobs(
        threshold_list, pixels_threshold=200, area_threshold=200, merge=True
    ):
        stats = img.get_statistics(thresholds=threshold_list, roi=blob.rect)
        img.draw_detection(blob, label="%.2f C" % map_g_to_temp(stats.mean))
    print(
        "FPS %f - Lepton Temp: %f C"
        % (clock.fps(), csi0.ioctl(csi.IOCTL_LEPTON_GET_FPA_TEMP))
    )

results matching ""

    No results matching ""