[Перевод] Интеллектуальный термометр

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

c574abd461cb6849d17eeee5996c76d0.jpg

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

Термометр, смонтированный у входа в дом

1. Возможности термометра


Хочу остановиться на самых важных возможностях устройства:
  • Термометр автоматически обнаруживает людей в кадре — человеческого участия для этого не требуется.
  • Одновременно можно измерять температуру у нескольких человек.
  • Температуру можно измерять в движении, людям нет необходимости останавливаться.

Общая стоимость устройства находится в районе $300. Дешёвым его не назовёшь, но оно на порядок дешевле, чем существующие коммерческие решения. При этом возможности моего интеллектуального термометра часто превосходят возможности таких решений. Код программной части моего проекта и используемые при его изготовлении 3D-модели выложены в общий доступ.

2. Компоненты термометра


Термометр собран из следующих основных компонентов:
Остановимся на них подробнее.

▍2.1. Инфракрасная камера


В проекте используется модуль камеры FLIR Lepton 3.5. Эта камера предлагает разрешение 160×120, что, за её цену, очень даже неплохо. Я, кроме того, использую в проекте вспомогательную плату PureThermal 2, которая позволяет обеспечить работу с инфракрасной камерой по интерфейсу USB.
ede5d3a3c7f6e6bff43f616e12132405.jpg

Камеры термометра (ранний прототип)

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

b1da75ce53141a4f18ce8a5dacf0f8b4.jpg

ИК-изображение можно легко преобразовать в массив температурных значений

Ещё несколько строк кода позволяют обнаружить самые горячие и самые холодные участки изображения.

youtu.be/EtPAQhjGifo

Радиометрическое измерение температуры

▍2.2. Обычная цветная камера


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

Вот три изображения, снятые используемыми в проекте камерами.
47d74c6f553f9676370de60358fdae56.jpg

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

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

Изображение с обычной камеры

Ниже показано видео, снятое моим устройством.

  • Синий канал содержит обычное изображение, снятое CM v2.
  • Красный канал содержит инфракрасное видео с пороговым уровнем в 30°C, позволяющее увидеть в кадре человека.

Изображения ещё не подогнаны друг к другу, поэтому кажется, что за мной следует мой тепловой призрак.

youtu.be/Jy8lnI7nCis

Комбинированное видео, снятое с помощью камер устройства

3. Программное обеспечение. Обнаружение объектов и детектирование лица


Для того чтобы узнать температуру тела человека сначала нужно найти его в кадре. Я, после экспериментов, пришёл к двум способам обнаружения людей в кадре и протестировал два подхода к решению этой задачи.

▍3.1. Универсальная система детектирования объектов, основанная на SSD


В первом варианте решения задачи детектирования объектов используется сеть SSD (SingleShot MultiBox Detector), обученная на наборе данных COCO. Это позволяет системе различать объекты 91 класса, представленные в этом наборе данных. Алгоритм работает на скорости 9 FPS, пользуясь встроенным графическим процессором Jetson Nano. Ниже показано изображение с ограничивающей рамкой, на котором обнаружен объект класса «person» (человек), с оценкой степени уверенности нейронной сети и с температурой, полученной из инфракрасного изображения (в градусах Цельсия и Фаренгейта).
3da67e5faa8c23e2b92187898241bcd5.jpg

Обнаружение человека с помощью SSD-сети

При этом система способна обнаруживать в кадре не только людей. SSD-сеть может находить и другие распространённые объекты, а с помощью инфракрасной камеры можно измерять их температуру.


Детектирование различных объектов с помощью SSD-сети и измерение их температуры

▍3.2. Обнаружение лица и глаз с использованием классификатора, основанного на каскаде Хаара


Для выяснения того, превышает ли температура человека нормальную, что может говорить о заболевании, достаточно обнаружить в кадре лицо. Находить область изображения, соответствующую всему телу человека, необязательно. Такой подход позволит получить даже более надёжные показатели, так как на результаты измерений не повлияет одежда. В этом исследовании 2008 года выяснено, что самые точные результаты при бесконтактном измерении температуры с помощью инфракрасных камер даёт анализ температуры внутреннего угла глазной щели. Именно поэтому данный вариант системы обнаруживает не только лица людей, но и их глаза.
16348d0984efda8ba1d1884c3f0fd7ff.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 винта M3×20 для сборки корпуса.
  • 12 винтов M2×8 для сборки блока камер.

4.2.1. Прикрепление камер и Jetson Nano к панелям корпуса


Обратите внимание на то, что представленные на рисунке WiFi-антенны для Jetson Nano необязательны. Они позволяют интегрировать интеллектуальный термометр с внешними службами (например — с сайтом или с мобильным приложением, которое может выдавать уведомления).
0befb50d8e252babeaaa351281e71e73.jpg

Крепление компонентов системы к панелям корпуса

4.2.2. Подключение конденсатора к линии 5В Jetson Nano (необязательно)


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

Конденсатор

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


88e4408ec6c287e9c9aa1ab9c26f7719.jpg

Блок камер прикручивается к верхней части корпуса

4.2.4. Закрепление светодиодного индикатора и WiFi-антенн


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

Установка светодиодного индикатора
4a75b89e8447a81ee15cf1f3c5aceecd.jpg

Установка основания антенн
ac1a3f25b17c98dcedd1d82e0f743bd6.jpg

Светодиодный индикатор и антенны установлены в корпусе

4.2.5. Подключение камеры к Jetson Nano


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

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

Общий вид устройства с подключённым к плате шлейфом камеры

4.2.6. Сборка корпуса


Теперь нужно, воспользовавшись винтами M3, скрепить верхнюю и нижнюю части корпуса. Головки винтов должны быть утоплены в поверхность нижней части корпуса.
298e4338cf16afe95142c65e32901e33.jpg

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

Сборка корпуса

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


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

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

Подключение питания

4.2.8. Закрепление устройства на стене


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

Закрепление устройства на стене

▍4.3. Установка программ


Посетите этот репозиторий и следуйте свежим инструкциям из README.md. А вот ipynb-файл, в котором я собрал всё необходимое для первых экспериментов с камерами и с обработкой инфракрасных изображений.

5. Поиск места для монтажа термометра


Интеллектуальный термометр может оказаться особенно полезным в людных местах. Например — в таких:
  • Входы в офисные здания.
  • Многоквартирные дома.
  • Станции метро и остановки общественного транспорта.
  • Входы в магазины.

807695831f59e18b2b64a5a272df106d.jpg

Термометр, установленный у входа в здание

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

35e15cc6abbe9f6d3ebfd47306e96746.jpg

Термометр, установленный рядом с дверным звонком

В общем-то, его можно установить в любом месте, где на него можно подать питание (USB, 5В).

8dce10ce1191199df9ca96cf0e2374b5.jpg

Термометр, закреплённый на дереве и получающий питание от пауэрбанка

Итоги


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

Напомню, что свежую версию кода проекта можно найти здесь. А здесь можно скачать файлы для 3D-печати корпуса.

Хотите создать собственный интеллектуальный термометр?

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru