Merge pull request #359 from makaveli10/remove_blank_segment

Remove blank segment feature
This commit is contained in:
makaveli
2025-04-22 17:59:10 +05:30
committed by GitHub
4 changed files with 3 additions and 73 deletions
+2 -37
View File
@@ -20,19 +20,13 @@ class ServeClientBase(object):
self.text = [] self.text = []
self.current_out = '' self.current_out = ''
self.prev_out = '' self.prev_out = ''
self.t_start = None
self.exit = False self.exit = False
self.same_output_count = 0 self.same_output_count = 0
self.show_prev_out_thresh = 5 # if pause(no output from whisper) show previous output for 5 seconds
self.add_pause_thresh = 3 # add a blank to segment list as a pause(no speech) for 3 seconds
self.transcript = [] self.transcript = []
self.send_last_n_segments = 10 self.send_last_n_segments = 10
self.no_speech_thresh = 0.45 self.no_speech_thresh = 0.45
self.clip_audio = False self.clip_audio = False
# text formatting
self.pick_previous_segments = 2
# threading # threading
self.lock = threading.Lock() self.lock = threading.Lock()
@@ -45,9 +39,7 @@ class ServeClientBase(object):
If the client's language is not detected, it waits for 30 seconds of audio input to make a language prediction. If the client's language is not detected, it waits for 30 seconds of audio input to make a language prediction.
It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments
are sent to the client in real-time, and a history of segments is maintained to provide context.Pauses in speech are sent to the client in real-time, and a history of segments is maintained to provide context.
(no output from Whisper) are handled by showing the previous output for a set duration. A blank segment is added if
there is no speech for a specified duration to indicate a pause.
Raises: Raises:
Exception: If there is an issue with audio processing or WebSocket communication. Exception: If there is an issue with audio processing or WebSocket communication.
@@ -85,7 +77,7 @@ class ServeClientBase(object):
def transcribe_audio(self): def transcribe_audio(self):
raise NotImplementedError raise NotImplementedError
def handle_transcription_output(self): def handle_transcription_output(self, result, duration):
raise NotImplementedError raise NotImplementedError
def format_segment(self, start, end, text, completed=False): def format_segment(self, start, end, text, completed=False):
@@ -228,33 +220,6 @@ class ServeClientBase(object):
except Exception as e: except Exception as e:
logging.error(f"[ERROR]: Sending data to client: {e}") logging.error(f"[ERROR]: Sending data to client: {e}")
def get_previous_output(self):
"""
Retrieves previously generated transcription outputs if no new transcription is available
from the current audio chunks.
Checks the time since the last transcription output and, if it is within a specified
threshold, returns the most recent segments of transcribed text. It also manages
adding a pause (blank segment) to indicate a significant gap in speech based on a defined
threshold.
Returns:
segments (list): A list of transcription segments. This may include the most recent
transcribed text segments or a blank segment to indicate a pause
in speech.
"""
segments = []
if self.t_start is None:
self.t_start = time.time()
if time.time() - self.t_start < self.show_prev_out_thresh:
segments = self.prepare_segments()
# add a blank if there is no speech for 3 seconds
if len(self.text) and self.text[-1] != '':
if time.time() - self.t_start > self.add_pause_thresh:
self.text.append('')
return segments
def disconnect(self): def disconnect(self):
""" """
Notify the client of disconnection and send a disconnect message. Notify the client of disconnection and send a disconnect message.
@@ -175,33 +175,6 @@ class ServeClientFasterWhisper(ServeClientBase):
self.set_language(info) self.set_language(info)
return result return result
def get_previous_output(self):
"""
Retrieves previously generated transcription outputs if no new transcription is available
from the current audio chunks.
Checks the time since the last transcription output and, if it is within a specified
threshold, returns the most recent segments of transcribed text. It also manages
adding a pause (blank segment) to indicate a significant gap in speech based on a defined
threshold.
Returns:
segments (list): A list of transcription segments. This may include the most recent
transcribed text segments or a blank segment to indicate a pause
in speech.
"""
segments = []
if self.t_start is None:
self.t_start = time.time()
if time.time() - self.t_start < self.show_prev_out_thresh:
segments = self.prepare_segments()
# add a blank if there is no speech for 3 seconds
if len(self.text) and self.text[-1] != '':
if time.time() - self.t_start > self.add_pause_thresh:
self.text.append('')
return segments
def handle_transcription_output(self, result, duration): def handle_transcription_output(self, result, duration):
""" """
Handle the transcription output, updating the transcript and sending data to the client. Handle the transcription output, updating the transcript and sending data to the client.
@@ -215,9 +188,6 @@ class ServeClientFasterWhisper(ServeClientBase):
self.t_start = None self.t_start = None
last_segment = self.update_segments(result, duration) last_segment = self.update_segments(result, duration)
segments = self.prepare_segments(last_segment) segments = self.prepare_segments(last_segment)
else:
# show previous output if there is pause i.e. no output from whisper
segments = self.get_previous_output()
if len(segments): if len(segments):
self.send_transcription_to_client(segments) self.send_transcription_to_client(segments)
-3
View File
@@ -118,9 +118,6 @@ class ServeClientOpenVINO(ServeClientBase):
self.t_start = None self.t_start = None
last_segment = self.update_segments(result, duration) last_segment = self.update_segments(result, duration)
segments = self.prepare_segments(last_segment) segments = self.prepare_segments(last_segment)
else:
# show previous output if there is pause i.e. no output from whisper
segments = self.get_previous_output()
if len(segments): if len(segments):
self.send_transcription_to_client(segments) self.send_transcription_to_client(segments)
+1 -3
View File
@@ -149,9 +149,7 @@ class ServeClientTensorRT(ServeClientBase):
If the client's language is not detected, it waits for 30 seconds of audio input to make a language prediction. If the client's language is not detected, it waits for 30 seconds of audio input to make a language prediction.
It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments
are sent to the client in real-time, and a history of segments is maintained to provide context.Pauses in speech are sent to the client in real-time, and a history of segments is maintained to provide context.
(no output from Whisper) are handled by showing the previous output for a set duration. A blank segment is added if
there is no speech for a specified duration to indicate a pause.
Raises: Raises:
Exception: If there is an issue with audio processing or WebSocket communication. Exception: If there is an issue with audio processing or WebSocket communication.