From 491852e1b9059de782d95b9b160b150cb0573c0f Mon Sep 17 00:00:00 2001 From: Mahmoud Ashraf Date: Wed, 20 Nov 2024 13:50:57 +0200 Subject: [PATCH] Add new tests (#1158) --- tests/data/hotwords.mp3 | Bin 0 -> 65129 bytes tests/test_tokenizer.py | 120 +++++++++++++++++++++++++++++++ tests/test_transcribe.py | 152 +++++++++++++-------------------------- 3 files changed, 171 insertions(+), 101 deletions(-) create mode 100644 tests/data/hotwords.mp3 create mode 100644 tests/test_tokenizer.py diff --git a/tests/data/hotwords.mp3 b/tests/data/hotwords.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d435e1c8089b2bd3b50ed2d7e507aeb800859e0d GIT binary patch literal 65129 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 J@PC?t{{cv%`@{eM literal 0 HcmV?d00001 diff --git a/tests/test_tokenizer.py b/tests/test_tokenizer.py new file mode 100644 index 0000000..5ea43b0 --- /dev/null +++ b/tests/test_tokenizer.py @@ -0,0 +1,120 @@ +from faster_whisper import WhisperModel +from faster_whisper.tokenizer import Tokenizer +from faster_whisper.transcribe import get_suppressed_tokens + + +def test_suppressed_tokens_minus_1(): + model = WhisperModel("tiny.en") + + tokenizer = Tokenizer(model.hf_tokenizer, False) + tokens = get_suppressed_tokens(tokenizer, [-1]) + assert tokens == ( + 1, + 2, + 7, + 8, + 9, + 10, + 14, + 25, + 26, + 27, + 28, + 29, + 31, + 58, + 59, + 60, + 61, + 62, + 63, + 90, + 91, + 92, + 93, + 357, + 366, + 438, + 532, + 685, + 705, + 796, + 930, + 1058, + 1220, + 1267, + 1279, + 1303, + 1343, + 1377, + 1391, + 1635, + 1782, + 1875, + 2162, + 2361, + 2488, + 3467, + 4008, + 4211, + 4600, + 4808, + 5299, + 5855, + 6329, + 7203, + 9609, + 9959, + 10563, + 10786, + 11420, + 11709, + 11907, + 13163, + 13697, + 13700, + 14808, + 15306, + 16410, + 16791, + 17992, + 19203, + 19510, + 20724, + 22305, + 22935, + 27007, + 30109, + 30420, + 33409, + 34949, + 40283, + 40493, + 40549, + 47282, + 49146, + 50257, + 50357, + 50358, + 50359, + 50360, + ) + + +def test_suppressed_tokens_minus_value(): + model = WhisperModel("tiny.en") + + tokenizer = Tokenizer(model.hf_tokenizer, False) + tokens = get_suppressed_tokens(tokenizer, [13]) + assert tokens == (13, 50257, 50357, 50358, 50359, 50360) + + +def test_split_on_unicode(): + model = WhisperModel("tiny") + tokenizer = Tokenizer(model.hf_tokenizer, False) + + tokens = [8404, 871, 287, 6, 246, 526, 3210, 20378] + words, word_tokens = tokenizer.split_tokens_on_unicode(tokens) + + assert words == [" elle", " est", " l", "'", "\ufffd", "é", "rit", "oire"] + assert word_tokens == [[8404], [871], [287], [6], [246], [526], [3210], [20378]] diff --git a/tests/test_transcribe.py b/tests/test_transcribe.py index 8833547..6b76fe9 100644 --- a/tests/test_transcribe.py +++ b/tests/test_transcribe.py @@ -1,10 +1,9 @@ +import inspect import os import numpy as np from faster_whisper import BatchedInferencePipeline, WhisperModel, decode_audio -from faster_whisper.tokenizer import Tokenizer -from faster_whisper.transcribe import get_suppressed_tokens def test_supported_languages(): @@ -215,107 +214,58 @@ def test_multilingual_transcription(data_dir): ) -def test_suppressed_tokens_minus_1(): - model = WhisperModel("tiny.en") +def test_hotwords(data_dir): + model = WhisperModel("tiny") + pipeline = BatchedInferencePipeline(model) - tokenizer = Tokenizer(model.hf_tokenizer, False) - tokens = get_suppressed_tokens(tokenizer, [-1]) - assert tokens == ( - 1, - 2, - 7, - 8, - 9, - 10, - 14, - 25, - 26, - 27, - 28, - 29, - 31, - 58, - 59, - 60, - 61, - 62, - 63, - 90, - 91, - 92, - 93, - 357, - 366, - 438, - 532, - 685, - 705, - 796, - 930, - 1058, - 1220, - 1267, - 1279, - 1303, - 1343, - 1377, - 1391, - 1635, - 1782, - 1875, - 2162, - 2361, - 2488, - 3467, - 4008, - 4211, - 4600, - 4808, - 5299, - 5855, - 6329, - 7203, - 9609, - 9959, - 10563, - 10786, - 11420, - 11709, - 11907, - 13163, - 13697, - 13700, - 14808, - 15306, - 16410, - 16791, - 17992, - 19203, - 19510, - 20724, - 22305, - 22935, - 27007, - 30109, - 30420, - 33409, - 34949, - 40283, - 40493, - 40549, - 47282, - 49146, - 50257, - 50357, - 50358, - 50359, - 50360, + audio_path = os.path.join(data_dir, "hotwords.mp3") + audio = decode_audio(audio_path) + + segments, info = model.transcribe(audio, hotwords="ComfyUI") + segments = list(segments) + + assert "ComfyUI" in segments[0].text + assert info.transcription_options.hotwords == "ComfyUI" + + segments, info = pipeline.transcribe(audio, hotwords="ComfyUI") + segments = list(segments) + + assert "ComfyUI" in segments[0].text + assert info.transcription_options.hotwords == "ComfyUI" + + +def test_transcribe_signature(): + model_transcribe_args = set(inspect.getargs(WhisperModel.transcribe.__code__).args) + pipeline_transcribe_args = set( + inspect.getargs(BatchedInferencePipeline.transcribe.__code__).args ) + pipeline_transcribe_args.remove("batch_size") + + assert model_transcribe_args == pipeline_transcribe_args -def test_suppressed_tokens_minus_value(): - model = WhisperModel("tiny.en") +def test_monotonic_timestamps(physcisworks_path): + model = WhisperModel("tiny") + pipeline = BatchedInferencePipeline(model=model) - tokenizer = Tokenizer(model.hf_tokenizer, False) - tokens = get_suppressed_tokens(tokenizer, [13]) - assert tokens == (13, 50257, 50357, 50358, 50359, 50360) + segments, info = model.transcribe(physcisworks_path, word_timestamps=True) + segments = list(segments) + + for i in range(len(segments) - 1): + assert segments[i].start <= segments[i].end + assert segments[i].end <= segments[i + 1].start + for word in segments[i].words: + assert word.start <= word.end + assert word.end <= segments[i].end + assert segments[-1].end <= info.duration + + segments, info = pipeline.transcribe(physcisworks_path, word_timestamps=True) + segments = list(segments) + + for i in range(len(segments) - 1): + assert segments[i].start <= segments[i].end + assert segments[i].end <= segments[i + 1].start + for word in segments[i].words: + assert word.start <= word.end + assert word.end <= segments[i].end + assert segments[-1].end <= info.duration