Автор статьи, перевод которой мы сегодня публикуем, хочет рассказать об устройстве AI Fever Screening Thermometer, разработкой которого он занимался около двух месяцев. Оно, с использованием термальной (инфракрасной) и обычной (цветной) камер, позволяет решать следующие задачи:
- Обнаружение людей, попадающих в кадр.
- Бесконтактное измерение температуры их кожи с использованием данных термальной камеры.

Обнаружение лица и измерение температуры

Термометр, смонтированный у входа в дом
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.

Камеры термометра (ранний прототип)
Самая важная для нас возможность камеры FLIR Lepton 3.5 заключается в том, что она позволяет выполнять радиометрические измерения температуры. Это значит, что с использованием буквально нескольких строчек кода можно получить сведения о температуре каждого пикселя захваченного камерой изображения. Подобное предлагают не все LWIR-камеры — (Longwave Infrared, длинноволновые инфракрасные камеры).

ИК-изображение можно легко преобразовать в массив температурных значений
Ещё несколько строк кода позволяют обнаружить самые горячие и самые холодные участки изображения.
Радиометрическое измерение температуры
▍2.2. Обычная цветная камера
Я решил использовать в проекте камеру Raspberry Pi Camera Module v2 (далее — CM v2) по следующим причинам:
- Эта камера готова к работе с NVIDIA Jetson Nano.
- На её модуле имеется 4 крепёжных отверстия, поэтому её легко смонтировать около ИК-камеры.
- Угол обзора камеры равен 62.2°, что очень близко к 57° — к углу обзора инфракрасной камеры. Изображения с разных камер, всё равно, нужно подгонять друг к другу, совмещать, но благодаря выбору CM v2 приходится «выбрасывать» меньше пикселей, чем, скажем, пришлось бы при использовании камеры с углом обзора в 120°.
Вот три изображения, снятые используемыми в проекте камерами.

8-битное изображение, снятое в инфракрасном диапазоне

Инфракрасное изображение (псевдоцвет)

Изображение с обычной камеры
Ниже показано видео, снятое моим устройством.
- Синий канал содержит обычное изображение, снятое CM v2.
- Красный канал содержит инфракрасное видео с пороговым уровнем в 30°C, позволяющее увидеть в кадре человека.
Изображения ещё не подогнаны друг к другу, поэтому кажется, что за мной следует мой тепловой призрак.
Комбинированное видео, снятое с помощью камер устройства
3. Программное обеспечение. Обнаружение объектов и детектирование лица
Для того чтобы узнать температуру тела человека сначала нужно найти его в кадре. Я, после экспериментов, пришёл к двум способам обнаружения людей в кадре и протестировал два подхода к решению этой задачи.
▍3.1. Универсальная система детектирования объектов, основанная на SSD
В первом варианте решения задачи детектирования объектов используется сеть SSD (SingleShot MultiBox Detector), обученная на наборе данных COCO. Это позволяет системе различать объекты 91 класса, представленные в этом наборе данных. Алгоритм работает на скорости 9 FPS, пользуясь встроенным графическим процессором Jetson Nano. Ниже показано изображение с ограничивающей рамкой, на котором обнаружен объект класса «person» (человек), с оценкой степени уверенности нейронной сети и с температурой, полученной из инфракрасного изображения (в градусах Цельсия и Фаренгейта).

Обнаружение человека с помощью SSD-сети
При этом система способна обнаруживать в кадре не только людей. SSD-сеть может находить и другие распространённые объекты, а с помощью инфракрасной камеры можно измерять их температуру.
Детектирование различных объектов с помощью SSD-сети и измерение их температуры
▍3.2. Обнаружение лица и глаз с использованием классификатора, основанного на каскаде Хаара
Для выяснения того, превышает ли температура человека нормальную, что может говорить о заболевании, достаточно обнаружить в кадре лицо. Находить область изображения, соответствующую всему телу человека, необязательно. Такой подход позволит получить даже более надёжные показатели, так как на результаты измерений не повлияет одежда. В этом исследовании 2008 года выяснено, что самые точные результаты при бесконтактном измерении температуры с помощью инфракрасных камер даёт анализ температуры внутреннего угла глазной щели. Именно поэтому данный вариант системы обнаруживает не только лица людей, но и их глаза.

Графический интерфейс
Обнаружение лица и глаз реализовано с использованием каскада Хаара. Подробности об этом алгоритме можно узнать из данного учебного руководства по 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 необязательны. Они позволяют интегрировать интеллектуальный термометр с внешними службами (например — с сайтом или с мобильным приложением, которое может выдавать уведомления).

Крепление компонентов системы к панелям корпуса
4.2.2. Подключение конденсатора к линии 5В Jetson Nano (необязательно)
Камера FLIR Lepton потребляет много тока в момент съёмки изображения. Несколько раз это приводило к выключению моего Jetson Nano. Поэтому я, чтобы предотвратить подобное, воспользовался конденсатором. Если же в используемом вами блоке питания имеется очень хороший фильтр, то вы можете обойтись и без конденсатора.

Конденсатор
4.2.3. Соединение блока камер с корпусом

Блок камер прикручивается к верхней части корпуса
4.2.4. Закрепление светодиодного индикатора и WiFi-антенн
Светодиодный индикатор нужно закрепить в соответствующем месте корпуса. Если в вашем проекте используются WiFi-антенны — на этом этапе сборки устройства закрепите в корпусе и их.

Установка светодиодного индикатора

Установка основания антенн

Светодиодный индикатор и антенны установлены в корпусе
4.2.5. Подключение камеры к Jetson Nano
Теперь надо подключить шлейф камеры к Jetson Nano. Здесь надо действовать осторожно, иначе можно повредить или сам шлейф, или разъём платы, к которому он подключается.

Подключение шлейфа камеры к плате

Общий вид устройства с подключённым к плате шлейфом камеры
4.2.6. Сборка корпуса
Теперь нужно, воспользовавшись винтами M3, скрепить верхнюю и нижнюю части корпуса. Головки винтов должны быть утоплены в поверхность нижней части корпуса.

Выравнивание частей корпуса относительно друг друга

Сборка корпуса
4.2.7. Подключение инфракрасной камеры
Подключим камеру FLIR Lepton к плате, воспользовавшись коротким USB кабелем, а после этого подключим к плате источник питания на 5В (питание может подаваться через USB или через разъём для блока питания).

Подключение инфракрасной камеры

Подключение питания
4.2.8. Закрепление устройства на стене
Устройство можно повесить на гвоздь, вбитый в стену, а можно воспользоваться двусторонним скотчем. Я выяснил, что если закрепить его на высоте примерно в 170 см, это позволит измерять температуру и у высоких, и у невысоких людей.

Закрепление устройства на стене
▍4.3. Установка программ
Посетите этот репозиторий и следуйте свежим инструкциям из README.md
. А вот ipynb-файл, в котором я собрал всё необходимое для первых экспериментов с камерами и с обработкой инфракрасных изображений.
5. Поиск места для монтажа термометра
Интеллектуальный термометр может оказаться особенно полезным в людных местах. Например — в таких:
- Входы в офисные здания.
- Многоквартирные дома.
- Станции метро и остановки общественного транспорта.
- Входы в магазины.

Термометр, установленный у входа в здание
Устройство можно просто установить рядом с дверным звонком.

Термометр, установленный рядом с дверным звонком
В общем-то, его можно установить в любом месте, где на него можно подать питание (USB, 5В).

Термометр, закреплённый на дереве и получающий питание от пауэрбанка
Итоги
Я подумываю об улучшениях моего термометра, которые, в основном, касаются удешевления проекта, а не его функционала:
- Можно перейти на использование более дешёвого одноплатного компьютера. Например, если использовать в моём проекте Raspberry Pi, это позволит удешевить его на $35-100.
- Можно сделать собственную печатную плату с интегрированными светодиодами и с встроенным разъёмом для инфракрасной камеры. Это позволит ещё сильнее удешевить конструкцию, так как позволит избавиться от вспомогательной платы, используемой для подключения инфракрасной камеры, и от светодиодов Neopixel.
Напомню, что свежую версию кода проекта можно найти здесь. А здесь можно скачать файлы для 3D-печати корпуса.
Хотите создать собственный интеллектуальный термометр?
Автор: ru_vds