我使用JS库进行面部追踪/情感检测,称为CLMtracker。
http://auduno.github.io/clmtrackr/examples/clm_emotiondetection.html
注意:对于那些试图使用它的人来说,似乎最适合使用Chrome。
我正在使用的示例,我想知道如何访问每种情感的值。例如,我希望每10秒检查一次值是什么,然后打印到控制台。由此我还想比较这些值以找到最高值并找到与之相关的情感。我认为我说max()函数会给我一个最高的数组吗?
我尝试过:
我试图获得emotionData [0] .emotion和emotionData [0] .value应该打印愤怒和值,但它只打印0.我也尝试了相同的方法,数据似乎没有返回任何东西。
修改的
情绪数据让我:
然而,当我更改表达时,它似乎没有显示任何更新/更改
答案 0 :(得分:1)
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
变量是私有声明的,所以为了使它能够工作,请删除声明它的var
:
var ec = new emotionClassifier();
或将此代码写在同一文件中的相同范围内。