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

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

Термометр, смонтированный у входа в дом
Хочу остановиться на самых важных возможностях устройства:
Общая стоимость устройства находится в районе $300. Дешёвым его не назовёшь, но оно на порядок дешевле, чем существующие коммерческие решения. При этом возможности моего интеллектуального термометра часто превосходят возможности таких решений. Код программной части моего проекта и используемые при его изготовлении 3D-модели выложены в общий доступ.
Термометр собран из следующих основных компонентов:
Остановимся на них подробнее.
В проекте используется модуль камеры FLIR Lepton 3.5. Эта камера предлагает разрешение 160x120, что, за её цену, очень даже неплохо. Я, кроме того, использую в проекте вспомогательную плату PureThermal 2 [4], которая позволяет обеспечить работу с инфракрасной камерой по интерфейсу USB.

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

ИК-изображение можно легко преобразовать в массив температурных значений
Ещё несколько строк кода позволяют обнаружить самые горячие и самые холодные участки изображения.
Радиометрическое измерение температуры
Я решил использовать в проекте камеру Raspberry Pi Camera Module v2 (далее — CM v2) по следующим причинам:
Вот три изображения, снятые используемыми в проекте камерами.

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

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

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

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

Графический интерфейс
Обнаружение лица и глаз реализовано с использованием каскада Хаара. Подробности об этом алгоритме можно узнать из данного [10] учебного руководства по OpenCV.
Хотя этот алгоритм не отличается той же универсальностью, что и SSD, я выяснил, что он, основываясь на анализе лица человека, даёт возможность измерить температуру точнее, чем при проведении измерений, принимающих во внимание всё тело.
Обнаружение лица и глаз
В соответствии с этим [11] материалом я исхожу из предположения о том, что излучательная способность кожи человека равна 0,98. Порог срабатывания сигнализатора установлен в 37.5°C.
Один из вариантов использования моего устройства заключается в том, что его просто подключают к компьютерному монитору и наблюдают за результатами измерения температуры людей, попадающих в кадр. Но я понял, что подобный способ применения созданного мной термометра во многих местах окажется неудобным. Именно поэтому я включил в его состав лампу аварийной сигнализации, представляющую собой линейку из 8 светодиодов (Neopixel Stick 8). Так устройство становится более самодостаточным.
Здесь я приведу инструкции для тех, кто хочет собрать собственный интеллектуальный термометр.
Я создал для термометра корпус, который можно напечатать на 3D-принтере. Модель можно скачать отсюда [12]. Эту модель, пользуясь возможностями сайта autodesk360.com, можно преобразовать в необходимый формат (.stl, .step, .f3d). Тут представлен мой первый опыт работы с форматом Autodesk Fusion 360 (.f3d), поэтому если у вас возникнут сложности с моей моделью — дайте мне знать. Я могу загрузить файлы и на Thingiverse.
После того, как вы напечатаете на 3D-принтере корпус, вам понадобятся следующие крепёжные элементы:
Обратите внимание на то, что представленные на рисунке WiFi-антенны для Jetson Nano необязательны. Они позволяют интегрировать интеллектуальный термометр с внешними службами (например — с сайтом или с мобильным приложением, которое может выдавать уведомления).

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

Конденсатор

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

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

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

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

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

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

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

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

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

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

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

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

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

Термометр, закреплённый на дереве и получающий питание от пауэрбанка
Я подумываю об улучшениях моего термометра, которые, в основном, касаются удешевления проекта, а не его функционала:
Напомню, что свежую версию кода проекта можно найти здесь [13]. А здесь [12] можно скачать файлы для 3D-печати корпуса.
Хотите создать собственный интеллектуальный термометр?
Автор: 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
Нажмите здесь для печати.