From 70bc57180c172f1829eaccff81e3d90132282cc4 Mon Sep 17 00:00:00 2001 From: Alex Young Date: Sun, 14 Apr 2024 19:29:46 +0100 Subject: [PATCH 1/3] Add a --warmup-file option to pass in a path --- whisper_online_server.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/whisper_online_server.py b/whisper_online_server.py index b2f5120..9a4cc0b 100644 --- a/whisper_online_server.py +++ b/whisper_online_server.py @@ -10,6 +10,8 @@ parser = argparse.ArgumentParser() parser.add_argument("--host", type=str, default='localhost') parser.add_argument("--port", type=int, default=43007) +parser.add_argument("--warmup-file", type=str, dest="warmup_file") + # options from whisper_online add_shared_args(parser) @@ -61,10 +63,9 @@ online = OnlineASRProcessor(asr,tokenizer,buffer_trimming=(args.buffer_trimming, -demo_audio_path = "cs-maji-2.16k.wav" -if os.path.exists(demo_audio_path): +if os.path.exists(args.warmup_file): # load the audio into the LRU cache before we start the timer - a = load_audio_chunk(demo_audio_path,0,1) + a = load_audio_chunk(args.warmup_file,0,1) # TODO: it should be tested whether it's meaningful # warm up the ASR, because the very first transcribe takes much more time than the other From fc4b3cd5188664e1ca64475594909b8820762448 Mon Sep 17 00:00:00 2001 From: Alex Young Date: Sun, 14 Apr 2024 19:38:41 +0100 Subject: [PATCH 2/3] Check whether we are passed a warmup file before trying to see if it exists --- whisper_online_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/whisper_online_server.py b/whisper_online_server.py index 9a4cc0b..fdd6a46 100644 --- a/whisper_online_server.py +++ b/whisper_online_server.py @@ -63,7 +63,7 @@ online = OnlineASRProcessor(asr,tokenizer,buffer_trimming=(args.buffer_trimming, -if os.path.exists(args.warmup_file): +if args.warmup_file and os.path.exists(args.warmup_file): # load the audio into the LRU cache before we start the timer a = load_audio_chunk(args.warmup_file,0,1) From e0f5d42b134988996f668ad2ac1b30fb6d5d6420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Mach=C3=A1=C4=8Dek?= Date: Wed, 17 Apr 2024 14:49:12 +0200 Subject: [PATCH 3/3] better documentation, help message and logging prints --- README.md | 2 +- whisper_online.py | 2 +- whisper_online_server.py | 27 +++++++++++++-------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 707e58d..e3a7a27 100644 --- a/README.md +++ b/README.md @@ -183,7 +183,7 @@ online.init() # refresh if you're going to re-use the object for the next audio ### Server -- real-time from mic -`whisper_online_server.py` has the same model options as `whisper_online.py`, plus `--host` and `--port` of the TCP connection. See help message (`-h` option). +`whisper_online_server.py` has the same model options as `whisper_online.py`, plus `--host` and `--port` of the TCP connection and the `--warmup-file`. See the help message (`-h` option). Client example: diff --git a/whisper_online.py b/whisper_online.py index a00547e..c872b23 100644 --- a/whisper_online.py +++ b/whisper_online.py @@ -625,7 +625,7 @@ if __name__ == "__main__": # load the audio into the LRU cache before we start the timer a = load_audio_chunk(audio_path,0,1) - # warm up the ASR, because the very first transcribe takes much more time than the other + # warm up the ASR because the very first transcribe takes much more time than the other asr.transcribe(a) beg = args.start_at diff --git a/whisper_online_server.py b/whisper_online_server.py index e7ad3f2..263ab75 100644 --- a/whisper_online_server.py +++ b/whisper_online_server.py @@ -10,8 +10,8 @@ parser = argparse.ArgumentParser() # server options parser.add_argument("--host", type=str, default='localhost') parser.add_argument("--port", type=int, default=43007) - -parser.add_argument("--warmup-file", type=str, dest="warmup_file") +parser.add_argument("--warmup-file", type=str, dest="warmup_file", + help="The path to a speech audio wav file to warm up Whisper so that the very first chunk processing is fast. It can be e.g. https://github.com/ggerganov/whisper.cpp/raw/master/samples/jfk.wav .") # options from whisper_online @@ -41,19 +41,18 @@ else: tokenizer = None online = OnlineASRProcessor(asr,tokenizer,buffer_trimming=(args.buffer_trimming, args.buffer_trimming_sec)) - - -if args.warmup_file and os.path.exists(args.warmup_file): - # load the audio into the LRU cache before we start the timer - a = load_audio_chunk(args.warmup_file,0,1) - - # TODO: it should be tested whether it's meaningful - # warm up the ASR, because the very first transcribe takes much more time than the other - asr.transcribe(a) +# warm up the ASR because the very first transcribe takes more time than the others. +# Test results in https://github.com/ufal/whisper_streaming/pull/81 +msg = "Whisper is not warmed up. The first chunk processing may take longer." +if args.warmup_file: + if os.path.isfile(args.warmup_file): + a = load_audio_chunk(args.warmup_file,0,1) + asr.transcribe(a) + print("INFO: Whisper is warmed up.",file=sys.stderr) + else: + print("WARNING: The warm up file is not available. "+msg,file=sys.stderr) else: - print("Whisper is not warmed up",file=sys.stderr) - - + print("WARNING: " + msg, file=sys.stderr) ######### Server objects