- Обнаружение людей, попадающих в кадр.
- Бесконтактное измерение температуры их кожи с использованием данных термальной камеры.
![](https://habrastorage.org/getpro/habr/post_images/c57/4ab/d46/c574abd461cb6849d17eeee5996c76d0.jpg)
Обнаружение лица и измерение температуры
![](https://habrastorage.org/getpro/habr/post_images/3eb/813/4c8/3eb8134c8dbd5501b63ff96641c52af4.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.
![](https://habrastorage.org/getpro/habr/post_images/ede/5d3/a3c/ede5d3a3c7f6e6bff43f616e12132405.jpg)
Камеры термометра (ранний прототип)
Самая важная для нас возможность камеры FLIR Lepton 3.5 заключается в том, что она позволяет выполнять радиометрические измерения температуры. Это значит, что с использованием буквально нескольких строчек кода можно получить сведения о температуре каждого пикселя захваченного камерой изображения. Подобное предлагают не все LWIR-камеры — (Longwave Infrared, длинноволновые инфракрасные камеры).
![](https://habrastorage.org/getpro/habr/post_images/b1d/a75/ce5/b1da75ce53141a4f18ce8a5dacf0f8b4.jpg)
ИК-изображение можно легко преобразовать в массив температурных значений
Ещё несколько строк кода позволяют обнаружить самые горячие и самые холодные участки изображения.
youtu.be/EtPAQhjGifo
Радиометрическое измерение температуры
?2.2. Обычная цветная камера
Я решил использовать в проекте камеру Raspberry Pi Camera Module v2 (далее — CM v2) по следующим причинам:
- Эта камера готова к работе с NVIDIA Jetson Nano.
- На её модуле имеется 4 крепёжных отверстия, поэтому её легко смонтировать около ИК-камеры.
- Угол обзора камеры равен 62.2°, что очень близко к 57° — к углу обзора инфракрасной камеры. Изображения с разных камер, всё равно, нужно подгонять друг к другу, совмещать, но благодаря выбору CM v2 приходится «выбрасывать» меньше пикселей, чем, скажем, пришлось бы при использовании камеры с углом обзора в 120°.
Вот три изображения, снятые используемыми в проекте камерами.
![](https://habrastorage.org/getpro/habr/post_images/47d/74c/6f5/47d74c6f553f9676370de60358fdae56.jpg)
8-битное изображение, снятое в инфракрасном диапазоне
![](https://habrastorage.org/getpro/habr/post_images/bee/fc4/bab/beefc4babee8c483ac019a922b398d1a.jpg)
Инфракрасное изображение (псевдоцвет)
![](https://habrastorage.org/getpro/habr/post_images/255/3ca/4f9/2553ca4f92adefbdff45bc244b921c59.jpg)
Изображение с обычной камеры
Ниже показано видео, снятое моим устройством.
- Синий канал содержит обычное изображение, снятое CM v2.
- Красный канал содержит инфракрасное видео с пороговым уровнем в 30°C, позволяющее увидеть в кадре человека.
Изображения ещё не подогнаны друг к другу, поэтому кажется, что за мной следует мой тепловой призрак.
youtu.be/Jy8lnI7nCis
Комбинированное видео, снятое с помощью камер устройства
3. Программное обеспечение. Обнаружение объектов и детектирование лица
Для того чтобы узнать температуру тела человека сначала нужно найти его в кадре. Я, после экспериментов, пришёл к двум способам обнаружения людей в кадре и протестировал два подхода к решению этой задачи.
?3.1. Универсальная система детектирования объектов, основанная на SSD
В первом варианте решения задачи детектирования объектов используется сеть SSD (SingleShot MultiBox Detector), обученная на наборе данных COCO. Это позволяет системе различать объекты 91 класса, представленные в этом наборе данных. Алгоритм работает на скорости 9 FPS, пользуясь встроенным графическим процессором Jetson Nano. Ниже показано изображение с ограничивающей рамкой, на котором обнаружен объект класса «person» (человек), с оценкой степени уверенности нейронной сети и с температурой, полученной из инфракрасного изображения (в градусах Цельсия и Фаренгейта).
![](https://habrastorage.org/getpro/habr/post_images/3da/67e/5fa/3da67e5faa8c23e2b92187898241bcd5.jpg)
Обнаружение человека с помощью SSD-сети
При этом система способна обнаруживать в кадре не только людей. SSD-сеть может находить и другие распространённые объекты, а с помощью инфракрасной камеры можно измерять их температуру.
Детектирование различных объектов с помощью SSD-сети и измерение их температуры
?3.2. Обнаружение лица и глаз с использованием классификатора, основанного на каскаде Хаара
Для выяснения того, превышает ли температура человека нормальную, что может говорить о заболевании, достаточно обнаружить в кадре лицо. Находить область изображения, соответствующую всему телу человека, необязательно. Такой подход позволит получить даже более надёжные показатели, так как на результаты измерений не повлияет одежда. В этом исследовании 2008 года выяснено, что самые точные результаты при бесконтактном измерении температуры с помощью инфракрасных камер даёт анализ температуры внутреннего угла глазной щели. Именно поэтому данный вариант системы обнаруживает не только лица людей, но и их глаза.
![](https://habrastorage.org/getpro/habr/post_images/163/48d/098/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 винта M3x20 для сборки корпуса.
- 12 винтов M2x8 для сборки блока камер.
4.2.1. Прикрепление камер и Jetson Nano к панелям корпуса
Обратите внимание на то, что представленные на рисунке WiFi-антенны для Jetson Nano необязательны. Они позволяют интегрировать интеллектуальный термометр с внешними службами (например — с сайтом или с мобильным приложением, которое может выдавать уведомления).
![](https://habrastorage.org/getpro/habr/post_images/0be/fb5/0d8/0befb50d8e252babeaaa351281e71e73.jpg)
Крепление компонентов системы к панелям корпуса
4.2.2. Подключение конденсатора к линии 5В Jetson Nano (необязательно)
Камера FLIR Lepton потребляет много тока в момент съёмки изображения. Несколько раз это приводило к выключению моего Jetson Nano. Поэтому я, чтобы предотвратить подобное, воспользовался конденсатором. Если же в используемом вами блоке питания имеется очень хороший фильтр, то вы можете обойтись и без конденсатора.
![](https://habrastorage.org/getpro/habr/post_images/75c/758/c3e/75c758c3e9210c9b8d396fb88daa4f9e.jpg)
Конденсатор
4.2.3. Соединение блока камер с корпусом
![](https://habrastorage.org/getpro/habr/post_images/88e/440/8ec/88e4408ec6c287e9c9aa1ab9c26f7719.jpg)
Блок камер прикручивается к верхней части корпуса
4.2.4. Закрепление светодиодного индикатора и WiFi-антенн
Светодиодный индикатор нужно закрепить в соответствующем месте корпуса. Если в вашем проекте используются WiFi-антенны — на этом этапе сборки устройства закрепите в корпусе и их.
![](https://habrastorage.org/getpro/habr/post_images/804/ab8/cbd/804ab8cbd6ef5d6624734cd1dc06fee0.jpg)
Установка светодиодного индикатора
![](https://habrastorage.org/getpro/habr/post_images/4a7/5b8/9e8/4a75b89e8447a81ee15cf1f3c5aceecd.jpg)
Установка основания антенн
![](https://habrastorage.org/getpro/habr/post_images/ac1/a3f/25b/ac1a3f25b17c98dcedd1d82e0f743bd6.jpg)
Светодиодный индикатор и антенны установлены в корпусе
4.2.5. Подключение камеры к Jetson Nano
Теперь надо подключить шлейф камеры к Jetson Nano. Здесь надо действовать осторожно, иначе можно повредить или сам шлейф, или разъём платы, к которому он подключается.
![](https://habrastorage.org/getpro/habr/post_images/a58/fdb/b19/a58fdbb19f2e3541230e37fdc5d1828b.jpg)
Подключение шлейфа камеры к плате
![](https://habrastorage.org/getpro/habr/post_images/670/564/c5c/670564c5cde8b3205a9e3156adea1b4d.jpg)
Общий вид устройства с подключённым к плате шлейфом камеры
4.2.6. Сборка корпуса
Теперь нужно, воспользовавшись винтами M3, скрепить верхнюю и нижнюю части корпуса. Головки винтов должны быть утоплены в поверхность нижней части корпуса.
![](https://habrastorage.org/getpro/habr/post_images/298/e43/38c/298e4338cf16afe95142c65e32901e33.jpg)
Выравнивание частей корпуса относительно друг друга
![](https://habrastorage.org/getpro/habr/post_images/646/78a/7a8/64678a7a80cad98ef370b93d1e478df2.jpg)
Сборка корпуса
4.2.7. Подключение инфракрасной камеры
Подключим камеру FLIR Lepton к плате, воспользовавшись коротким USB кабелем, а после этого подключим к плате источник питания на 5В (питание может подаваться через USB или через разъём для блока питания).
![](https://habrastorage.org/getpro/habr/post_images/e84/3ee/a20/e843eea20f67836e82fcb06a7838b746.jpg)
Подключение инфракрасной камеры
![](https://habrastorage.org/getpro/habr/post_images/292/f60/e54/292f60e5476aff357c8a034af9c3771a.jpg)
Подключение питания
4.2.8. Закрепление устройства на стене
Устройство можно повесить на гвоздь, вбитый в стену, а можно воспользоваться двусторонним скотчем. Я выяснил, что если закрепить его на высоте примерно в 170 см, это позволит измерять температуру и у высоких, и у невысоких людей.
![](https://habrastorage.org/getpro/habr/post_images/866/9e7/0e1/8669e70e1629b079e0d6e08d4f3c368c.jpg)
Закрепление устройства на стене
?4.3. Установка программ
Посетите этот репозиторий и следуйте свежим инструкциям из
README.md
. А вот ipynb-файл, в котором я собрал всё необходимое для первых экспериментов с камерами и с обработкой инфракрасных изображений.5. Поиск места для монтажа термометра
Интеллектуальный термометр может оказаться особенно полезным в людных местах. Например — в таких:
- Входы в офисные здания.
- Многоквартирные дома.
- Станции метро и остановки общественного транспорта.
- Входы в магазины.
![](https://habrastorage.org/getpro/habr/post_images/807/695/831/807695831f59e18b2b64a5a272df106d.jpg)
Термометр, установленный у входа в здание
Устройство можно просто установить рядом с дверным звонком.
![](https://habrastorage.org/getpro/habr/post_images/35e/15c/c6a/35e15cc6abbe9f6d3ebfd47306e96746.jpg)
Термометр, установленный рядом с дверным звонком
В общем-то, его можно установить в любом месте, где на него можно подать питание (USB, 5В).
![](https://habrastorage.org/getpro/habr/post_images/8dc/e10/ce1/8dce10ce1191199df9ca96cf0e2374b5.jpg)
Термометр, закреплённый на дереве и получающий питание от пауэрбанка
Итоги
Я подумываю об улучшениях моего термометра, которые, в основном, касаются удешевления проекта, а не его функционала:
- Можно перейти на использование более дешёвого одноплатного компьютера. Например, если использовать в моём проекте Raspberry Pi, это позволит удешевить его на $35-100.
- Можно сделать собственную печатную плату с интегрированными светодиодами и с встроенным разъёмом для инфракрасной камеры. Это позволит ещё сильнее удешевить конструкцию, так как позволит избавиться от вспомогательной платы, используемой для подключения инфракрасной камеры, и от светодиодов Neopixel.
Напомню, что свежую версию кода проекта можно найти здесь. А здесь можно скачать файлы для 3D-печати корпуса.
Хотите создать собственный интеллектуальный термометр?
![](https://habrastorage.org/webt/ou/g5/kh/oug5kh6sjydt9llengsiebnp40w.png)
Elsajalee
Вопрос только один, такой же, как и ко всем термометрам с людьми
ну и чем он будет полезен? Если у кого-то на улице температура 38 — его надо огнемётом сразу? Или полицию вызывать? Что делать-то предлагается? Или в моём случае — пришёл в ФСС, измерили температуру — 28. И ведь даже скорую не предложили вызвать :)Andy_Big
И голосовым сообщением попросить всех, кто перед камерой, задержаться на пару часов до прибытия полиции.
ILDAR_BAHTIGOZIN
так они смотрят верхний предел, а не нижний. к примеру к них приказ, выше 37 или 37.5 не пропускать, и всё… а дальше это уже ваши проблемы…
Elsajalee
Так я про что — никакого человеческого отношения :)
Если серьезно, я спросил, что будет если выше 38. Ничего. У сотрудницы, что принимает отчёты, инструкция просто измерять и сообщать. Да и в момент замера я уже в здании и дальше идти никуда не надо.
d33
Можно контекстно рекламно продавать аспирин или арбидол)