Advertisement
Guest User

Untitled

a guest
May 25th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. std::vector<std::vector<float>> getBlendShapesValue(std::vector<std::vector<Point2f>> facePoints)
  2. {
  3. //bool leftMouthAngleUp = false; //Флаг для определения поднятого левого уголка губы
  4. //bool leftMouthAngleDown = false; //Флаг для определения опущенного левого уголка губы
  5. //bool rightMouthAngleUp = false; //Флаг для определения поднятого правого уголка губы
  6. //bool rightMouthAngleDown = false; //Флаг для определения опущенного правого уголка губы
  7. //bool topLipUp = false; //Флаг для определения поднятой верхней губы
  8. //bool botLipDown = false; //Флаг для определения опущенной нижней губы
  9.  
  10. /* Матрица значений блендшейпов
  11. * 0 столбец - улыбка (уголки губ вверх)
  12. * 1 столбец - грусть (уголки губ вниз)
  13. * 2 столбец - презрение1 (левый уголок вверх)
  14. * 3 столбец - презрение2 (правый уголок вверх)
  15. * 4 столбец - удивление (рот открыт)
  16. * 5 столбец - брови подняты
  17. * 6 столбец - брови опущены
  18. * 7 столбец - глаза закрыты
  19. */
  20. std::vector<std::vector<float>> blendShapesValue;
  21.  
  22. //Инициализация матрицы значений блендшейпов
  23. blendShapesValue.resize(facePoints.size());
  24. for (int i = 0; i < facePoints.size(); i++)
  25. {
  26. blendShapesValue[i].resize(8, 0);
  27. }
  28.  
  29. //Анализ ключевых точек лица
  30. MouthPointsCharacteristic mouth = getMouth(facePoints); //Анализ ключевых точек тра
  31. EyesPointsCharacteristic eyes = getEyes(facePoints); //Анализ ключевых точек глаз
  32. BrowPointsCharacteristic brows = getBrows(facePoints); //Анализ ключевых точек бровей
  33.  
  34.  
  35. int currIndex = 0; //Номер анализируемой строки из файла
  36. while (facePoints.size() != currIndex) //Пока не прошли по всем строкам исходного файла
  37. {
  38. //Определение значений блендшейпов для анимаци рта
  39.  
  40. /*Если на текущем кадре уголки губ ведут себя одинаково
  41. * (одновременно поднимаются или опускаются)
  42. */
  43. if (mouth.leftAngle.labels[currIndex][0] == mouth.rightAngle.labels[currIndex][0] || mouth.leftAngle.labels[currIndex][1] == mouth.rightAngle.labels[currIndex][1])
  44. {
  45. /*Если метки, обозначающие поднятие уголков рта, равны 1
  46. * то пользователь улыбается увеличиваем значение бленд шейпа улыбки
  47. */
  48. if (mouth.leftAngle.labels[currIndex][0] == 1 && mouth.rightAngle.labels[currIndex][0] == 1)
  49. {
  50. }
  51. /*Если метки, обозначающие поднятие уголков рта, равны -1
  52. * то уменьшаем значение бленд шейпа улыбки
  53. */
  54. else if (mouth.leftAngle.labels[currIndex][0] == -1 && mouth.rightAngle.labels[currIndex][0] == -1)
  55. {
  56. }
  57. /*Если метки, обозначающие опускание уголков рта, равны 1
  58. * то увеличиваем значение бленд шейпа грусть
  59. */
  60. else if (mouth.leftAngle.labels[currIndex][1] == 1 && mouth.rightAngle.labels[currIndex][1] == 1)
  61. {
  62. }
  63. /*Если метки, обозначающие опускание уголков рта, равны -1
  64. * то уменьшаем значение бленд шейпа грусть
  65. */
  66. else if (mouth.leftAngle.labels[currIndex][1] == -1 && mouth.rightAngle.labels[currIndex][1] == -1)
  67. {
  68. }
  69. }
  70. /*Если на текущем кадре уголки губ ведут себя по-разному
  71. */
  72. else
  73. {
  74. //Левый уголок поднимается
  75. if (mouth.leftAngle.labels[currIndex][0] == 1)
  76. {
  77. }
  78. //Левый уголок опускается
  79. else if (mouth.leftAngle.labels[currIndex][0] == -1)
  80. {
  81. }
  82. //Правый уголок поднимается
  83. else if (mouth.rightAngle.labels[currIndex][0] == 1)
  84. {
  85. }
  86. //Правый уголок опускается
  87. else if (mouth.rightAngle.labels[currIndex][0] == -1)
  88. {
  89. }
  90. }
  91.  
  92. currIndex++;
  93. }
  94.  
  95. return blendShapesValue;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement