#python #pose-estimation
Вопрос:
Может ли кто-нибудь указать мне направление библиотеки, которая может оценить позу лица по 68 ориентирам в Python?
Если быть более точным, существует множество таких библиотек. Однако они обычно начинаются с изображения. Я хочу пропустить обнаружение ориентира, потому что он у меня уже есть. Я просто хочу передать 68-точечные ориентиры в функцию и получить поворот и перевод лица.
Если бы я не был полным новичком в Python, я мог бы извлечь соответствующие фрагменты из существующих библиотек, но мне трудно это сделать.
Спасибо.
Ответ №1:
Эта библиотека, похоже, справится с вашей работой https://github.com/yinguobing/head-pose-estimation
Кажется, это работает в 3 этапа,
- Распознавание Лиц
- Обнаружение Ориентира
- Оценка Позы. После получения 68 ориентиров на лице поза может быть рассчитана с помощью взаимного алгоритма PnP.
Итак, вам следует просмотреть кодовую базу для этого mutual PnP algorithm
, которая использует 68 ориентиров в качестве входных данных.
Похоже, что весь код, касающийся оценки позы, который вам понадобится, находится внутри этого файла!
Чтобы кратко обобщить весь файл кода оценки позы для вас
PoseEstimator
класс содержит все соответствующие функции__init__
функция определяетсяself.model_points
как координаты кончика носа, подбородка, рта. Он также обрабатывает внутренние части камеры, векторы вращения и перемещения. Все это является важными входными данными для алгоритма PnP, который выполняет оценку позыself._get_full_model_points()
считывает ориентиры из файла и сохраняет их вself.model_points_68
- у этого класса есть важная функция
solve_pose_by_68_points
, которая называется «делать то, что вам нужно». Он ожидает ввода ваших ориентиров. - эта
solve_pose_by_68_points()
функция используется внутри этого файла - входными данными для этой функции является переменная, называемая
marks
Вам нужно придумать способ ввода ваших собственных ориентиров в эту solve_pose_by_68_points
функцию, используя marks
переменную в качестве ориентира.
Или просто воссоздайте код из pose_estimator.py
файла и solve_pose_by_68_points
функции в нем.
Боковое примечание — эта функция просто вызывает cv2.solvePnP
, я предполагаю, реализацию OpenCV алгоритма PnP.
Комментарии:
1. Большое вам спасибо за ваши советы! Похоже, что решение находится в этом файле. Я попробую и доложу об этом.
2. Я добился некоторого прогресса, но есть некоторые трудности. Когда я вызываю функцию solve_pose_by_68_points(), мне нужно предоставить объект OpenCV Mat. То, что у меня есть,-это 2-мерный массив. В настоящее время я использую этот код для преобразования моего массива точек в массив Numpy, который, судя по тому, что я читал в другом месте, должен быть таким же, как объект Mat в Python: numpy.array(точки, np.float32) Я понятия не имею, правильно ли это. Я попытался использовать данные о вращении, но цифры настолько малы, что я не могу заметить фактического изменения позы…
3. поделитесь где-нибудь своим кодом, помогите мне запустить его. дайте мне свой массив очков и дайте мне функцию solve_pose_by_68_points()
4. Спасибо, что перезвонил мне. Я изложил суть того, куда я поместил то, что у меня есть до сих пор. Я действительно получаю цифры в конце, но я не думаю, что они верны… Я не уверен, как создать cv.Mat из массива. Вот в чем суть: gist.github.com/djipco/30d0108cc19b04fd8acd35881ff7defc