lepton_get_object_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 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 = [(200, 255)]

# Establezca aquí el rango de temperatura objetivo
min_temp_in_celsius = 20.0
max_temp_in_celsius = 40.0

# Inicializar el sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)

# Activar el modo de medición
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, 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))
    )

results matching ""

    No results matching ""