def gesture_overlap_csv(csvpathgt, csvpathpred, seqlenght):
""" Evaluate this sample against the ground truth file """
maxGestures = 20
# Get the list of gestures from the ground truth and frame activation
gtGestures = []
binvec_gt = numpy.zeros((maxGestures, seqlenght))
with open(csvpathgt, 'rb') as csvfilegt:
csvgt = csv.reader(csvfilegt)
for row in csvgt:
binvec_gt[int(row[0])-1, int(row[1])-1:int(row[2])-1] = 1
gtGestures.append(int(row[0]))
# Get the list of gestures from prediction and frame activation
predGestures = []
binvec_pred = numpy.zeros((maxGestures, seqlenght))
with open(csvpathpred, 'rb') as csvfilepred:
csvpred = csv.reader(csvfilepred)
for row in csvpred:
binvec_pred[int(row[0])-1, int(row[1])-1:int(row[2])-1] = 1
predGestures.append(int(row[0]))
# Get the list of gestures without repetitions for ground truth and predicton
gtGestures = numpy.unique(gtGestures)
predGestures = numpy.unique(predGestures)
bgt = (numpy.argmax(binvec_gt,axis=0)+1) * (numpy.max(binvec_gt,axis=0)>0)
bpred = (numpy.argmax(binvec_pred,axis=0)+1) * (numpy.max(binvec_pred,axis=0)>0)
# Find false positives
falsePos=numpy.setdiff1d(gtGestures,numpy.union1d(gtGestures,numpy.union1d(gtGestures,predGestures)))
# Get overlaps for each gesture
overlaps = []
for idx in gtGestures:
intersec = sum(binvec_gt[idx-1] * binvec_pred[idx-1])
aux = binvec_gt[idx-1] + binvec_pred[idx-1]
union = sum(aux > 0)
overlaps.append(intersec/union)
# Use real gestures and false positive gestures to calculate the final score
return sum(overlaps)/(len(overlaps)+len(falsePos))
评论列表
文章目录