Spaces:
Running
Running
File size: 5,767 Bytes
025384a d804881 025384a d804881 025384a d804881 025384a d804881 025384a d804881 025384a d804881 025384a d804881 9ab32d7 d804881 9ab32d7 d804881 9ab32d7 d804881 9ab32d7 d804881 025384a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import json
import os
import platform
import unittest
from aip_trainer import app_logger
from aip_trainer.lambdas import lambdaSpeechToScore
from tests import EVENTS_FOLDER
text_dict = {
"de": "Ich bin Alex, wer bist du?",
"en": "Hi there, how are you?"
}
def check_output_by_field(output, key, match, expected_output):
import re
assert len(output[key].strip()) > 0
for word in output[key].lstrip().rstrip().split(" "):
word_check = re.findall(match, word.strip())
assert len(word_check) == 1
assert word_check[0] == word.strip()
output[key] = expected_output[key]
return output
def check_output(self, output, expected_output):
self.maxDiff = None
try:
assert len(output["matched_transcripts"].strip()) > 0
assert len(output["matched_transcripts_ipa"].strip()) > 0
assert len(output["ipa_transcript"].strip()) > 0
assert len(output["real_transcripts_ipa"].strip()) > 0
output = check_output_by_field(
output, "is_letter_correct_all_words", "[01]+", expected_output
)
output = check_output_by_field(output, "end_time", "\d+\.\d+", expected_output)
output = check_output_by_field(
output, "start_time", "\d+\.\d+", expected_output
)
output = check_output_by_field(
output, "pronunciation_accuracy", "\d+", expected_output
)
output["matched_transcripts"] = expected_output["matched_transcripts"]
output["matched_transcripts_ipa"] = expected_output["matched_transcripts_ipa"]
output["pronunciation_accuracy"] = expected_output["pronunciation_accuracy"]
output["pair_accuracy_category"] = expected_output["pair_accuracy_category"]
output["ipa_transcript"] = expected_output["ipa_transcript"]
output["real_transcript"] = expected_output["real_transcript"]
output["real_transcripts_ipa"] = expected_output["real_transcripts_ipa"]
self.assertDictEqual(expected_output, output)
except Exception as e:
app_logger.error(f"e:{e}.")
raise e
class TestGetAccuracyFromRecordedAudio(unittest.TestCase):
def setUp(self):
if platform.system() == "Windows" or platform.system() == "Win32":
os.environ["PYTHONUTF8"] = "1"
def tearDown(self):
if (
platform.system() == "Windows" or platform.system() == "Win32"
) and "PYTHONUTF8" in os.environ:
del os.environ["PYTHONUTF8"]
def test_GetAccuracyFromRecordedAudio(self):
with open(EVENTS_FOLDER / "GetAccuracyFromRecordedAudio.json", "r") as src:
inputs_outputs = json.load(src)
inputs = inputs_outputs["inputs"]
outputs = inputs_outputs["outputs"]
for event_name, event_content in inputs.items():
expected_output = outputs[event_name]
output = lambdaSpeechToScore.lambda_handler(event_content, [])
output = json.loads(output)
app_logger.info(
f"output type:{type(output)}, expected_output type:{type(expected_output)}."
)
check_output(self, output, expected_output)
def test_get_speech_to_score_en_ok(self):
from aip_trainer.lambdas import lambdaSpeechToScore
language = "en"
path = EVENTS_FOLDER / f"test_{language}.wav"
output = lambdaSpeechToScore.get_speech_to_score_dict(
real_text=text_dict[language],
file_bytes_or_audiotmpfile=path,
language=language,
remove_random_file=False,
)
expected_output = {
"real_transcript": text_dict[language],
"ipa_transcript": "ha\u026a ha\u028a \u0259r ju",
"pronunciation_accuracy": "69",
"real_transcripts": text_dict[language],
"matched_transcripts": "hi - how are you",
"real_transcripts_ipa": "ha\u026a \u00f0\u025br, ha\u028a \u0259r ju?",
"matched_transcripts_ipa": "ha\u026a ha\u028a \u0259r ju",
"pair_accuracy_category": "0 2 0 0 0",
"start_time": "0.2245625 1.3228125 0.852125 1.04825 1.3228125",
"end_time": "0.559875 1.658125 1.14825 1.344375 1.658125",
"is_letter_correct_all_words": "11 000001 111 111 1111 ",
}
check_output(self, output, expected_output)
def test_get_speech_to_score_de_ok(self):
from aip_trainer.lambdas import lambdaSpeechToScore
language = "de"
path = EVENTS_FOLDER / f"test_{language}.wav"
output = lambdaSpeechToScore.get_speech_to_score_dict(
real_text=text_dict[language],
file_bytes_or_audiotmpfile=path,
language=language,
remove_random_file=False,
)
expected_output = {
"real_transcript": text_dict[language],
"ipa_transcript": "\u026a\u00e7 bi\u02d0n a\u02d0l\u025bksv\u025b\u02d0 b\u025bst\u025b\u02d0 du\u02d0",
"pronunciation_accuracy": "63",
"real_transcripts": text_dict[language],
"matched_transcripts": "ich bin alexwe - beste du",
"real_transcripts_ipa": "\u026a\u00e7 bi\u02d0n a\u02d0l\u025bks, v\u0250 b\u026ast du\u02d0?",
"matched_transcripts_ipa": "\u026a\u00e7 bi\u02d0n a\u02d0l\u025bksv\u0259 - b\u0259st\u0259 du\u02d0",
"pair_accuracy_category": "0 0 2 2 2 0",
"start_time": "0.0 0.3075 0.62525 2.1346875 1.5785625 2.1346875",
"end_time": "0.328 0.6458125 1.44025 2.4730625 2.15525 2.4730625",
"is_letter_correct_all_words": "111 111 11111 000 1011 111 ",
}
check_output(self, output, expected_output)
if __name__ == "__main__":
unittest.main()
|