我正在使用名为 CLMtracker 的 JS 库进行面部跟踪/情绪检测。
http://auduno.github.io/clmtrackr/examples/clm_emotiondetection.html
注意:对于那些尝试使用它的人来说,似乎在 chrome 中效果最好。
是我正在使用的示例,我想知道如何访问每种情绪的值。例如,我想每 10 秒检查一次值是什么并打印到控制台。由此我还想比较这些值以找到最高值并找到与之相关的情感。我想我说 max() 函数会给我数组中的最大值是对的吗?
我尝试过的:
我尝试获取 emotionData[0].emotion 和 emotionData[0].value 应该打印 Angry 和值,但它只打印 0。我也尝试过使用相同的方法处理似乎没有返回的数据任何东西。
编辑
emotionData 让我:
但是当我改变表情时它似乎没有显示任何更新/变化
最佳答案
ec.meanPredict(ctrack.getCurrentParameters())
返回一个对象,其中包含所有情绪的所有当前分数。
例如,要获得“愤怒”的当前分数,您可以这样做:
ec.meanPredict(ctrack.getCurrentParameters())[0].value
所以,为了得到当前最可能的情绪,你可以这样做:
function getCurrentEmotion()
{
if(!ec.meanPredict(ctrack.getCurrentParameters())){setTimeout(getCurrentEmotion,1000);return;}
var currentData = ec.meanPredict(ctrack.getCurrentParameters());
var currentScores = [];
//Gather all scores in an array
for(var i=0;i<currentData.length;i++)
{
currentScores.push(currentData[i].value);
}
//Get the biggest score
var max = Math.max.apply(null,currentScores);
//Calculate its index
var indexOfScore = currentScores.indexOf(max);
//Get the associated emotion
var emotion = currentData[indexOfScore].emotion;
console.log(emotion);
//Set up a loop (did not add 'var', to allow stopping it from outside)
currentEmotionLoop = setTimeout(getCurrentEmotion,3000);
}
要随时停止循环,请执行以下操作:
clearTimeout(currentEmotionLoop);
顺便说一句,ec
变量是私有(private)声明的,所以为了让它工作,要么删除声明它的地方的 var
:
var ec = new emotionClassifier();
或者将这段代码写在同一个文件中,在同一个范围内。
关于javascript - 在 javascript 中访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726448/