Адаптер FLIR Lepton

Модуль адаптера FLIR Lepton подключает тепловизионные ядра FLIR Lepton (приобретаются отдельно) к OpenMV Cam, поддерживая как режим AGC, так и режим прямого теплового измерения для определения температуры человека или объектов.

Адаптер FLIR Lepton

Полную техническую документацию, фотографии и информацию о заказе см. на странице продукта FLIR Lepton Adapter.

Основные особенности

  • Совместим с ядрами FLIR Lepton 1.x / 2.x / 3.x (приобретаются отдельно)

  • Режимы AGC и прямого теплового измерения с отображением температуры

  • Видит в полной темноте

  • Совместим со всеми модульными базовыми платами OpenMV Cam

Использование

Управляйте Lepton через csi.CSI с параметром cid= csi.LEPTON. Драйвер внутренне масштабирует исходный кадр Lepton размером 80x60 (1.x/2.x) или 160x120 (3.x) до любого framesize, который вы установите:

import csi
import time

csi0 = csi.CSI(cid=csi.LEPTON)
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
clock = time.clock()

while True:
    clock.tick()
    img = csi0.snapshot()
    print(clock.fps())

Чтобы получать цветные кадры прямо с датчика, переключите pixformat на csi.RGB565 и установите csi.CSI.color_palette в image.PALETTE_IRONBOW — драйвер выдаёт кадры RGB565 с применённой палитрой, поэтому snapshot() сразу возвращает кадры в расцветке ironbow:

csi0.pixformat(csi.RGB565)
csi0.color_palette(image.PALETTE_IRONBOW)

Измерение температуры

Радиометрические Lepton (Lepton 2.5 / 3.5) предоставляют откалиброванные данные о температуре по каждому пикселю. Включите режим измерения через csi.CSI.ioctl с csi.IOCTL_LEPTON_SET_MODE, затем ограничьте температурное окно с помощью csi.IOCTL_LEPTON_SET_RANGE (min_celsius, max_celsius). Драйвер Lepton линейно сопоставляет значение пикселя в оттенках серого 0 с min_celsius, а 255 — с max_celsius, так что каждый пиксель становится поиском температуры в пределах заданного окна. Пиксели холоднее min_celsius насыщаются на значении 0, а пиксели горячее max_celsius — на значении 255.

csi.IOCTL_LEPTON_SET_MODE принимает два флага. Первый включает измерение; второй выбирает температурный диапазон датчика:

  • Низкий диапазон(True, False) — диапазон датчика от -10 °C до +140 °C (сцены масштаба помещения). Ограничьте окно интересующей областью, например (20.0, 40.0) для отслеживания тепла тела:

    csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, False)
    csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, 20.0, 40.0)
    
  • Высокий диапазон(True, True) — диапазон датчика обычно от -10 °C до ~+450 °C (~+400 °C при комнатной температуре) для горячих объектов. Ограничьте, например, (0.0, 400.0) для отслеживания печи или горячего элемента:

    csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, True)
    csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, 0.0, 400.0)
    

Чтобы преобразовать пиксель в оттенках серого обратно в градусы Цельсия:

def p_to_temp(p, min_t, max_t):
    return (p * (max_t - min_t)) / 255.0 + min_t

Это работает с отдельными пикселями или с агрегированной статистикой (например, stats.mean() из Image.get_statistics) внутри ROI при поиске горячих или холодных областей с помощью Image.find_blobs.

Примечание

Измерение температуры требует, чтобы Lepton работал в режиме оттенков серого без установленной цветовой палитры — линейное сопоставление пикселя с температурой справедливо только для необработанного вывода в оттенках серого. Для раскрашивания при отображении делайте это отдельно, рисуя кадр в оттенках серого на выходном буфере RGB с помощью Image.draw_image и color_palette= image.PALETTE_IRONBOW:

out = image.Image(csi0.width(), csi0.height(), image.RGB565)
out.draw_image(img, 0, 0, color_palette=image.PALETTE_IRONBOW)