Первая ассоциация, которая возникает у старшего поколения при слове тепловизор — фильм Хищник. Именно в этом голливудском фильме 80-х годов инопланетный охотник использовал тепловизор для наблюдения за своими жертвами в темноте ночных джунглей. С тех самых пор я мечтал заиметь такое устройство для личных целей.
Спустя много лет, в 2013-м году у меня наконец-то получилось раздобыть недорогой датчик MLX90620 с матрицей 16×4 точек. Каждая точка в этом устройстве представляет собой микроболометр — термочувствительный элемент, меняющий свое сопротивление вследствие нагревания, под воздействием падающего на него электромагнитного излучения. Оптика для тепловизоров обычно изготавливается из германия, который хорошо пропускает и преломляет волны в диапазоне тепловидения.
В свое время, на сайте poprobot.ru я написал небольшую статью про использование MLX90620. Сегодня в продаже есть и более совершенные матрицы, в ценовом диапазоне MLX (а есть даже и дешевле). Основная проблема при покупке таких приборов — их двойное назначение. Бывало, что мне отказывали в покупке подобных матриц в США.
И вот, спустя еще 3 года, у меня в руках оказался куда более интересный прибор — термокамера FLIR Lepton. В этом датчике тоже используется микроболометрическая матрица, но уже с разрешением 80×60 точек! Это гораздо веселее, чем 16×4, согласитесь? Вот так она выглядит:
Немного важных параметров:
- детектируемый спектр: 8-14мкм;
- размер пиксела: 17мкм;
- оптимальная частота кадров: 8,6Гц;
- чувствительность: менее 50мК;
- температурная коррекция: автоматическая;
- угол обзора: 51 по горизонтали и 63,5 по диагонали;
- формат данных: 14бит, 16бит (c АРУ) или 24бит RGB (с АРУ).
Надо сказать, FLIR Lepton — очень популярная термокамера, так что инструкций по её использованию в интернете предостаточно. Я использовал одну из таких инструкций, размещенных на сайте sparkfun.
Подключение
На плате виден интерфейс I2C и SPI. По первому происходит обмен управляющими командами, а второй служит для приема видеопотока с датчика. Оставшиеся два пина VIN и GND — питание.
Для эксперимента с датчиком нам потребуется более или менее мощная вычислительная система, например, Raspberry Pi. Подключим FLIR Lepton к микрокомпьютеру по следующей схеме:
Как видим, ничего сложного. Требуется всего восемь проводков мама-мама. Следующий шаг — установка на PRi соответствующих программ.
Установка ПО для просмотра видеопотока
Первое, что нам потребуется сделать — это активировать SPI и I2C интерфейсы в RPi. Делается это так.
1. Открываем меню настроек RPi с помощью команды:
sudo raspi-config
Команду нужно вводить в терминале, разумеется. По-умолчанию в Raspbian стоит терминал LXTerminal. Его и используем.
2. Затем, в появившемся меню выбираем пункт Advanced options.
3. В Advanced options выбираем пункт Enable/Disable automatic loading of SPI kernel module.
4. Соглашаемся со всем, что скажут и выполняем аналогичные действия для пункта I2C.
Теперь мы можем подключиться к камере. Попробуем получить с нее изображение с помощью стандартного пакета LeptonModule. В пакете есть примеры работы с FLIR Lepton на разных платформах.
5. LeptonModule использует фремворк Qt4, сначала поставим его. Qt в нем используется для экранных форм, необходимых для отображения видеопотока с камеры.
sudo apt-get install qt4-dev-tools
В результате появится что-то типа этого:
Отвечаем yes и ждем завершения установки.
6. Теперь ставим сам LeptonModule. Скачиваем исходные коды с github командой:
cd /home/pi git clone https://github.com/PureEngineering/LeptonModule
7. Собираем библиотеки. Для этого внутри домашней папки выполняем:
cd LeptonModule/software/raspberrypi_libs/leptonSDKEmb32PUB make
8. Далее собираем бинарник в папке raspberrypi_video:
cd ../../raspberrypi_video qmake && make
Папки на картинках могут не совпадать, ибо там используется старый пакет.
9. Всё. Запускаем бинарник.
sudo ./raspberrypi_video
Если запустится черное окошко с красным квадратом, как на скриншоте, значит модуль инициализировался с ошибкой. Сначала надо проверить все соединения. Если все верно, пробуем сделать грязный хак: на sparkfun советуют нежно вытащить сам датчик из паза, и затем так же нежно воткнуть обратно. Способ дикий, но рабочий и достаточно безопасный. Таковы особенности стандартных библиотек, увы.
Рабочий поток с камеры должен выглядеть следующим образом:
Надо сказать, что стандартная библиотека не единственный способ получения видеопотока с датчика. На форуме FLIR можно найти разные решения так называемой «проблемы красного квадрата». Не всем нравится вытаскивать датчик из слота при каждом запуске. Вот к примеру небольшое приложение которое мне понравилось: https://groups.google.com/forum/#!msg/flir-lepton/GWHD1KMVYaE/S4pq5vXmpOkJ
Ну и разумеется, вы всегда можете сами написать приложение для получения данных с датчика на любом языке. Благо, протокол обмена весьма простой и хорошо документированный. Для начала рекомендую разобрать код еще одного полезного примера — raspberrypi_capture, о котором сейчас и пойдет речь.
Просто снимок
Для того чтобы захватить один кадр, можно не ставить Qt и использовать стандартную SDK библиотеку. Достаточно собрать пример из папки raspberrypi_capture:
cd LeptonModule/software/raspberrypi_libs/leptonSDKEmb32PUB/raspberrypi_capture make
После этого запускаем бинарник, и получаем кадр в инопланетном формате PGM:
../raspberrypi_capture
PGM — редко встретишь на просторах интернета. Это очень примитивный формат, представляющий изображение в градациях серого. Файл PGM — это набор целых чисел, часто 16-битных.
Но градации серого — это не то что мы все ждем от снимков тепловизора. Даешь радужную палитру! Чтобы превратить pgm файлы во что-то удобное и цветное, я написал python-скрипт, конвертирующий pgm в png с заданной палитрой. Скрипт можно скачать на гитхабе:
https://github.com/makeitlab/software_tools/tree/master/Converters/Pgm2Png
Для работы скрипту потребуется библиотека pypng.
Скрипт имеет два аргумента. Первый аргумент — целевой файл. Это может быть файл, а могут быть все файлы в текущей директории (*). Второй аргумент задает масштаб, ибо не очень то интересно смотреть снимки разрешением 80×60. Собственно, пример использования:
python.exe pgmtocolor.py * 3
Смотрим на теплое
Для того, чтобы поснимать разные теплые уголки нашего хакспейса и внешнего мира, мы собрали на базе FLIR Lepton мобильный термофотоаппарат:
Хотелось скорее запустить аппарат, так что корпус получился весьма утилитарный:) Внутри размещается Raspberry Pi B rev.2, два аккумулятора 18650, стабилизатор напряжения типа UBEC и сам FLIR Lepton. Сзади корпуса имеется кнопка затвора, а на верхней боковине тумблер питания.
Наконец, небольшая подборка снимков хорошо известных предметов. Мой горячий ноутбук и трубы отопления.
Девушка с кружкой чая и суп на плите.
Блок питания ноутбука, торчащий из розетки — слева. Справа — чайник.
Другое место и время — офис компании Naumen. В полу коридора виден мощный след трубы отопления. Пол реально теплый в этом месте. Справа радиатор на стене под холодным окном.
Системник с открытым бортом и щиток с автоматами.
В окрестностях хакспейса MakeItLab. На левом снимке дверь изнутри здания. Видны мостики холода. Справа теплое окно второго этажа, снятое с улицы.
Капот припаркованной машины — слева. То, что под капотом — справа.
Теплый тормозной диск — слева. Человек, зашедший в хакспейс с улицы — справа. Щеки и подбородок еще не нагрелись:)
Конечно, тепловизором сегодня никого не удивишь. Готовый прибор можно купить за 100-150 тыс.руб., так что о дефиците технологии уже говорить не приходится. Но для целей DIY такие готовые приборы дороговаты — в 7 раз дороже, чем FLIR Lepton. В этих условиях датчик с неплохим разрешением за 250$ — это крайне выгодное предложение.
Применений для FLIR Lepton можно найти массу: от приборов контроля утечек тепла и охранных систем, до гибридных систем машинного зрения робота. Собственно, как раз для последнего варианта он нам и понадобился.
О новых идеях с тепловизором, читайте на нашем учебном портале Robotclass.ru!
Хорошая статья, все по полочкам! Насколько сложно реализовать передачу видео с тепловизера по wifi? Не пробовали?
OpenCV позволяет передавать видео по RTP протоколу, или по голому сокету. Но я не пробовал.
Подключил к распберри Лептон, но не пойму, можно ли увидеть картинку с Arduino uno?
Принципиальных проблем не вижу, но придется написать свою библиотеку для получения картинки. Хотя, возможно, кто-нибудь уже реализовал это. Погуглить надо бы.
Здравствуйте! Спасибо за статью!
Не подскажете, где бы найти данный модуль? Прошерстил интернет, максимум FLIR One нахожу для смартфонов. Или Seek Thermal тоже с разъемом usb для смартфонов. Но именно модуля для прямого подключения к малинке не нахожу.
Интересна тема совмещения видеопотока с камеры RasPiCam и Lepton.
Вот свежая версия модуля: https://www.seeedstudio.com/s/flir.html
Как я понимаю, для Lepton 3 эта программа не подходит? Он 160×120, а не 60×80.
Кстати, как оказалось, у вас CS подключён к SPI1, а в программе с github используется SPI0! А я гадал, почему же лептон не отвечает по SPI. То ли у вас ошибка, то ли на github поменялось ПО. В любом случае, с lepton 3 не работает. Сейчас я снял дамп обмена с лепотном. Попробую расшифровать.
Для Lepton 3 и Raspberry PI B моя версия ПО вот: https://github.com/da-nie/LeptonModule
Автору я отправил запрос на изменение его репозитория (pull request).