fixing statistical results

This commit is contained in:
Pei-Yun Sun 2020-10-20 12:43:29 +11:00
parent c1b350ab77
commit 7807470c57
12 changed files with 175 additions and 177 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -5,6 +5,7 @@ import re
from flask_restplus import Namespace, Resource
import datetime
import copy
import math
api = Namespace('general', path='/', description='general information related to app')
@ -19,10 +20,10 @@ class AppInfo(Resource):
"""
app_info = {
'developedBy': 'This app was developed by the Melbourne eResearch Group (www.eresearch.unimelb.edu.au) within the School of Computing and Information Systems (https://cis.unimelb.edu.au) at The University of Melbourne (www.unimelb.edu.au). ',
'description': 'The app uses artificial intelligence (convolutional neural networks) that have been trained on dog/cat images to identify whether a dog/cat is in an image, and if so the species type (breed) and it\'s emotion.',
'description': 'The app uses artificial intelligence (convolutional neural networks) to identify the age, gender, and emotion of the people.',
'contact': 'https://eresearch.unimelb.edu.au',
'developedByHTML': '<p>This app was developed by the Melbourne eResearch Group (<a href=\"www.eresearch.unimelb.edu.au\" target=\"_blank\">www.eresearch.unimelb.edu.au</a>) within the School of Computing and Information Systems (<a href=\"https://cis.unimelb.edu.au\" target=\"_blank\">https://cis.unimelb.edu.au</a>) at The University of Melbourne (<a href=\"www.unimelb.edu.au\" target=\"_blank\">www.unimelb.edu.au</a>).</p>',
'descriptionHTML': '<p>The app uses artificial intelligence (convolutional neural networks) that have been trained on dog/cat images to identify whether a dog/cat is in an image, and if so the species type (breed) and it\'s emotion.</p>',
'descriptionHTML': '<p>The app uses artificial intelligence (convolutional neural networks) to identify the age, gender, and emotion of the people.</p>',
'contactHTML': '<p>Please contact us at: <a href=\"eresearch.unimelb.edu.au\" target=\"_blank\">eresearch.unimelb.edu.au</a></p>'
}
@ -41,33 +42,19 @@ class StatisticalData(Resource):
from models.prediction import Prediction
from models.feedback import Feedback
total_cat_breed = []
total_dog_breed = []
prediction_collection = Prediction._get_collection()
feedback_collection = Feedback._get_collection()
statistical_data = copy.deepcopy(CONSTANTS['STATISTICAL_DATA'])
# initial statistical_data based on breed and alpha order
f = open("model_data/pet_classes.txt", "r")
for each_line in f:
first_char = each_line[0]
if first_char.isupper():
total_cat_breed.append(re.sub(r"_", " ", each_line.rstrip(), flags=re.IGNORECASE).title())
else:
total_dog_breed.append(re.sub(r"_", " ", each_line.rstrip(), flags=re.IGNORECASE).title())
f.close()
total_cat_breed.sort()
total_dog_breed.sort()
# initial statistical_data based on age and ascending order
total_age = []
for i in range(21):
total_age.append(str(i * 5) + '+')
for each_breed in total_cat_breed:
statistical_data['Cat']['prediction_data']['breed'][each_breed] = 0
statistical_data['Cat']['feedback_data']['breed']['wrong'][each_breed] = 0
statistical_data['Cat']['feedback_data']['breed']['correct'][each_breed] = 0
for each_breed in total_dog_breed:
statistical_data['Dog']['prediction_data']['breed'][each_breed] = 0
statistical_data['Dog']['feedback_data']['breed']['wrong'][each_breed] = 0
statistical_data['Dog']['feedback_data']['breed']['correct'][each_breed] = 0
for each_age in total_age:
statistical_data['prediction_data']['age'][each_age] = 0
statistical_data['feedback_data']['age']['wrong'][each_age] = 0
statistical_data['feedback_data']['age']['correct'][each_age] = 0
# photo by date
today = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
@ -90,65 +77,85 @@ class StatisticalData(Resource):
# prediction
total_prediction = prediction_collection.find({})
for each_prediction in total_prediction:
prediction_results = each_prediction['predictionResults']
for each_result in prediction_results:
statistical_data[each_result['type']]['prediction_number'] = statistical_data[each_result['type']].get(
statistical_data['prediction_number'] = statistical_data.get(
'prediction_number', 0) + 1
statistical_data[each_result['type']]['prediction_data']['breed'][each_result['breed']] = \
statistical_data[each_result['type']]['prediction_data']['breed'].get(each_result['breed'], 0) + 1
statistical_data[each_result['type']]['prediction_data']['emotion'][each_result['emotion']] = \
statistical_data[each_result['type']]['prediction_data']['emotion'].get(each_result['emotion'],
0) + 1
# age, gender, emotion
each_age = str(5*math.floor(each_result['age'] / 5)) + '+'
statistical_data['prediction_data']['age'][each_age] = \
statistical_data['prediction_data']['age'].get(each_age, 0) + 1
statistical_data['prediction_data']['gender'][each_result['gender']] = \
statistical_data['prediction_data']['gender'].get(each_result['gender'], 0) + 1
statistical_data['prediction_data']['emotion'][each_result['emotion']] = \
statistical_data['prediction_data']['emotion'].get(each_result['emotion'], 0) + 1
# feedback
total_feedback = feedback_collection.find({})
for each_feedback in total_feedback:
feedback_content = each_feedback['content']
for each_content in feedback_content:
statistical_data[each_content['type']]['feedback_number'] = statistical_data[each_content['type']].get(
statistical_data['feedback_number'] = statistical_data.get(
'feedback_number', 0) + 1
if not each_content['breedCorrectness']:
statistical_data[each_content['type']]['feedback_data']['breed']['wrong'][
each_content['breedFeedback']] = \
statistical_data[each_content['type']]['feedback_data']['breed'][
'wrong'].get(each_content['breedFeedback'], 0) + 1
# age
if not each_content['ageCorrectness']:
statistical_data['feedback_data']['age']['wrong'][
each_content['ageFeedback']] = \
statistical_data['feedback_data']['age'][
'wrong'].get(each_content['ageFeedback'], 0) + 1
else:
statistical_data[each_content['type']]['feedback_data']['breed']['correct'][
each_content['breedFeedback']] = \
statistical_data[each_content['type']]['feedback_data']['breed']['correct'].get(
each_content['breedFeedback'], 0) + 1
statistical_data['feedback_data']['age']['correct'][
each_content['ageFeedback']] = \
statistical_data['feedback_data']['age']['correct'].get(
each_content['ageFeedback'], 0) + 1
# gender
if not each_content['genderCorrectness']:
statistical_data['feedback_data']['gender']['wrong'][
each_content['genderFeedback']] = \
statistical_data['feedback_data']['gender'][
'wrong'].get(each_content['genderFeedback'], 0) + 1
else:
statistical_data['feedback_data']['gender']['correct'][
each_content['genderFeedback']] = \
statistical_data['feedback_data']['gender']['correct'].get(
each_content['genderFeedback'], 0) + 1
if not each_content['emotionCorrectness']:
statistical_data[each_content['type']]['feedback_data']['emotion']['wrong'][
statistical_data['feedback_data']['emotion']['wrong'][
each_content['emotionFeedback']] = \
statistical_data[each_content['type']]['feedback_data']['emotion']['wrong'].get(
statistical_data['feedback_data']['emotion']['wrong'].get(
each_content['emotionFeedback'], 0) + 1
else:
statistical_data[each_content['type']]['feedback_data']['emotion']['correct'][
statistical_data['feedback_data']['emotion']['correct'][
each_content['emotionFeedback']] = \
statistical_data[each_content['type']]['feedback_data']['emotion']['correct'].get(
statistical_data['feedback_data']['emotion']['correct'].get(
each_content['emotionFeedback'], 0) + 1
result = {
'totalNumberOfPhotoUploaded': prediction_collection.count_documents({}),
'totalNumberOfCatPrediction': statistical_data['Cat']['prediction_number'],
'totalNumberOfDogPrediction': statistical_data['Dog']['prediction_number'],
'totalNumberOfCatFeedback': statistical_data['Cat']['feedback_number'],
'totalNumberOfDogFeedback': statistical_data['Dog']['feedback_number'],
'totalNumberOfDogBreedPrediction': statistical_data['Dog']['prediction_data']['breed'],
'totalNumberOfDogBreedCorrectFeedback': statistical_data['Dog']['feedback_data']['breed']['correct'],
'totalNumberOfDogBreedWrongFeedback': statistical_data['Dog']['feedback_data']['breed']['wrong'],
'totalNumberOfDogEmotionPrediction': statistical_data['Dog']['prediction_data']['emotion'],
'totalNumberOfDogEmotionCorrectFeedback': statistical_data['Dog']['feedback_data']['emotion']['correct'],
'totalNumberOfDogEmotionWrongFeedback': statistical_data['Dog']['feedback_data']['emotion']['wrong'],
'totalNumberOfCatBreedPrediction': statistical_data['Cat']['prediction_data']['breed'],
'totalNumberOfCatBreedCorrectFeedback': statistical_data['Cat']['feedback_data']['breed']['correct'],
'totalNumberOfCatBreedWrongFeedback': statistical_data['Cat']['feedback_data']['breed']['wrong'],
'totalNumberOfCatEmotionPrediction': statistical_data['Cat']['prediction_data']['emotion'],
'totalNumberOfCatEmotionCorrectFeedback': statistical_data['Cat']['feedback_data']['emotion']['correct'],
'totalNumberOfCatEmotionWrongFeedback': statistical_data['Cat']['feedback_data']['emotion']['wrong'],
'totalNumberOfPrediction': statistical_data['prediction_number'],
'totalNumberOfFeedback': statistical_data['feedback_number'],
'totalNumberOfAgePrediction': statistical_data['prediction_data']['age'],
'totalNumberOfAgeCorrectFeedback': statistical_data['feedback_data']['age']['correct'],
'totalNumberOfAgeWrongFeedback': statistical_data['feedback_data']['age']['wrong'],
'totalNumberOfGenderPrediction': statistical_data['prediction_data']['gender'],
'totalNumberOfGenderCorrectFeedback': statistical_data['feedback_data']['gender']['correct'],
'totalNumberOfGenderdWrongFeedback': statistical_data['feedback_data']['gender']['wrong'],
'totalNumberOfEmotionPrediction': statistical_data['prediction_data']['emotion'],
'totalNumberOfEmotionCorrectFeedback': statistical_data['feedback_data']['emotion']['correct'],
'totalNumberOfEmotionWrongFeedback': statistical_data['feedback_data']['emotion']['wrong'],
'numberOfPhotoByDate': total_number_of_photo_within_one_week
}

View File

@ -27,7 +27,6 @@ class Prediction(Resource):
img, detections = deepface.analyze(image)
# TODO: handle outputs
# encode image and jsonify detections
buffered = io.BytesIO()
img.save(buffered, format="JPEG")
@ -61,13 +60,12 @@ class Prediction(Resource):
'emotionScore': emotion_score
})
# store to db?
# new_prediction = Prediction(**{
# 'predictionResults': formatted_prediction_results,
# 'rawPredictionResults': detections,
# 'date': datetime.datetime.now(),
# })
# new_prediction.save()
# store results to db
new_prediction = Prediction(**{
'predictionResults': formatted_prediction_results,
'rawPredictionResults': detections,
'date': datetime.datetime.now(),
})
new_prediction.save()
return send_json_response(result, 200)

View File

@ -1,82 +1,59 @@
CONSTANTS = {
'ANIMAL_TYPE': ['cat', 'dog'],
'EMOTION': {
'HAPPY': 'Happy',
'NEUTRAL': 'Neutral',
'ANXIOUS': 'Anxious',
'SAD': 'Sad',
'UNSETTLED': 'Unsettled'
'angry': 'Angry',
'disgust': 'Disgust',
'fear': 'Fear',
'happy': 'Happy',
'sad': 'Sad',
'surprise': 'Surprise',
'neutral': 'Neutral'
},
'STATISTICAL_DATA': {
"Cat": {
"feedback_number": 0,
"prediction_number": 0,
"prediction_data": {
"breed": {},
"emotion": {
"Happy": 0,
"Neutral": 0,
"Anxious": 0,
"Sad": 0,
"Unsettled": 0
}
"feedback_number": 0,
"prediction_number": 0,
"prediction_data": {
"age": {},
"gender": {
"Man": 0,
"Woman": 0
},
"feedback_data": {
"breed": {
"wrong": {},
"correct": {}
},
"emotion": {
"wrong": {
"Happy": 0,
"Neutral": 0,
"Anxious": 0,
"Sad": 0,
"Unsettled": 0
},
"correct": {
"Happy": 0,
"Neutral": 0,
"Anxious": 0,
"Sad": 0,
"Unsettled": 0
}
}
"emotion": {
"Angry": 0,
"Disgust": 0,
"Fear": 0,
"Happy": 0,
"Sad": 0,
"Surprise": 0,
"Neutral": 0
}
},
"Dog": {
"feedback_number": 0,
"prediction_number": 0,
"prediction_data": {
"breed": {},
"emotion": {
"Happy": 0,
"Neutral": 0,
"Anxious": 0,
"Sad": 0,
"Unsettled": 0
}
"feedback_data": {
"age": {
"wrong": {},
"correct": {}
},
"feedback_data": {
"breed": {
"wrong": {},
"correct": {}
"gender": {
"wrong": {},
"correct": {}
},
"emotion": {
"wrong": {
"Angry": 0,
"Disgust": 0,
"Fear": 0,
"Happy": 0,
"Sad": 0,
"Surprise": 0,
"Neutral": 0
},
"emotion": {
"wrong": {
"Happy": 0,
"Neutral": 0,
"Anxious": 0,
"Sad": 0,
"Unsettled": 0
},
"correct": {
"Happy": 0,
"Neutral": 0,
"Anxious": 0,
"Sad": 0,
"Unsettled": 0
}
"correct": {
"Angry": 0,
"Disgust": 0,
"Fear": 0,
"Happy": 0,
"Sad": 0,
"Surprise": 0,
"Neutral": 0
}
}
}

View File

@ -2,9 +2,12 @@ from config import db
class FeedbackContent(db.EmbeddedDocument):
type = db.StringField(required=True)
breedFeedback = db.StringField(required=True)
breedCorrectness = db.BooleanField(required=True)
ageFeedback = db.StringField(required=True)
ageCorrectness = db.BooleanField(required=True)
genderFeedback = db.StringField(required=True)
genderCorrectness = db.BooleanField(required=True)
emotionFeedback = db.StringField(required=True)
emotionCorrectness = db.BooleanField(required=True)

View File

@ -68,9 +68,17 @@
$("#div_prediction").fadeIn(1500);
if (response['status'] === 'success') {
for (let i=0; i<response['results'].length; i++) {
const addedId = `<div style=\"border: 1px dashed darkgrey\"><ul><li><strong>ID: </strong>${response['results'][i].id}`
const emotionList = `<div style=\"margin: 10px 30px; font-weight: lighter;\"><ul><li>${response['results'][i].emotion['all'][0]}</li><li>${response['results'][i].emotion['all'][1]}</li><li>${response['results'][i].emotion['all'][2]}</li><li>${response['results'][i].emotion['all'][3]}</li><li>${response['results'][i].emotion['all'][4]}</li><li>${response['results'][i].emotion['all'][5]}</li><li>${response['results'][i].emotion['all'][6]}</li></ul></div>`
const otherInfo = `</li><li><strong>Age: </strong>${response['results'][i].age}</li><li><strong>Gender: </strong>${response['results'][i].gender}</li><li><strong>Emotion: </strong>${response['results'][i].emotion['dominant']}</li></ul>${emotionList}</div>`
const addedId = `<div style=\"border: 1px dashed darkgrey\"><ul><li><strong>ID: </strong>${response['results'][i].id}</li>`
const emotionList = `<div style=\"margin: 10px 30px; font-weight: lighter;\"><ul><li>${response['results'][i].emotion['all'][0]}</li>
<li>${response['results'][i].emotion['all'][1]}</li>
<li>${response['results'][i].emotion['all'][2]}</li>
<li>${response['results'][i].emotion['all'][3]}</li>
<li>${response['results'][i].emotion['all'][4]}</li>
<li>${response['results'][i].emotion['all'][5]}</li>
<li>${response['results'][i].emotion['all'][6]}</li></ul></div>`
const otherInfo = `<li><strong>Age: </strong>${response['results'][i].age}</li>
<li><strong>Gender: </strong>${response['results'][i].gender}</li>
<li><strong>Emotion: </strong>${response['results'][i].emotion['dominant']}</li></ul>${emotionList}</div>`
const addedHtml = response['isShowId'] !== 'false' ? addedId + otherInfo : otherInfo
resultArea.innerHTML += addedHtml
}

View File

@ -16,25 +16,25 @@
<canvas id="numberOfPhotoByDate" width="8" height="5"></canvas>
</div>
<br/>
<h1>Cat: </h1>
<h1>Age: </h1>
<div style="width: 800px; margin: 5px auto">
<canvas id="numberOfCatBreedPredictionChart" width="8" height="5"></canvas>
<canvas id="numberOfAgePredictionChart" width="8" height="5"></canvas>
</div>
<br/>
<div style="width: 800px; margin: 5px auto">
<canvas id="numberOfCatBreedFeedbackChart" width="8" height="5"></canvas>
<canvas id="numberOfAgeFeedbackChart" width="8" height="5"></canvas>
</div>
<br/>
<h1>Dog: </h1>
<h1>Gender: </h1>
<div style="overflow-x: auto">
<div style="width: 1300px; margin: 5px auto; overflow-x: auto">
<canvas id="numberOfDogBreedPredictionChart" width="9" height="5"></canvas>
<canvas id="numberOfGenderPredictionChart" width="9" height="5"></canvas>
</div>
</div>
<br/>
<div style="overflow-x: auto">
<div style="width: 1300px; margin: 5px auto; overflow-x: auto">
<canvas id="numberOfDogBreedFeedbackChart" width="9" height="5"></canvas>
<canvas id="numberOfGenderFeedbackChart" width="9" height="5"></canvas>
</div>
</div>
<br/>
@ -42,7 +42,7 @@
<div style="width: 800px; margin: 5px auto;">
<canvas id="numberOfEmotionPredictionChart" width="9" height="5"></canvas>
</div>
<br/>
<!-- <br/>
<div class="row">
<div class="col-lg-6 col-sm-12" style="width: 800px; margin: 5px auto;">
<canvas id="catEmotionFeedbackChart" width="9" height="5"></canvas>
@ -50,7 +50,12 @@
<div class="col-lg-6 col-sm-12" style="width: 800px; margin: 5px auto;">
<canvas id="dogEmotionFeedbackChart" width="9" height="5"></canvas>
</div>
</div> -->
<br/>
<div style="width: 800px; margin: 5px auto;">
<canvas id="numberOfEmotionFeedbackChart" width="9" height="5"></canvas>
</div>
</div>
<script>
function generalBackgroundColor(number) {
@ -208,53 +213,53 @@
{#total prediction number#}
let ctxForTotalPredictionNumber = document.getElementById('numberOfTotalPrediction').getContext('2d');
let totalPredictionNumberData = {
"Cat": response['totalNumberOfCatPrediction'],
"Dog": response['totalNumberOfDogPrediction']
"Total": response['totalNumberOfPrediction'],
}
let totalPredictionCount = response['totalNumberOfCatPrediction'] + response['totalNumberOfDogPrediction']
let totalPredictionCount = response['totalNumberOfPrediction']
let totalNumberOfPhotoUploaded = response['totalNumberOfPhotoUploaded']
drawDoughunt(ctxForTotalPredictionNumber, totalPredictionNumberData, `Total prediction number: ${totalPredictionCount} pets / ${totalNumberOfPhotoUploaded} photos`)
drawDoughunt(ctxForTotalPredictionNumber, totalPredictionNumberData, `Total prediction number: ${totalPredictionCount} faces / ${totalNumberOfPhotoUploaded} photos`)
{#total feedback number#}
let ctxForTotalFeedbackNumber = document.getElementById('numberOfTotalFeedback').getContext('2d');
let totalFeedbackNumberData = {
"Cat": response['totalNumberOfCatFeedback'],
"Dog": response['totalNumberOfDogFeedback']
"Total": response['totalNumberOfFeedback'],
}
let totalFeedbackCount = response['totalNumberOfCatFeedback'] + response['totalNumberOfDogFeedback']
let totalFeedbackCount = response['totalNumberOfFeedback']
drawDoughunt(ctxForTotalFeedbackNumber, totalFeedbackNumberData, `Total feedback number: ${totalFeedbackCount}`)
{#number of photo by date#}
let ctxForNumberOfPhotoByDate = document.getElementById('numberOfPhotoByDate').getContext('2d');
drawLine(ctxForNumberOfPhotoByDate, response['numberOfPhotoByDate'], 'Number of Photos within a week')
{#cat breed prediction#}
let ctxForCatBreedPredictionNumber = document.getElementById('numberOfCatBreedPredictionChart').getContext('2d');
drawVerticalBar(ctxForCatBreedPredictionNumber, response['totalNumberOfCatBreedPrediction'], "Cat breed prediction")
{#age prediction#}
let ctxForAgePredictionNumber = document.getElementById('numberOfAgedPredictionChart').getContext('2d');
drawVerticalBar(ctxForAgePredictionNumber, response['totalNumberOfAgePrediction'], "Age prediction")
{#cat breed feedback#}
let ctxForCatBreedFeedback = document.getElementById('numberOfCatBreedFeedbackChart').getContext('2d');
drawVerticalStackBar(ctxForCatBreedFeedback, response['totalNumberOfCatBreedCorrectFeedback'], response['totalNumberOfCatBreedWrongFeedback'], "Cat breed feedback", ['Correct', 'Wrong'])
{#age feedback#}
let ctxForAgeFeedback = document.getElementById('numberOfAgeFeedbackChart').getContext('2d');
drawVerticalStackBar(ctxForAgeFeedback, response['totalNumberOfAgeCorrectFeedback'], response['totalNumberOfAgeWrongFeedback'], "Age feedback", ['Correct', 'Wrong'])
{#dog breed prediction#}
let ctxForDogBreedPredictionNumber = document.getElementById('numberOfDogBreedPredictionChart').getContext('2d');
drawVerticalBar(ctxForDogBreedPredictionNumber, response['totalNumberOfDogBreedPrediction'], "Dog breed prediction")
{#gender prediction#}
let ctxForGenderPredictionNumber = document.getElementById('numberOfGenderPredictionChart').getContext('2d');
drawVerticalBar(ctxForGenderPredictionNumber, response['totalNumberOfGenderPrediction'], "Gender prediction")
{#dog breed feedback#}
let ctxForDogBreedFeedback = document.getElementById('numberOfDogBreedFeedbackChart').getContext('2d');
drawVerticalStackBar(ctxForDogBreedFeedback, response['totalNumberOfDogBreedCorrectFeedback'], response['totalNumberOfDogBreedWrongFeedback'], "Dog breed feedback", ['Correct', 'Wrong'])
{#gender feedback#}
let ctxForGenderFeedback = document.getElementById('numberOfGenderFeedbackChart').getContext('2d');
drawVerticalStackBar(ctxForGenderFeedback, response['totalNumberOfGenderCorrectFeedback'], response['totalNumberOfGenderWrongFeedback'], "Gender feedback", ['Correct', 'Wrong'])
{#emotion prediction#}
let ctxForEmotionPredictionNumber = document.getElementById('numberOfEmotionPredictionChart').getContext('2d');
drawVerticalStackBar(ctxForEmotionPredictionNumber, response['totalNumberOfCatEmotionPrediction'], response['totalNumberOfDogEmotionPrediction'], "Emotion prediction", ['Cat', 'Dog'])
// drawVerticalStackBar(ctxForEmotionPredictionNumber, response['totalNumberOfEmotionPrediction'], response['totalNumberOfEmotionPrediction'], "Emotion prediction", ['Cat', 'Dog'])
{#cat emotion feedback#}
let ctxForCatEmotionFeedback = document.getElementById('catEmotionFeedbackChart').getContext('2d');
drawVerticalStackBar(ctxForCatEmotionFeedback, response['totalNumberOfCatEmotionCorrectFeedback'], response['totalNumberOfCatEmotionWrongFeedback'], "Emotion feedback for cat", ['Correct', 'Wrong'])
// {#cat emotion feedback#}
// let ctxForCatEmotionFeedback = document.getElementById('catEmotionFeedbackChart').getContext('2d');
// drawVerticalStackBar(ctxForCatEmotionFeedback, response['totalNumberOfCatEmotionCorrectFeedback'], response['totalNumberOfCatEmotionWrongFeedback'], "Emotion feedback for cat", ['Correct', 'Wrong'])
{#dog emotion feedback#}
let ctxForDogEmotionFeedback = document.getElementById('dogEmotionFeedbackChart').getContext('2d');
drawVerticalStackBar(ctxForDogEmotionFeedback, response['totalNumberOfDogEmotionCorrectFeedback'], response['totalNumberOfDogEmotionWrongFeedback'], "Emotion feedback for dog", ['Correct', 'Wrong'])
// {#dog emotion feedback#}
// let ctxForDogEmotionFeedback = document.getElementById('dogEmotionFeedbackChart').getContext('2d');
// drawVerticalStackBar(ctxForDogEmotionFeedback, response['totalNumberOfDogEmotionCorrectFeedback'], response['totalNumberOfDogEmotionWrongFeedback'], "Emotion feedback for dog", ['Correct', 'Wrong'])
});
}