Resolve WES-90 "Integrate signpredictor in courses"
This commit is contained in:
committed by
Jerome Coudron
parent
1a75791d62
commit
746906294b
123
Assets/Courses/Scripts/Feedback.cs
Normal file
123
Assets/Courses/Scripts/Feedback.cs
Normal file
@@ -0,0 +1,123 @@
|
||||
//using Mediapipe.Unity.Tutorial;
|
||||
using Mediapipe.Unity.Tutorial;
|
||||
using System.Collections;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
// for your own scripts make sure to add the following line:
|
||||
using DigitalRuby.Tween;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace Assets.Courses.Scripts
|
||||
{
|
||||
public class Feedback : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// Reference to the feedback field
|
||||
/// </summary>
|
||||
public TMP_Text feedback;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the sign predictor
|
||||
/// </summary>
|
||||
public Wesign_extractor signPredictor;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the TemplateCourse
|
||||
/// </summary>
|
||||
public TemplateCourse templateCourse;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the progress bar
|
||||
/// </summary>
|
||||
public GameObject progress;
|
||||
|
||||
/// <summary>
|
||||
/// Start is called before the first frame update
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
// Start the coroutine to update the scale every 200 milliseconds
|
||||
StartCoroutine(UpdateFeedback());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UpdateScale updates the progress bar every 200ms, updated the feedback text, and progress bar color
|
||||
/// If a high enough accuracy is detected, it will go to the next sign
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerator UpdateFeedback()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
// Get current sign
|
||||
char currentSign = (char)(65 + templateCourse.GetWordIndex());
|
||||
//Debug.Log(currentSign);
|
||||
// Get the predicted sign
|
||||
if (signPredictor != null && signPredictor.letterProbabilities != null && signPredictor.letterProbabilities.ContainsKey(currentSign))
|
||||
{
|
||||
int accuracy = (int)(signPredictor.letterProbabilities[currentSign] * 100);
|
||||
if (accuracy > 98)
|
||||
{
|
||||
feedback.text = "Perfect!!!";
|
||||
feedback.color = Color.green;
|
||||
progress.GetComponent<Image>().color = Color.green;
|
||||
}
|
||||
else if (accuracy > 95)
|
||||
{
|
||||
feedback.text = "Super!";
|
||||
feedback.color = Color.green;
|
||||
progress.GetComponent<Image>().color = Color.green;
|
||||
}
|
||||
else if (accuracy > 90)
|
||||
{
|
||||
feedback.text = "Goed";
|
||||
feedback.color = Color.green;
|
||||
progress.GetComponent<Image>().color = Color.green;
|
||||
}
|
||||
else if (accuracy > 80)
|
||||
{
|
||||
feedback.text = "Bijna...";
|
||||
feedback.color = new Color(0xFF, 0xE5, 0x00);
|
||||
progress.GetComponent<Image>().color = new Color(0xFF, 0xE5, 0x00);
|
||||
}
|
||||
else
|
||||
{
|
||||
feedback.text = "Detecteren ...";
|
||||
feedback.color = Color.red;
|
||||
progress.GetComponent<Image>().color = Color.red;
|
||||
}
|
||||
// use an exponential scale
|
||||
float newScale = Mathf.Exp(((float)accuracy / 24.5f) - 4);
|
||||
Vector3 newScaleVector = new Vector3(newScale,
|
||||
progress.transform.localScale.y,
|
||||
progress.transform.localScale.z);
|
||||
System.Action<ITween<Vector3>> updateProgressScale = (t) =>
|
||||
{
|
||||
if (progress != null)
|
||||
{
|
||||
progress.transform.localScale = t.CurrentValue;
|
||||
}
|
||||
|
||||
};
|
||||
progress.Tween("ScaleProgress", progress.transform.localScale, newScaleVector, 0.2f, TweenScaleFunctions.CubicEaseInOut, updateProgressScale);
|
||||
|
||||
if (accuracy > 90)
|
||||
{
|
||||
// Wait and go to next sign
|
||||
yield return new WaitForSeconds(1);
|
||||
templateCourse.NextSign();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
progress.transform.localScale = new Vector3(0f, progress.transform.localScale.y, progress.transform.localScale.z);
|
||||
//Debug.Log("doesn't contain A");
|
||||
}
|
||||
|
||||
// Wait for 200 milliseconds before updating the scale again
|
||||
yield return new WaitForSeconds(0.2f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user