lepton_get_object_temp_lcd.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
import display

# 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((128, 160))

# 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()
lcd = display.SPIDisplay()

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))
    lcd.write(img)
    print(
        "FPS %f - Lepton Temp: %f C"
        % (clock.fps(), csi0.ioctl(csi.IOCTL_LEPTON_GET_FPA_TEMP))
    )

results matching ""

    No results matching ""