lepton_get_object_high_temp.py
# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Ejemplo de obtención de temperatura alta de objeto con Lepton
#
# Este ejemplo muestra cómo obtener la temperatura de un objeto usando el seguimiento de color.
# Desactivando el AGC y estableciendo un rango de temperatura máximo y mínimo, puede convertir el lepton en
# un excelente sensor para ver objetos de una temperatura particular. Dicho esto, el FLIR lepton es un
# microbolómetro y no un termopilo. Por lo tanto, necesita recalibrarse a sí mismo con frecuencia (lo cual se llama
# corrección de campo plano - FFC). Además, los dispositivos microbolométricos requieren soporte de procesamiento
# integrado para lidiar con los efectos de la deriva de temperatura, lo cual se llama soporte de radiometría.
# Nota sobre el obturador del FLIR Lepton: Los FLIR Lepton con radiometría y obturador pausarán el video con frecuencia
# a medida que se calientan para recalibrarse. Esto ocurrirá cada vez con menos frecuencia a medida que la temperatura del sensor
# se estabiliza. Puede forzar que la recalibración no ocurra si lo necesita mediante la API del lepton.
# Sin embargo, no se recomienda porque la imagen se degradará con el tiempo.
# Si está usando un LEPTON distinto del Lepton 3.5, es posible que este script no funcione perfectamente ya que otros
# lepton no tienen soporte de radiometría o no activan su proceso de calibración con la frecuencia
# suficiente para lidiar con los cambios de temperatura (FLIR 2.5).
import csi
import time
# Umbrales de seguimiento de color (Grayscale Min, Grayscale Max)
threshold_list = [(100, 255)] # seguir objetos muy calientes
# Establezca aquí el rango de temperatura objetivo
# 500C es la temperatura máxima que puede medir el sensor Lepton 3.5
# A temperatura ambiente su máximo es de ~380C
min_temp_in_celsius = 0.0
max_temp_in_celsius = 400.0
# Inicializar el sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)
# Activar el modo de medición con temperatura alta
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, True)
csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)
# Saltar fotogramas
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 los blobs con más píxeles que "pixel_threshold" y más área que "area_threshold" son
# devueltos por "find_blobs" a continuación. Cambie "pixels_threshold" y "area_threshold" si cambia la
# resolución de la cámara. "merge=True" fusiona todos los blobs superpuestos en la imagen.
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))
)