Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::vector<std::vector<float>> getBlendShapesValue(std::vector<std::vector<Point2f>> facePoints)
- {
- //bool leftMouthAngleUp = false; //Флаг для определения поднятого левого уголка губы
- //bool leftMouthAngleDown = false; //Флаг для определения опущенного левого уголка губы
- //bool rightMouthAngleUp = false; //Флаг для определения поднятого правого уголка губы
- //bool rightMouthAngleDown = false; //Флаг для определения опущенного правого уголка губы
- //bool topLipUp = false; //Флаг для определения поднятой верхней губы
- //bool botLipDown = false; //Флаг для определения опущенной нижней губы
- /* Матрица значений блендшейпов
- * 0 столбец - улыбка (уголки губ вверх)
- * 1 столбец - грусть (уголки губ вниз)
- * 2 столбец - презрение1 (левый уголок вверх)
- * 3 столбец - презрение2 (правый уголок вверх)
- * 4 столбец - удивление (рот открыт)
- * 5 столбец - брови подняты
- * 6 столбец - брови опущены
- * 7 столбец - глаза закрыты
- */
- std::vector<std::vector<float>> blendShapesValue;
- //Инициализация матрицы значений блендшейпов
- blendShapesValue.resize(facePoints.size());
- for (int i = 0; i < facePoints.size(); i++)
- {
- blendShapesValue[i].resize(8, 0);
- }
- //Анализ ключевых точек лица
- MouthPointsCharacteristic mouth = getMouth(facePoints); //Анализ ключевых точек тра
- EyesPointsCharacteristic eyes = getEyes(facePoints); //Анализ ключевых точек глаз
- BrowPointsCharacteristic brows = getBrows(facePoints); //Анализ ключевых точек бровей
- int currIndex = 0; //Номер анализируемой строки из файла
- while (facePoints.size() != currIndex) //Пока не прошли по всем строкам исходного файла
- {
- //Определение значений блендшейпов для анимаци рта
- /*Если на текущем кадре уголки губ ведут себя одинаково
- * (одновременно поднимаются или опускаются)
- */
- if (mouth.leftAngle.labels[currIndex][0] == mouth.rightAngle.labels[currIndex][0] || mouth.leftAngle.labels[currIndex][1] == mouth.rightAngle.labels[currIndex][1])
- {
- /*Если метки, обозначающие поднятие уголков рта, равны 1
- * то пользователь улыбается увеличиваем значение бленд шейпа улыбки
- */
- if (mouth.leftAngle.labels[currIndex][0] == 1 && mouth.rightAngle.labels[currIndex][0] == 1)
- {
- }
- /*Если метки, обозначающие поднятие уголков рта, равны -1
- * то уменьшаем значение бленд шейпа улыбки
- */
- else if (mouth.leftAngle.labels[currIndex][0] == -1 && mouth.rightAngle.labels[currIndex][0] == -1)
- {
- }
- /*Если метки, обозначающие опускание уголков рта, равны 1
- * то увеличиваем значение бленд шейпа грусть
- */
- else if (mouth.leftAngle.labels[currIndex][1] == 1 && mouth.rightAngle.labels[currIndex][1] == 1)
- {
- }
- /*Если метки, обозначающие опускание уголков рта, равны -1
- * то уменьшаем значение бленд шейпа грусть
- */
- else if (mouth.leftAngle.labels[currIndex][1] == -1 && mouth.rightAngle.labels[currIndex][1] == -1)
- {
- }
- }
- /*Если на текущем кадре уголки губ ведут себя по-разному
- */
- else
- {
- //Левый уголок поднимается
- if (mouth.leftAngle.labels[currIndex][0] == 1)
- {
- }
- //Левый уголок опускается
- else if (mouth.leftAngle.labels[currIndex][0] == -1)
- {
- }
- //Правый уголок поднимается
- else if (mouth.rightAngle.labels[currIndex][0] == 1)
- {
- }
- //Правый уголок опускается
- else if (mouth.rightAngle.labels[currIndex][0] == -1)
- {
- }
- }
- currIndex++;
- }
- return blendShapesValue;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement