Автор статьи, перевод которой мы сегодня публикуем, хочет рассказать об устройстве AI Fever Screening Thermometer, разработкой которого он занимался около двух месяцев. Оно, с использованием термальной (инфракрасной) и обычной (цветной) камер, позволяет решать следующие задачи:
- Обнаружение людей, попадающих в кадр.
- Бесконтактное измерение температуры их кожи с использованием данных термальной камеры.
![Интеллектуальный термометр - 1 Интеллектуальный термометр - 1](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr.jpg)
Обнаружение лица и измерение температуры
![Интеллектуальный термометр - 2 Интеллектуальный термометр - 2](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-2.jpg)
Термометр, смонтированный у входа в дом
1. Возможности термометра
Хочу остановиться на самых важных возможностях устройства:
- Термометр автоматически обнаруживает людей в кадре — человеческого участия для этого не требуется.
- Одновременно можно измерять температуру у нескольких человек.
- Температуру можно измерять в движении, людям нет необходимости останавливаться.
Общая стоимость устройства находится в районе $300. Дешёвым его не назовёшь, но оно на порядок дешевле, чем существующие коммерческие решения. При этом возможности моего интеллектуального термометра часто превосходят возможности таких решений. Код программной части моего проекта и используемые при его изготовлении 3D-модели выложены в общий доступ.
2. Компоненты термометра
Термометр собран из следующих основных компонентов:
- Одноплатный компьютер: NVIDIA Jetson Nano Developer Kit.
- Инфракрасная (ИК, Infrared, IR) камера: FLIR Lepton 3.5 Thermal Camera Module.
- Обычная цветная камера: Raspberry Pi Camera Module V2.
Остановимся на них подробнее.
▍2.1. Инфракрасная камера
В проекте используется модуль камеры FLIR Lepton 3.5. Эта камера предлагает разрешение 160x120, что, за её цену, очень даже неплохо. Я, кроме того, использую в проекте вспомогательную плату PureThermal 2, которая позволяет обеспечить работу с инфракрасной камерой по интерфейсу USB.
![Интеллектуальный термометр - 3 Интеллектуальный термометр - 3](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-3.jpg)
Камеры термометра (ранний прототип)
Самая важная для нас возможность камеры FLIR Lepton 3.5 заключается в том, что она позволяет выполнять радиометрические измерения температуры. Это значит, что с использованием буквально нескольких строчек кода можно получить сведения о температуре каждого пикселя захваченного камерой изображения. Подобное предлагают не все LWIR-камеры — (Longwave Infrared, длинноволновые инфракрасные камеры).
![Интеллектуальный термометр - 4 Интеллектуальный термометр - 4](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-4.jpg)
ИК-изображение можно легко преобразовать в массив температурных значений
Ещё несколько строк кода позволяют обнаружить самые горячие и самые холодные участки изображения.
Радиометрическое измерение температуры
▍2.2. Обычная цветная камера
Я решил использовать в проекте камеру Raspberry Pi Camera Module v2 (далее — CM v2) по следующим причинам:
- Эта камера готова к работе с NVIDIA Jetson Nano.
- На её модуле имеется 4 крепёжных отверстия, поэтому её легко смонтировать около ИК-камеры.
- Угол обзора камеры равен 62.2°, что очень близко к 57° — к углу обзора инфракрасной камеры. Изображения с разных камер, всё равно, нужно подгонять друг к другу, совмещать, но благодаря выбору CM v2 приходится «выбрасывать» меньше пикселей, чем, скажем, пришлось бы при использовании камеры с углом обзора в 120°.
Вот три изображения, снятые используемыми в проекте камерами.
![Интеллектуальный термометр - 5 Интеллектуальный термометр - 5](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-5.jpg)
8-битное изображение, снятое в инфракрасном диапазоне
![Интеллектуальный термометр - 6 Интеллектуальный термометр - 6](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-6.jpg)
Инфракрасное изображение (псевдоцвет)
![Интеллектуальный термометр - 7 Интеллектуальный термометр - 7](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-7.jpg)
Изображение с обычной камеры
Ниже показано видео, снятое моим устройством.
- Синий канал содержит обычное изображение, снятое CM v2.
- Красный канал содержит инфракрасное видео с пороговым уровнем в 30°C, позволяющее увидеть в кадре человека.
Изображения ещё не подогнаны друг к другу, поэтому кажется, что за мной следует мой тепловой призрак.
Комбинированное видео, снятое с помощью камер устройства
3. Программное обеспечение. Обнаружение объектов и детектирование лица
Для того чтобы узнать температуру тела человека сначала нужно найти его в кадре. Я, после экспериментов, пришёл к двум способам обнаружения людей в кадре и протестировал два подхода к решению этой задачи.
▍3.1. Универсальная система детектирования объектов, основанная на SSD
В первом варианте решения задачи детектирования объектов используется сеть SSD (SingleShot MultiBox Detector), обученная на наборе данных COCO. Это позволяет системе различать объекты 91 класса, представленные в этом наборе данных. Алгоритм работает на скорости 9 FPS, пользуясь встроенным графическим процессором Jetson Nano. Ниже показано изображение с ограничивающей рамкой, на котором обнаружен объект класса «person» (человек), с оценкой степени уверенности нейронной сети и с температурой, полученной из инфракрасного изображения (в градусах Цельсия и Фаренгейта).
![Интеллектуальный термометр - 8 Интеллектуальный термометр - 8](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-8.jpg)
Обнаружение человека с помощью SSD-сети
При этом система способна обнаруживать в кадре не только людей. SSD-сеть может находить и другие распространённые объекты, а с помощью инфракрасной камеры можно измерять их температуру.
Детектирование различных объектов с помощью SSD-сети и измерение их температуры
▍3.2. Обнаружение лица и глаз с использованием классификатора, основанного на каскаде Хаара
Для выяснения того, превышает ли температура человека нормальную, что может говорить о заболевании, достаточно обнаружить в кадре лицо. Находить область изображения, соответствующую всему телу человека, необязательно. Такой подход позволит получить даже более надёжные показатели, так как на результаты измерений не повлияет одежда. В этом исследовании 2008 года выяснено, что самые точные результаты при бесконтактном измерении температуры с помощью инфракрасных камер даёт анализ температуры внутреннего угла глазной щели. Именно поэтому данный вариант системы обнаруживает не только лица людей, но и их глаза.
![Интеллектуальный термометр - 9 Интеллектуальный термометр - 9](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-9.jpg)
Графический интерфейс
Обнаружение лица и глаз реализовано с использованием каскада Хаара. Подробности об этом алгоритме можно узнать из данного учебного руководства по OpenCV.
Хотя этот алгоритм не отличается той же универсальностью, что и SSD, я выяснил, что он, основываясь на анализе лица человека, даёт возможность измерить температуру точнее, чем при проведении измерений, принимающих во внимание всё тело.
Обнаружение лица и глаз
▍3.3. Выявление признаков заболевания
В соответствии с этим материалом я исхожу из предположения о том, что излучательная способность кожи человека равна 0,98. Порог срабатывания сигнализатора установлен в 37.5°C.
▍3.4. Пользовательский интерфейс
Один из вариантов использования моего устройства заключается в том, что его просто подключают к компьютерному монитору и наблюдают за результатами измерения температуры людей, попадающих в кадр. Но я понял, что подобный способ применения созданного мной термометра во многих местах окажется неудобным. Именно поэтому я включил в его состав лампу аварийной сигнализации, представляющую собой линейку из 8 светодиодов (Neopixel Stick 8). Так устройство становится более самодостаточным.
4. Сборка термометра
Здесь я приведу инструкции для тех, кто хочет собрать собственный интеллектуальный термометр.
▍4.1. Печать корпуса
Я создал для термометра корпус, который можно напечатать на 3D-принтере. Модель можно скачать отсюда. Эту модель, пользуясь возможностями сайта autodesk360.com, можно преобразовать в необходимый формат (.stl, .step, .f3d). Тут представлен мой первый опыт работы с форматом Autodesk Fusion 360 (.f3d), поэтому если у вас возникнут сложности с моей моделью — дайте мне знать. Я могу загрузить файлы и на Thingiverse.
▍4.2. Сборка устройства
После того, как вы напечатаете на 3D-принтере корпус, вам понадобятся следующие крепёжные элементы:
- 4 винта M3x20 для сборки корпуса.
- 12 винтов M2x8 для сборки блока камер.
4.2.1. Прикрепление камер и Jetson Nano к панелям корпуса
Обратите внимание на то, что представленные на рисунке WiFi-антенны для Jetson Nano необязательны. Они позволяют интегрировать интеллектуальный термометр с внешними службами (например — с сайтом или с мобильным приложением, которое может выдавать уведомления).
![Интеллектуальный термометр - 10 Интеллектуальный термометр - 10](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-10.jpg)
Крепление компонентов системы к панелям корпуса
4.2.2. Подключение конденсатора к линии 5В Jetson Nano (необязательно)
Камера FLIR Lepton потребляет много тока в момент съёмки изображения. Несколько раз это приводило к выключению моего Jetson Nano. Поэтому я, чтобы предотвратить подобное, воспользовался конденсатором. Если же в используемом вами блоке питания имеется очень хороший фильтр, то вы можете обойтись и без конденсатора.
![Интеллектуальный термометр - 11 Интеллектуальный термометр - 11](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-11.jpg)
Конденсатор
4.2.3. Соединение блока камер с корпусом
![Интеллектуальный термометр - 12 Интеллектуальный термометр - 12](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-12.jpg)
Блок камер прикручивается к верхней части корпуса
4.2.4. Закрепление светодиодного индикатора и WiFi-антенн
Светодиодный индикатор нужно закрепить в соответствующем месте корпуса. Если в вашем проекте используются WiFi-антенны — на этом этапе сборки устройства закрепите в корпусе и их.
![Интеллектуальный термометр - 13 Интеллектуальный термометр - 13](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-13.jpg)
Установка светодиодного индикатора
![Интеллектуальный термометр - 14 Интеллектуальный термометр - 14](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-14.jpg)
Установка основания антенн
![Интеллектуальный термометр - 15 Интеллектуальный термометр - 15](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-15.jpg)
Светодиодный индикатор и антенны установлены в корпусе
4.2.5. Подключение камеры к Jetson Nano
Теперь надо подключить шлейф камеры к Jetson Nano. Здесь надо действовать осторожно, иначе можно повредить или сам шлейф, или разъём платы, к которому он подключается.
![Интеллектуальный термометр - 16 Интеллектуальный термометр - 16](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-16.jpg)
Подключение шлейфа камеры к плате
![Интеллектуальный термометр - 17 Интеллектуальный термометр - 17](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-17.jpg)
Общий вид устройства с подключённым к плате шлейфом камеры
4.2.6. Сборка корпуса
Теперь нужно, воспользовавшись винтами M3, скрепить верхнюю и нижнюю части корпуса. Головки винтов должны быть утоплены в поверхность нижней части корпуса.
![Интеллектуальный термометр - 18 Интеллектуальный термометр - 18](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-18.jpg)
Выравнивание частей корпуса относительно друг друга
![Интеллектуальный термометр - 19 Интеллектуальный термометр - 19](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-19.jpg)
Сборка корпуса
4.2.7. Подключение инфракрасной камеры
Подключим камеру FLIR Lepton к плате, воспользовавшись коротким USB кабелем, а после этого подключим к плате источник питания на 5В (питание может подаваться через USB или через разъём для блока питания).
![Интеллектуальный термометр - 20 Интеллектуальный термометр - 20](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-20.jpg)
Подключение инфракрасной камеры
![Интеллектуальный термометр - 21 Интеллектуальный термометр - 21](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-21.jpg)
Подключение питания
4.2.8. Закрепление устройства на стене
Устройство можно повесить на гвоздь, вбитый в стену, а можно воспользоваться двусторонним скотчем. Я выяснил, что если закрепить его на высоте примерно в 170 см, это позволит измерять температуру и у высоких, и у невысоких людей.
![Интеллектуальный термометр - 22 Интеллектуальный термометр - 22](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-22.jpg)
Закрепление устройства на стене
▍4.3. Установка программ
Посетите этот репозиторий и следуйте свежим инструкциям из README.md
. А вот ipynb-файл, в котором я собрал всё необходимое для первых экспериментов с камерами и с обработкой инфракрасных изображений.
5. Поиск места для монтажа термометра
Интеллектуальный термометр может оказаться особенно полезным в людных местах. Например — в таких:
- Входы в офисные здания.
- Многоквартирные дома.
- Станции метро и остановки общественного транспорта.
- Входы в магазины.
![Интеллектуальный термометр - 23 Интеллектуальный термометр - 23](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-23.jpg)
Термометр, установленный у входа в здание
Устройство можно просто установить рядом с дверным звонком.
![Интеллектуальный термометр - 24 Интеллектуальный термометр - 24](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-24.jpg)
Термометр, установленный рядом с дверным звонком
В общем-то, его можно установить в любом месте, где на него можно подать питание (USB, 5В).
![Интеллектуальный термометр - 25 Интеллектуальный термометр - 25](https://www.pvsm.ru/images/2021/03/17/intellektualnyi-termometr-25.jpg)
Термометр, закреплённый на дереве и получающий питание от пауэрбанка
Итоги
Я подумываю об улучшениях моего термометра, которые, в основном, касаются удешевления проекта, а не его функционала:
- Можно перейти на использование более дешёвого одноплатного компьютера. Например, если использовать в моём проекте Raspberry Pi, это позволит удешевить его на $35-100.
- Можно сделать собственную печатную плату с интегрированными светодиодами и с встроенным разъёмом для инфракрасной камеры. Это позволит ещё сильнее удешевить конструкцию, так как позволит избавиться от вспомогательной платы, используемой для подключения инфракрасной камеры, и от светодиодов Neopixel.
Напомню, что свежую версию кода проекта можно найти здесь. А здесь можно скачать файлы для 3D-печати корпуса.
Хотите создать собственный интеллектуальный термометр?
Автор: ru_vds