lepton_get_object_temp.py
# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Lepton-Objekttemperatur ermitteln – Beispiel
#
# Dieses Beispiel demonstriert, wie die Temperatur eines Objekts mithilfe von Farbverfolgung ermittelt wird.
# Indem Sie die AGC ausschalten und einen maximalen und minimalen Temperaturbereich festlegen, können Sie den Lepton zu
# einem hervorragenden Sensor machen, um Objekte einer bestimmten Temperatur zu erkennen. Allerdings ist der FLIR Lepton ein
# Mikrobolometer und kein Thermophile. Er muss sich daher häufig neu kalibrieren (was als
# Flat-Field-Correction - FFC bezeichnet wird). Zusätzlich benötigen Mikrobolometer-Geräte Verarbeitungsunterstützung
# an Bord, um die Auswirkungen von Temperaturdrift zu bewältigen, was als Radiometrie-Unterstützung bezeichnet wird.
# Hinweis zum FLIR-Lepton-Shutter: FLIR Leptons mit Radiometrie und Shutter pausieren das Video häufig,
# während sie sich zur Neukalibrierung aufheizen. Dies geschieht immer seltener, je mehr sich die Sensortemperatur
# stabilisiert. Bei Bedarf können Sie die Neukalibrierung über die Lepton-API unterdrücken.
# Dies wird jedoch nicht empfohlen, da sich das Bild mit der Zeit verschlechtert.
# Wenn Sie einen anderen LEPTON als den Lepton 3.5 verwenden, funktioniert dieses Skript möglicherweise nicht einwandfrei, da andere
# Leptons keine Radiometrie-Unterstützung haben oder ihren Kalibrierungsprozess nicht häufig genug aktivieren,
# um mit Temperaturänderungen umzugehen (FLIR 2.5).
import csi
import time
# Schwellenwerte für die Farbverfolgung (Grayscale Min, Grayscale Max)
threshold_list = [(200, 255)]
# Hier den Ziel-Temperaturbereich festlegen
min_temp_in_celsius = 20.0
max_temp_in_celsius = 40.0
# Sensor initialisieren.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)
# Messmodus aktivieren
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True)
csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)
# Frames überspringen
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)))
# Nur Blobs, die mehr Pixel als "pixel_threshold" und eine größere Fläche als "area_threshold" haben, werden
# von "find_blobs" unten zurückgegeben. Ändern Sie "pixels_threshold" und "area_threshold", wenn Sie die
# Kameraauflösung ändern. "merge=True" führt alle sich überlappenden Blobs im Bild zusammen.
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))
)