LINUX.ORG.RU

Определение лица и температуры по тепловизору и видеокамеры с одноплатника

 , , , ,


2

2

Мне вот такую задачу подкинули - к одноплатнику на ARM подрубаем две камеры, одна тепловизионная, другая обычная оптическая, и надо чтоб по тепловизионной определять температуру (ну что вот он не болен коронавирусом), а по обычной камере надо делать face recognition чтоб вот прямоугольничек был на лице, и чтоб оператор который смотрит на монитор видел на лице человека, и там бы выводилось над этим прямоугольничком температура, и чтоб еще прямоугольник был красным, если что-то там подозрительное.

Так вот, одноплатник вроде как Jetson Nano предполагается использовать, там есть Cuda. Какие лучше модели для face recognition брать под этот одноплатник, ну чтоб он успевал обрабатывать, там же много людей в кадр попадать могут, надо всем лица определять? Или вот просто взять первую попавшуюся обученную на определение лица нейросеть, и она скорее всего справится?

Ну по поводу детекта температуры с тепловизионной камеры - там наверное просто надо найти максимально теплый участок в пределах прямоугольника определенного для лица - наверняка в OpenCV что-то такое есть, только надо еще и как-то логично совместить изображение с тепловизора и с оптической камеры (ну что вот эти координаты изображения с камеры1 соответствуют вот этим координатам с изображения камеры2) - как это правильно делать и как это вообще называется? Нужно это как-то калибровать?

Может есть уже что-то более-менее готовое опенсорсное под эту скорее всего неоднократно уже решавшуюся задачу?

★★★★★

Последнее исправление: SZT (всего исправлений: 3)

Какие лучше модели для face recognition брать под этот одноплатник, ну чтоб он успевал обрабатывать, там же много людей в кадр попадать могут, надо всем лица определять? Или вот просто взять первую попавшуюся обученную на определение лица нейросеть, и она скорее всего справится?

Это зависит от того, сколько у тебя времени а эту работу. Для начала возьми готовую модель, YOLO/SSD, построенную на базе MobileNet.

Ну по поводу детекта температуры с тепловизионной камеры - там наверное просто надо найти максимально теплый участок в пределах квадрата определенного для лица - наверняка в OpenCV что-то такое есть, только надо еще и как-то логично совместить изображение с тепловизора и с оптической камеры (ну что вот эти координаты изображения с камеры1 соответствуют вот этим координатам с изображения камеры2) - как это правильно делать и как это вообще называется? Нужно это как-то калибровать?

Это называется поправка на паралакс, для этого надо научиться находить силуэт человека на изображении с тепловизора.

Вариантов там много, какой конкретно брать зависит от количества людей.

Примеры таких вариантов:

  1. Взять детектор движения, запустить его на обоих каналах и определить наиболее похожие по форме и параметрам движения объекты.

  2. Сегментировать все объекты с температурой 30+ - 42 градуса, сопоставить их характеристики с характеристиками лиц из оптического канала и найти соответствие.

  3. Найти размеченный датасет с людьми, которые ходят перед тепловизором, и натренировать на нём YOLO/SSD. Дальше - см выше.

Без опыта и датасетов не рекомендую заморачиваться с обучением моделей.

Вот, кстати, ссылка по теме

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 3)
Ответ на: комментарий от shkolnick-kun

Примеры таких вариантов:
1. Взять детектор движения, запустить его на обоих каналах и определить наиболее похожие по форме и параметрам движения объекты.
2. Сегментировать все объекты с температурой 30+ - 42 градуса, сопоставить их характеристики с характеристиками лиц из оптического канала и найти соответствие.
3. Найти размеченный датасет с людьми, которые ходят перед тепловизором, и натренировать на нём YOLO/SSD. Дальше - см выше.

А может есть какой-то четкий математический метод, не основанный на всяких эвристиках и нейросетях? Ну чтоб если мы берем две камеры с известными характеристиками, которые размещены на вполне конкретном расстоянии под вполне конкретным углом, такие-то линзы на камерах, то на основании формулы мы можем так-то сопоставить координаты с одной и с другой камеры? Ну и учитывая что камеры две, можно еще и расстояния определять (хотя одна из них тепловизор, другая оптическая, что несколько осложняет задачу).

Может быть можно например помахать паяльником перед двумя камерами на хромакее и на основании этого как-нибудь высчитать функцию трансляции координат для одной камеры в кооодинаты другой? Т.е. чтоб на основе наблюдений с двух камер чтоб можно было синтезировать быструю функцию(без сложных нейросетей), которая дает отображение из координат изображения одной камеры в координаты другой. Ведь такая задача наверняка имеет какое-то геометрическое (оптическое) решение, и нейросети тут не требуются.

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 4)
Ответ на: комментарий от SZT

Надо наверное напаять на кусок фанеры сетку из светодиодов, снимать эту хрень сразу двумя камерами (и камеры чтоб максимально параллельно и максимально из одной точки смотрели), потом какими-нибудь бикубическими сплайнами это дело сопоставить.

Может еще какие-то поправки на расстояния от тех двух камер надо делать? Ну в духе «если вот та штука близко, то координата так транслируется, а если далеко, то чуток иначе». В OpenCV что-то есть для этого?

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 1)

Какие лучше модели для face recognition

Список моделей и методов ©.

совместить изображение с тепловизора и с оптической камеры … как это правильно делать и как это вообще называется?

Корреляционное сопоставление изображений ©.

Может еще какие-то поправки на расстояния от тех двух камер надо делать?

Цифровая фотограмметрия и бесконтактные измерения ©.

P.S. «Всё уже придумано до нас», например ©.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Корреляционное сопоставление изображений
Цифровая фотограмметрия и бесконтактные измерения

В каких библиотеках мне искать готовые реализации? В OpenCV есть это? Если писать свое с нуля на основе каких-то учебников и научных статей, это будет слишком долго.

P.S. «Всё уже придумано до нас», например ©.

Было б очень-очень удивительно, если бы такого еще не придумали.

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

В каких библиотеках мне искать готовые реализации?

Кое-что есть, например, в Image Processing Toolbox ©.

В OpenCV есть это?

В своих задачах не использовал, но что-нибудь базовое должно быть.

Если писать свое с нуля на основе каких-то учебников научных статей, это будет слишком долго

Дык, ежели тебе нужен рабочий результат, то проще и дешевле купить готовый тепловизор с всем программным обеспечением, «колхозить» из кусочков железяк и библиотек сейчас не выгодно. Бытовой готовый вариант — Blackview BV9800 Pro © со встроенным тепловизором.

Но, с другой стороны, если тебе «плотют жалование за процесс сотворения», то «писать свое с нуля на основе каких-то учебников научных статей» гораздо полезнее для твоего профессионализма.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Кое-что есть, например, в Image Processing Toolbox ©.

Там оно судя по всему сильно платное и проприетарное, мне это скорее всего не подойдет.

Дык, ежели тебе нужен рабочий результат, то проще и дешевле купить готовый тепловизор с всем программным обеспечением, «колхозить» из кусочков железяк и библиотек сейчас не выгодно. Бытовой готовый вариант — Blackview BV9800 Pro © со встроенным тепловизором.

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

Но, с другой стороны, если тебе «плотют жалование за процесс сотворения», то «писать свое с нуля на основе каких-то учебников научных статей» гораздо полезнее для твоего профессионализма.

Только это не очень полезно с точки зрения время-трудозатрат. Жалование обычно платят за результат, а не за процесс.

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 3)
Ответ на: комментарий от SZT

Так задача-то в том заключается, чтобы сделать свой вариант

Тогда нужно сформулировать: в чём твой вариант должен превосходить/отличаться от конкурентов типа 1, 2, 3, …?

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

в чём твой вариант должен превосходить/отличаться от конкурентов

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

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

как это можно эффективно реализовать с минимальными время-трудозатратами, какие либы взять и как это все скомпоновать

Ну, глянул я в OpenCV ©, там только элементарщина, тоже полезная, но для твоей задачи готовых Open-тепловизионно-аналитических библиотек думаю не найдёшь, ибо конкуренты тоже кушать хотят.

Так что у тебя «токмо два путя»: ленивый — на основе обучаемых свёрточных нейросетей, и классический — на основе матричной математики, корреляционного анализа, морфологических моделей, …

P.S. «Пилите Шура, пилите, внутри она золотая» :)

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

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

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

этим преимуществом может быть например отсутствие привязки к конкретным моделям камер

Не получится, камеры дальнего ИК (8 — 14 мкм) сильно отличаются и аппаратно и интерфейсно, глянь, например ©. У наиболее серьёзных даже формат кадров и видеопотока свой собственный, технологически привязанный к железяке.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Не получится, камеры дальнего ИК (8 — 14 мкм) сильно отличаются и аппаратно и интерфейсно, глянь, например ©.

Ну значит ограничиваемся теми ИК камерами, которые можно подключить по USB и с которыми можно работать через V4L2 API в линуксе.

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

Ну значит ограничиваемся…

…теми вариантами, которыми озадачивает заказчик. По его ТЗ нужно ориентироваться о допустимых затратах времени и усилий. И если личного интереса копать image processing глубоко и долго нету, то вариант нейросети вполне приемлим.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Кое-что есть, например, в Image Processing Toolbox ©.

Кстати надо б посмотреть на то, что есть в скилабе: https://atoms.scilab.org/toolboxes/IPCV/4.1.2/

Кстати да, помню как я когда-то матлабовский код на Си переводил (Matlab coder с этой задачей не справлялся), код там был в плане читаемости просто отвратительный. Может быть в скилабе с этим получше? Я то, когда сначала увидел матлабовский код, который надо переписывать, я подумал «блин, где они такого кадра нашли, его код совершенно нечитаем», но потом, когда мне пришлось залазить во внутренние функции самого этого матлаба (чтобы их переписать на Си) мне стало понятно, что тут просто так принято.

Видимо знания математики каким-то образом отрицательно коррелирует с умением писать читаемый и понятный код.

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 2)

Лицо держит в зубах сигарету/вейп?

ЗЫ Курение вредит вашему здоровью

anonymous
()
Ответ на: комментарий от anonymous

Лицо держит в зубах сигарету/вейп?

Там курить нельзя, так это тоже дополнительный плюс такой системы, можно легко детектить курильщиков. Не баг, а фича.

SZT ★★★★★
() автор топика

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Вот да. У меня на работе постоянно показывает, что я зомби. А я и так с утра зомби.

Sergius71
()
Ответ на: комментарий от SZT

код там был в плане читаемости просто отвратительный

Ещё глянь ImageJ © с открытыми API и плагинами ©. Там тоже всяческая мелочёвка, но вдруг пригодится.

Видимо знания математики каким-то образом отрицательно коррелирует с умением писать читаемый и понятный код.

При Сталине была обязательна тройка — математик-алгоритмист-кодер, при Брежневе пара — математик-программист, а при Путине — «всё в одном флаконе» :)

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

При Сталине была обязательна тройка — математик-алгоритмист-кодер, при Брежневе пара — математик-программист, а при Путине — «всё в одном флаконе»

Приехала в СССР иностранная делегация. Встречаются директора заводов - русский и японец.
Японец говорит: «Мы станки делаем».
Русский говорит: «И мы тоже».
Японец говорит: «У меня 10 цехов».
Русский говорит: «У меня тоже 10».
Японец говорит: «У меня три тысячи рабочих занято».
Русский говорит: «У меня тоже три тысячи».
Японец говорит: «У нас 6 инженеров работает».
Русский думает: «Если сказать, что у нас 200 инженеров в заводоуправлении сидит, конфуз выйдет. Скажу, что у нас 7 инженеров». Так и сделал.
На следующий день встречаются они снова, а у японца глаза красные-красные. «Всю ночь, – говорит, - не спал. Все думал: чем у вас седьмой инженер занимается?».
byko3y ★★★★
()

Если у тебя есть более одной камеры - то это называется риг, ну и для геометрических вычислений тебе надо бы проделать camera rig calibration.

Процесс состоит в нахождении внешних (поворот+смещение) и внутренних (коэфициенты дисторсии изображения) интринсиков каждой из камер рига.

Для этого не обязательно фотографировать шахматные доски, но, готовые калибраторы фотографируют именно их (либо какую-то регулярную структуру известных довольно точно размеров).

Думаю, что скорее всего готовые инструменты можно найти в ROS (ros.org), полу-готовые и кусками (калибровка одной камеры) инструменты есть в всякого рода Structure-From-Motion либах (COLMAP, OpenMVG, Theia, OpenCV).

Можно конечно откалибровать сначала каждую камеру по-отдельности, а потом пару как риг, для калибровки по-отдельности есть готовая неопенсорсная утилита от Adobe - Adobe Lens Profile Creator (на базе OpenCV кстати), co своей методологией калибровки в удобном для «обычного фотографа виде». Принципы работы адобовской проги описаны в патенте US8368762B1. Патент представляет собой весьма годное чтиво, если захочется навелосипедить свой калибровочный процесс.

nikitos ★★★
()

по тепловизионной определять температуру (ну что вот он не болен коронавирусом)

Сколько у меня мерили температуру в различных учреждениях - везде ниже 36 получалось. Девочки с китайскими термометрами улыбались и пропускали. Но это повезло и все разы прохладно было на улице, когда попадался термоконтроль. Что-то мне подсказывает, что в сорокоградусную жару все «коронавирусными» становились.

Метод рабочий только если люди до термометрии долго в помещении находятся, а там поддерживается строго определённая температура (не слишком холодно, но и не слишком жарко). И только если тепловизор/термометр имеют точность прямо в десятые доли градуса, чем могут похвастаться далеко не все девайсы, большинство пригодны только температуру воды с пельменями в кастрюле мерить, чтобы понять, скоро ли они закипят.

А ещё я надеюсь ты порог тревоги не ниже 37.5 поставишь, так как температура тела абсолютно здорового человека имеет свойство колебаться в течении дня и повышаться ближе к ночи и чуть выше 37 является нормой, если не держится целый день, а появляется эпизодически.

KivApple ★★★★★
()

Лучше всем давать нюхать две баночки с разными запахами и заставлять определять что чем пахнет. Метод тоже не гарантированный совсем, но статистическая корреляция у него гораздо лучше с ковидом, чем у повышенной температуры (читал, что пропадание обоняния в 10 повышает шанс, что это именно этот вирус по сравнению с любыми другими причинами пропадания обоняния, а вот у повышенной температуры есть 100500 причин начиная от перегрева на солнышке и заканчивая совершенно незаразными заболеваниями вроде отравления и готов поспорить, что их вероятности куда выше, чем заражения COVID). Заодно жаропонижающие не помогут обмануть тест.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от SZT

А может есть какой-то четкий математический метод, не основанный на всяких эвристиках и нейросетях?

Его нет. Либо классические алгоритмы CV, либо сетки. Эвристики будут в любом случае.

Может быть можно например помахать паяльником перед двумя камерами на хромакее и на основании этого как-нибудь высчитать функцию трансляции координат для одной камеры в кооодинаты другой?

Скорее сделать сетку из лампочек, либо мощных светодиодов, чтоб грелись градусов до 90.

В OpenCV есть функции калибровки камер и стереопары, но там вроде как надо шахматную доску использовать, как это адаптировать к лампочкам, и что из этого выйдет - не понятно.

А ещё у тебя теплак и оптическая камера будут иметь разное разрешение, в этом тоже проблема.

Кажись, в твоей задаче лучше использовать 3D-камеру + Теплак.

Я тут на одном хакатоне использовал кинект: детектил в ИК-канале людей с помощью YOLO, детектил лицо человека внутри ROI от YOLO, и определял расстояние до лица по каналу глубины (его координаты соответствовали координатам ИК-канала).

Если использовать такой подход, то зная паралакс (расстояние между ИК-каналом кинекта и теплаком), можно перенести рамку с лицом из ИК-канала в на канал теплака и посчитать температуру конкретного лица.

Если что - пиши на адрес из шапки исходников BuguRTOS.

shkolnick-kun ★★★★★
()
Ответ на: комментарий от KivApple

Лучше всем давать нюхать две баночки с разными запахами и заставлять определять что чем пахнет.

Вот да, чтоб еще образовывалась очередь из тех, кому надо те баночки понюхать чтоб пройти. «Гениальный» план.

SZT ★★★★★
() автор топика
Ответ на: комментарий от shkolnick-kun

А ещё у тебя теплак и оптическая камера будут иметь разное разрешение, в этом тоже проблема.

Ну так можно отскейлить/обрезать.

Кажись, в твоей задаче лучше использовать 3D-камеру + Теплак.

Ну как бы сам теплак + обычная камера - это тоже можно как 3D камеру использовать. Пока что еще неясно четко, какие там камеры будут использоваться, надо будет это пообсуждать.

Расстояние вообще не нужно, надо просто чтоб была функция, которой даем координаты x y на картинке с оптической камеры - и чтоб она соответствующую координату на картинке с тепловизора выдавала. Тогда я транслирую координаты верхнего левого и нижнего правого угла прямоугольника, распознанного для лица, чтоб найти этот прямоугольник на тепловизоре, и потом нахожу самую горячую точку оттуда. Нейросетями распознать лицо и получить прямоугольник - не проблема. Из квадратной области с картинки тепловизора найти максимум температуры - не проблема.

Если эту функцию соответствия одних координат другим нельзя достаточно точно сделать по-тупому(т.е. без оценки расстояния до объекта) - ну вот тогда уже надо глубины оценивать, но тут наверное оптическая 3D камера избыточна, потому что две камеры и так есть. Короче, надо тестить, когда железо будет.

Если что - пиши на адрес из шапки исходников BuguRTOS.

Потом может напишу если какие затыки будут, железа на руках пока нет.

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от SZT

Ну как бы сам теплак + обычная камера - это тоже можно как 3D камеру использовать.

Это гемор без гарантии результата.

Расстояние вообще не нужно, надо просто чтоб была функция, которой даем координаты x y на картинке с оптической камеры - и чтоб она соответствующую координату на картинке с тепловизора выдавала

Без расстояния до лица в том или ином виде не сделать. Можно поискать сетку, которая «оценивает» расстояние, или попробовать искать голову и по её размерам расстояние оценивать, но точность будет низкая скорее всего, хотя может и хватит.

При этом камера должна быть калиброванной, инфа 100%

shkolnick-kun ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.