Адаптер FLIR Lepton¶
Модуль адаптера FLIR Lepton подключает тепловизионные ядра FLIR Lepton (приобретаются отдельно) к OpenMV Cam, поддерживая как режим AGC, так и режим прямого теплового измерения для определения температуры человека или объектов.
Полную техническую документацию, фотографии и информацию о заказе см. на странице продукта 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)