You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

reducer.ts 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import ReducerRegistry from '../base/redux/ReducerRegistry';
  2. import {
  3. ADD_FACE_EXPRESSION,
  4. ADD_TO_FACE_EXPRESSIONS_BUFFER,
  5. CLEAR_FACE_EXPRESSIONS_BUFFER,
  6. START_FACE_LANDMARKS_DETECTION,
  7. STOP_FACE_LANDMARKS_DETECTION,
  8. UPDATE_FACE_COORDINATES
  9. } from './actionTypes';
  10. const defaultState = {
  11. faceBoxes: {},
  12. faceExpressions: {
  13. happy: 0,
  14. neutral: 0,
  15. surprised: 0,
  16. angry: 0,
  17. fearful: 0,
  18. disgusted: 0,
  19. sad: 0
  20. },
  21. faceExpressionsBuffer: [],
  22. recognitionActive: false
  23. };
  24. export interface IFaceLandmarksState {
  25. faceBoxes: {
  26. left?: number;
  27. right?: number;
  28. width?: number;
  29. };
  30. faceExpressions: {
  31. angry: number;
  32. disgusted: number;
  33. fearful: number;
  34. happy: number;
  35. neutral: number;
  36. sad: number;
  37. surprised: number;
  38. };
  39. faceExpressionsBuffer: Array<{
  40. emotion: string;
  41. timestamp: string;
  42. }>;
  43. recognitionActive: boolean;
  44. }
  45. ReducerRegistry.register('features/face-landmarks', (state: IFaceLandmarksState = defaultState, action) => {
  46. switch (action.type) {
  47. case ADD_FACE_EXPRESSION: {
  48. return {
  49. ...state,
  50. faceExpressions: {
  51. ...state.faceExpressions,
  52. [action.faceExpression]: state.faceExpressions[
  53. action.faceExpression as keyof typeof state.faceExpressions] + action.duration
  54. }
  55. };
  56. }
  57. case ADD_TO_FACE_EXPRESSIONS_BUFFER: {
  58. return {
  59. ...state,
  60. faceExpressionsBuffer: [ ...state.faceExpressionsBuffer, action.faceExpression ]
  61. };
  62. }
  63. case CLEAR_FACE_EXPRESSIONS_BUFFER: {
  64. return {
  65. ...state,
  66. faceExpressionsBuffer: []
  67. };
  68. }
  69. case START_FACE_LANDMARKS_DETECTION: {
  70. return {
  71. ...state,
  72. recognitionActive: true
  73. };
  74. }
  75. case STOP_FACE_LANDMARKS_DETECTION: {
  76. return {
  77. ...state,
  78. recognitionActive: false
  79. };
  80. }
  81. case UPDATE_FACE_COORDINATES: {
  82. return {
  83. ...state,
  84. faceBoxes: {
  85. ...state.faceBoxes,
  86. [action.id]: action.faceBox
  87. }
  88. };
  89. }
  90. }
  91. return state;
  92. });