Tijs Zwinkels
commited on
Commit
·
3696fef
1
Parent(s):
531418a
Use OpenAI api word-level timestamps
Browse files- whisper_online.py +10 -26
whisper_online.py
CHANGED
@@ -176,30 +176,14 @@ class OpenaiApiASR(ASRBase):
|
|
176 |
|
177 |
def ts_words(self, segments):
|
178 |
o = []
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
# Splitting the text into words and filtering out empty strings
|
186 |
-
words = [word.strip() for word in segment["text"].split() if word.strip()]
|
187 |
-
|
188 |
-
if not words:
|
189 |
-
continue
|
190 |
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
segment_duration = segment["end"] - segment["start"]
|
196 |
-
total_characters = sum(len(word) for word in words)
|
197 |
-
duration_per_character = segment_duration / total_characters
|
198 |
-
start_time = segment["start"]
|
199 |
-
for word in words:
|
200 |
-
end_time = start_time + duration_per_character * len(word)
|
201 |
-
o.append((start_time, end_time, word))
|
202 |
-
start_time = end_time
|
203 |
|
204 |
return o
|
205 |
|
@@ -220,7 +204,8 @@ class OpenaiApiASR(ASRBase):
|
|
220 |
"model": self.modelname,
|
221 |
"file": buffer,
|
222 |
"response_format": self.response_format,
|
223 |
-
"temperature": self.temperature
|
|
|
224 |
}
|
225 |
if self.task != "translate" and self.language:
|
226 |
params["language"] = self.language
|
@@ -233,11 +218,10 @@ class OpenaiApiASR(ASRBase):
|
|
233 |
proc = self.client.audio.transcriptions
|
234 |
|
235 |
# Process transcription/translation
|
236 |
-
|
237 |
transcript = proc.create(**params)
|
238 |
print(f"OpenAI API processed accumulated {self.transcribed_seconds} seconds",file=self.logfile)
|
239 |
|
240 |
-
return transcript.
|
241 |
|
242 |
def use_vad(self):
|
243 |
self.use_vad = True
|
|
|
176 |
|
177 |
def ts_words(self, segments):
|
178 |
o = []
|
179 |
+
# If VAD on, skip segments containing no speech.
|
180 |
+
# TODO: threshold can be set from outside
|
181 |
+
# TODO: Make VAD work again with word-level timestamps
|
182 |
+
#if self.use_vad and segment["no_speech_prob"] > 0.8:
|
183 |
+
# continue
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
+
for word in segments:
|
186 |
+
o.append((word.get("start"), word.get("end"), word.get("word")))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
|
188 |
return o
|
189 |
|
|
|
204 |
"model": self.modelname,
|
205 |
"file": buffer,
|
206 |
"response_format": self.response_format,
|
207 |
+
"temperature": self.temperature,
|
208 |
+
"timestamp_granularities": ["word"]
|
209 |
}
|
210 |
if self.task != "translate" and self.language:
|
211 |
params["language"] = self.language
|
|
|
218 |
proc = self.client.audio.transcriptions
|
219 |
|
220 |
# Process transcription/translation
|
|
|
221 |
transcript = proc.create(**params)
|
222 |
print(f"OpenAI API processed accumulated {self.transcribed_seconds} seconds",file=self.logfile)
|
223 |
|
224 |
+
return transcript.words
|
225 |
|
226 |
def use_vad(self):
|
227 |
self.use_vad = True
|