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...