From 81c57ae40c6b2f63b18c6ad3ee5d448208752296 Mon Sep 17 00:00:00 2001 From: makaveli10 Date: Tue, 5 Nov 2024 18:11:32 +0530 Subject: [PATCH] Send completed bool with each segment Completed bool represents if the segment is completely processed by the server Signed-off-by: makaveli10 --- whisper_live/client.py | 6 +++--- whisper_live/server.py | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/whisper_live/client.py b/whisper_live/client.py index 4cfb63c..15b6306 100644 --- a/whisper_live/client.py +++ b/whisper_live/client.py @@ -112,9 +112,9 @@ class Client: for i, seg in enumerate(segments): if not text or text[-1] != seg["text"]: text.append(seg["text"]) - if i == len(segments) - 1: + if i == len(segments) - 1 and not seg["completed"]: self.last_segment = seg - elif (self.server_backend == "faster_whisper" and + elif (self.server_backend == "faster_whisper" and seg["completed"] and (not self.transcript or float(seg['start']) >= float(self.transcript[-1]['end']))): self.transcript.append(seg) @@ -259,7 +259,7 @@ class Client: """ if self.server_backend == "faster_whisper": - if (self.last_segment): + if (self.last_segment) and self.transcript[-1]["text"] != self.last_segment["text"]: self.transcript.append(self.last_segment) utils.create_srt_file(self.transcript, output_path) diff --git a/whisper_live/server.py b/whisper_live/server.py index 575a2cf..b68df5a 100644 --- a/whisper_live/server.py +++ b/whisper_live/server.py @@ -1001,7 +1001,7 @@ class ServeClientFasterWhisper(ServeClientBase): logging.error(f"[ERROR]: Failed to transcribe audio chunk: {e}") time.sleep(0.01) - def format_segment(self, start, end, text): + def format_segment(self, start, end, text, completed=False): """ Formats a transcription segment with precise start and end times alongside the transcribed text. @@ -1018,7 +1018,8 @@ class ServeClientFasterWhisper(ServeClientBase): return { 'start': "{:.3f}".format(start), 'end': "{:.3f}".format(end), - 'text': text + 'text': text, + 'completed': completed } def update_segments(self, segments, duration): @@ -1058,7 +1059,7 @@ class ServeClientFasterWhisper(ServeClientBase): if s.no_speech_prob > self.no_speech_thresh: continue - self.transcript.append(self.format_segment(start, end, text_)) + self.transcript.append(self.format_segment(start, end, text_, completed=True)) offset = min(duration, s.end) # only process the segments if it satisfies the no_speech_thresh @@ -1067,7 +1068,8 @@ class ServeClientFasterWhisper(ServeClientBase): last_segment = self.format_segment( self.timestamp_offset + segments[-1].start, self.timestamp_offset + min(duration, segments[-1].end), - self.current_out + self.current_out, + completed=False ) # if same incomplete segment is seen multiple times then update the offset @@ -1083,7 +1085,8 @@ class ServeClientFasterWhisper(ServeClientBase): self.transcript.append(self.format_segment( self.timestamp_offset, self.timestamp_offset + duration, - self.current_out + self.current_out, + completed=True )) self.current_out = '' offset = duration