lepton_get_object_high_temp.py

# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemple d'obtention de la température élevée d'un objet avec le Lepton
#
# Cet exemple présente comment obtenir la température d'un objet à l'aide du suivi de couleur.

# En désactivant l'AGC et en définissant une plage de température min et max, vous pouvez transformer le lepton en
# un excellent capteur pour repérer des objets d'une température particulière. Cela dit, le FLIR Lepton est un
# microbolomètre et non un thermopile. Il doit donc se recalibrer souvent (ce qui s'appelle
# la correction de champ plat - FFC). De plus, les appareils à microbolomètre nécessitent un traitement
# embarqué pour gérer les effets de la dérive thermique, appelé prise en charge radiométrique.

# Remarque sur l'obturateur du FLIR Lepton : les FLIR Lepton dotés de radiométrie et d'un obturateur mettront souvent la vidéo en pause
# lorsqu'ils chauffent pour se recalibrer. Cela se produira de moins en moins souvent à mesure que la température du capteur
# se stabilise. Vous pouvez forcer la recalibration à ne pas se produire si nécessaire via l'API du lepton.
# Cependant, ce n'est pas recommandé car l'image se dégradera avec le temps.

# Si vous utilisez un LEPTON autre que le Lepton 3.5, ce script pourrait ne pas fonctionner parfaitement car les autres
# leptons ne disposent pas de prise en charge radiométrique ou n'activent pas leur processus de calibration
# assez souvent pour gérer les changements de température (FLIR 2.5).

import csi
import time

# Seuils de suivi de couleur (Min niveaux de gris, Max niveaux de gris)
threshold_list = [(100, 255)]  # suivre des objets très chauds

# Définir ici la plage de température cible
# 500°C est la température maximale que le capteur Lepton 3.5 peut mesurer
# À température ambiante, son maximum est d'environ 380°C
min_temp_in_celsius = 0.0
max_temp_in_celsius = 400.0

# Initialiser le capteur.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)

# Activer le mode mesure avec température élevée
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, True)
csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)

# Passer des images
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)))

# Seuls les blobs comptant plus de pixels que "pixel_threshold" et plus de surface que "area_threshold" sont
# renvoyés par "find_blobs" ci-dessous. Modifiez "pixels_threshold" et "area_threshold" si vous changez la
# résolution de la caméra. "merge=True" fusionne tous les blobs qui se chevauchent dans l'image.


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 ""