lepton_get_object_temp.py

# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemplo de Obtenção da Temperatura de Objeto com a Lepton
#
# Este exemplo demonstra como obter a temperatura de um objeto usando rastreamento de cor.

# Ao desativar o AGC e definir uma faixa de temperatura máxima e mínima, você pode transformar a lepton em
# um ótimo sensor para ver objetos de uma temperatura específica. Dito isso, a FLIR lepton é um
# microbolômetro e não um termopilha. Portanto, ela precisa se recalibrar frequentemente (o que é chamado
# de flat-field-correction - FFC). Além disso, dispositivos microbolométricos requerem suporte de processamento
# interno para lidar com os efeitos do desvio de temperatura, o que é chamado de suporte de radiometria.

# Nota sobre o Obturador da FLIR Lepton: FLIR Leptons com radiometria e obturador pausarão o vídeo com frequência
# à medida que aquecem para se recalibrar. Isso ocorrerá cada vez menos à medida que a temperatura do sensor
# se estabiliza. Você pode forçar a não ocorrência da recalibração se necessário, via API da lepton.
# No entanto, isso não é recomendado porque a imagem se degradará ao longo do tempo.

# Se você estiver usando uma LEPTON diferente da Lepton 3.5, este script pode não funcionar perfeitamente, pois outras
# leptons não têm suporte de radiometria ou não ativam seu processo de calibração com frequência
# suficiente para lidar com mudanças de temperatura (FLIR 2.5).

import csi
import time

# Limiares de Rastreamento de Cor (Grayscale Min, Grayscale Max)
threshold_list = [(200, 255)]

# Define a faixa de temperatura alvo aqui
min_temp_in_celsius = 20.0
max_temp_in_celsius = 40.0

# Inicializa o sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)

# Ativa o modo de medição
csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True)
csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)

# Pula frames
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)))

# Somente blobs com mais pixels que "pixel_threshold" e mais área que "area_threshold" são
# retornados por "find_blobs" abaixo. Altere "pixels_threshold" e "area_threshold" se você alterar a
# resolução da câmera. "merge=True" mescla todos os blobs sobrepostos na imagem.


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