- PVSM.RU - https://www.pvsm.ru -

Интеллектуальный термометр

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

  • Обнаружение людей, попадающих в кадр.
  • Бесконтактное измерение температуры их кожи с использованием данных термальной камеры.

Интеллектуальный термометр - 1


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

Интеллектуальный термометр - 2

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

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

Хочу остановиться на самых важных возможностях устройства:

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

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

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

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

Остановимся на них подробнее.

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

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

Интеллектуальный термометр - 3

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

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

Интеллектуальный термометр - 4

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

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

youtu.be/EtPAQhjGifo [5]

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

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

Я решил использовать в проекте камеру Raspberry Pi Camera Module v2 (далее — CM v2) по следующим причинам:

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

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

Интеллектуальный термометр - 5

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

Интеллектуальный термометр - 6

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

Интеллектуальный термометр - 7

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

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

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

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

youtu.be/Jy8lnI7nCis [6]

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

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

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

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

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

Интеллектуальный термометр - 8

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

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

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

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

Для выяснения того, превышает ли температура человека нормальную, что может говорить о заболевании, достаточно обнаружить в кадре лицо. Находить область изображения, соответствующую всему телу человека, необязательно. Такой подход позволит получить даже более надёжные показатели, так как на результаты измерений не повлияет одежда. В этом [9] исследовании 2008 года выяснено, что самые точные результаты при бесконтактном измерении температуры с помощью инфракрасных камер даёт анализ температуры внутреннего угла глазной щели. Именно поэтому данный вариант системы обнаруживает не только лица людей, но и их глаза.

Интеллектуальный термометр - 9

Графический интерфейс

Обнаружение лица и глаз реализовано с использованием каскада Хаара. Подробности об этом алгоритме можно узнать из данного [10] учебного руководства по OpenCV.

Хотя этот алгоритм не отличается той же универсальностью, что и SSD, я выяснил, что он, основываясь на анализе лица человека, даёт возможность измерить температуру точнее, чем при проведении измерений, принимающих во внимание всё тело.

Обнаружение лица и глаз

▍3.3. Выявление признаков заболевания

В соответствии с этим [11] материалом я исхожу из предположения о том, что излучательная способность кожи человека равна 0,98. Порог срабатывания сигнализатора установлен в 37.5°C.

▍3.4. Пользовательский интерфейс

Один из вариантов использования моего устройства заключается в том, что его просто подключают к компьютерному монитору и наблюдают за результатами измерения температуры людей, попадающих в кадр. Но я понял, что подобный способ применения созданного мной термометра во многих местах окажется неудобным. Именно поэтому я включил в его состав лампу аварийной сигнализации, представляющую собой линейку из 8 светодиодов (Neopixel Stick 8). Так устройство становится более самодостаточным.

4. Сборка термометра

Здесь я приведу инструкции для тех, кто хочет собрать собственный интеллектуальный термометр.

▍4.1. Печать корпуса

Я создал для термометра корпус, который можно напечатать на 3D-принтере. Модель можно скачать отсюда [12]. Эту модель, пользуясь возможностями сайта 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

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

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

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

Интеллектуальный термометр - 11

Конденсатор

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

Интеллектуальный термометр - 12

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

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

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

Интеллектуальный термометр - 13

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

Интеллектуальный термометр - 14

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

Интеллектуальный термометр - 15

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

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

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

Интеллектуальный термометр - 16

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

Интеллектуальный термометр - 17

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

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

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

Интеллектуальный термометр - 18

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

Интеллектуальный термометр - 19

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

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

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

Интеллектуальный термометр - 20

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

Интеллектуальный термометр - 21

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

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

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

Интеллектуальный термометр - 22

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

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

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

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

Интеллектуальный термометр может оказаться особенно полезным в людных местах. Например — в таких:

  • Входы в офисные здания.
  • Многоквартирные дома.
  • Станции метро и остановки общественного транспорта.
  • Входы в магазины.

Интеллектуальный термометр - 23

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

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

Интеллектуальный термометр - 24

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

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

Интеллектуальный термометр - 25

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

Итоги

Я подумываю об улучшениях моего термометра, которые, в основном, касаются удешевления проекта, а не его функционала:

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

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

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

Интеллектуальный термометр - 26 [15]

Автор: ru_vds

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/362541

Ссылки в тексте:

[1] NVIDIA Jetson Nano Developer Kit: https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-nano-developer-kit/

[2] FLIR Lepton 3.5 Thermal Camera Module: https://www.flir.com/products/lepton/

[3] Raspberry Pi Camera Module V2: https://www.raspberrypi.org/products/camera-module-v2/

[4] PureThermal 2: https://store.groupgets.com/products/purethermal-2

[5] youtu.be/EtPAQhjGifo: https://youtu.be/EtPAQhjGifo

[6] youtu.be/Jy8lnI7nCis: https://youtu.be/Jy8lnI7nCis

[7] SSD: https://arxiv.org/abs/1512.02325

[8] COCO: https://cocodataset.org/

[9] этом: http://qirt.org/archives/qirt2008/papers/03_07_17.pdf

[10] данного: https://docs.opencv.org/4.3.0/db/d28/tutorial_cascade_classifier.html

[11] этим: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7168465/

[12] отсюда: https://a360.co/3g8kfqV

[13] этот: https://github.com/tomek-l/crowd-thermometer

[14] вот: https://github.com/tomek-l/crowd-thermometer/blob/master/Getting%20Started%20with%20Cameras.ipynb

[15] Image: http://ruvds.com/ru-rub?utm_source=habr&utm_medium=article&utm_campaign=ruvds&utm_content=termometr-iq#order

[16] Источник: https://habr.com/ru/post/546972/?utm_source=habrahabr&utm_medium=rss&utm_campaign=546972