Demo Santoro - aggregation task

by morphcast

HTML

<script src="https://ai-sdk.morphcast.com/v1.15/ai-sdk.js"></script>

JavaScript

/*CY.loader()
  .licenseKey('9087cfd2037a28a79769fdcaa4962252379cd2e2fd0b')
  .addModule(CY.modules().FACE_AGE.name)
  .addModule(CY.modules().FACE_GENDER.name)
  .addModule(CY.modules().FACE_ATTENTION.name)
  .addModule(CY.modules().FACE_AROUSAL_VALENCE.name)
  .addModule(CY.modules().DATA_AGGREGATOR.name, {
  initialWaitMs: 2000,
  periodMs: 1000
})
  .load()
  .then(({ start, stop }) => {
  start();
  setTimeout(stop, 3000);
  });
  
window.addEventListener(CY.modules().DATA_AGGREGATOR.eventName, (evt) => {
  console.log('Data aggregator result', evt.detail);
});*/

const result = getResult();
const quadrant_argmax = getArgMaxKey(result.quadrant.distribution);
console.log('quadrant_argmax', quadrant_argmax);
const arousalNormalized_avg = roundToTwo((result.arousal.avg+1)/2)
console.log('arousalNormalized_avg', arousalNormalized_avg);
const AFFECTS_PREFIX = "affects98_";
const affectsKeys = Object.keys(result).filter(i=>i.startsWith(AFFECTS_PREFIX));
const affectsList = affectsKeys.map(k => ({name: k, value: result[k].avg}));
const affectsTop3 = topN(affectsList, 3, 'value').map(i=>i.name /*.substring(AFFECTS_PREFIX.length)*/);
console.log('affectsTop3', affectsTop3);

const isDataValid = isFinite(arousalNormalized_avg) && affectsTop3.length === 3 && !!quadrant_argmax;
console.log('isDataValid', isDataValid);

console.log('attributesToIncrement', {
	['quadrant_' + quadrant_argmax] : {
  	action: "ADD",
  	value: 1,
	},
  [affectsTop3[0]] : {
  	action: "ADD",
  	value: 1,
	},
  [affectsTop3[1]] : {
  	action: "ADD",
  	value: 1,
	},
  [affectsTop3[2]] : {
  	action: "ADD",
  	value: 1,
	},
});

function topN(arr, n, byPropertyName) {
   if(n > arr.length){
      return false;
   }
   return arr
   .slice()
   .sort((a, b) => {
      return b[byPropertyName] - a[byPropertyName]
   })
   .slice(0, n);
}

function getArgMaxKey(dict) {
  return Object.keys(dict).reduce((a, b) => dict[a] > dict[b] ? a : b, {});
}

function roundToTwo(num) {
  return +(Math.round(num...