Task #6610
openПульс только с проверенных участков кожи
0%
Description
Цвет кожи для пульса и освещённости берётся из трёх квадратов вокруг точек меша: обе щеки и лоб. Точка лба лежит у линии волос, щёки у бородатого человека попадают в бороду, при повороте головы дальняя щека уходит за профиль. Волосы, борода и фон вносят в сигнал пульса шум, который не отличить от сердцебиения.
Нужно: брать цвет только из участков, которые подтверждены как кожа.
- участки задаются многоугольниками меша на заведомо безволосых зонах: переносица, центр лба ниже линии волос, верх щёк под глазом;
- каждый пиксель проходит проверку на кожу по цветности и отсекается по пересвету и тени;
- участок засчитывается, только когда кожей оказалась заданная доля его пикселей и он смотрит в камеру;
- ни одного подтверждённого участка — кадр в пульс не идёт.
Тесты на фикстурах: борода, чёлка, повёрнутая голова, тёмный фон.
Updated by Redmine Admin about 1 month ago
Готово.
Проверка по снимкам самих участков показала: у повёрнутого лица щека за профилем захватывала фон, переносица ловила угол глаза и складку хмурости. Стандартный тест цветности кожи пропускал каштановые волосы и бороду как кожу, поэтому он используется только для проверки эталона.
Схема: участки на середине лба (151) и щеках; щека отвёрнутой стороны отбрасывается (ширина стороны меньше 0.6 другой); каждый пиксель сравнивается с медианой собственной кожи лица по Cb, Cr (допуск 14) и яркости (0.6–1.5); сама медиана обязана лежать в диапазоне тонов кожи; участок засчитывается при 70% кожи.
Освещённость отделена: Observation::with_face_luma, ядро читает освещённость из яркости лица, пульс — только из проверенной кожи.
Замеры: 39 из 45 вариантов освещения дают пульс, 6 отказов — полутьма и жёсткий боковой свет. Тесты: 13 в domain_skin (волосы, борода, фон, блик, поворот, пустое лицо, датасет), 3 в core app.