Чтобы определить, что «лицо» - это просто неподвижное изображение, я могу придумать простой алгоритм, который может быть реализован с использованием функциональных возможностей OpenCV.
Как только на лице появляется новое лицокадр (это решенная проблема, я полагаю), вычислить грубую ограничивающую рамку лица и сохранить изображение лица в некотором буфере.Давайте назовем этот фрагмент, содержащий лицо, изображением «Face1».
Для каждого нового кадра (если там обнаруживается одно и то же лицо), попробуйте извлечь изображение лица (мы назовем этот фрагмент ").FaceN "), а затем рассчитать гомографию для первого кадра (изображение" Face1 ").Затем деформируйте изображение «FaceN», чтобы выровнять его по «Face1», и попробуйте выполнить сравнение пикселей.Если изображение «FaceN» слишком «статично» (здесь требуется некоторая эвристика), то, вероятно, это фотография.
Я понимаю, что
- не очень быстро
- не очень надежный
но я вполне уверен, что это может быть отправной точкой с некоторыми оптимизациями позже.
Весь подход может быть протестирован только на двух кадрахВы держите фотографию лица перед камерой (это будут изображения "Face1" и "FaceN").