fixed stt transcription bug+added weights
This commit is contained in:
+30
-22
@@ -160,6 +160,7 @@ class BatchedTranscriptionEncoderNode:
|
|||||||
"prefix": ("STRING", {"default": "masterpiece, best quality", "multiline": True, "forceInput": True}),
|
"prefix": ("STRING", {"default": "masterpiece, best quality", "multiline": True, "forceInput": True}),
|
||||||
"suffix": ("STRING", {"default": "", "multiline": True, "forceInput": True}),
|
"suffix": ("STRING", {"default": "", "multiline": True, "forceInput": True}),
|
||||||
"print_output": ('BOOLEAN', {'default': True}),
|
"print_output": ('BOOLEAN', {'default': True}),
|
||||||
|
"weights": ("FLOAT",{"default": 1.})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,12 +173,13 @@ class BatchedTranscriptionEncoderNode:
|
|||||||
CATEGORY = CATEGORY
|
CATEGORY = CATEGORY
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def process_text_chunks(ichunk,frame_interpolation,clip,*,use_tags,**kwargs):
|
def process_text_chunks(ichunk,frame_interpolation,clip,*,use_tags,weights,**kwargs):
|
||||||
i,chunk=ichunk
|
i,chunk=ichunk
|
||||||
frame_interpolation=int(frame_interpolation)
|
frame_interpolation=int(frame_interpolation)
|
||||||
index = i*frame_interpolation if frame_interpolation!=0 else i
|
index = i*frame_interpolation if frame_interpolation!=0 else i
|
||||||
text_processor = extract_keywords if use_tags else limit_sentence
|
text_processor = extract_keywords if use_tags else limit_sentence
|
||||||
text = text_processor(chunk["text"],**kwargs)
|
text = chunk["text"] if weights==1 else f"({chunk['text']}:{weights})"
|
||||||
|
text = text_processor(text,**kwargs)
|
||||||
timestamp = np.nan_to_num(np.array(chunk["timestamp"],dtype=float),nan=i)
|
timestamp = np.nan_to_num(np.array(chunk["timestamp"],dtype=float),nan=i)
|
||||||
duration = max(abs(int(np.round(timestamp[1]-timestamp[0]))),1) # at least 1 sec duration
|
duration = max(abs(int(np.round(timestamp[1]-timestamp[0]))),1) # at least 1 sec duration
|
||||||
if frame_interpolation>1: duration*=frame_interpolation
|
if frame_interpolation>1: duration*=frame_interpolation
|
||||||
@@ -210,36 +212,40 @@ class BatchedTranscriptionEncoderNode:
|
|||||||
|
|
||||||
def get_prompt(
|
def get_prompt(
|
||||||
self, transcription, clip, language="en", loop=False, use_tags=False, use_sentiment=False,
|
self, transcription, clip, language="en", loop=False, use_tags=False, use_sentiment=False,
|
||||||
max_words=16,max_chunks=None, frame_interpolation=0, print_output=True, prefix="", suffix=""
|
max_words=16,max_chunks=None, frame_interpolation=0, print_output=True, prefix="", suffix="", weights=1.
|
||||||
):
|
):
|
||||||
|
|
||||||
if not max_chunks: max_chunks = len(transcription['chunks'])
|
if not max_chunks: max_chunks = len(transcription['chunks'])
|
||||||
total_chunks = transcription['chunks'][:max_chunks]
|
total_chunks = transcription['chunks'][:max_chunks]
|
||||||
num_frames = max(max_chunks, *filter(None,np.array([chunk["timestamp"] for chunk in transcription['chunks']]).flatten()))
|
max_frames = max(max_chunks, *filter(None,np.array([chunk["timestamp"] for chunk in transcription['chunks']]).flatten()))
|
||||||
|
|
||||||
if loop: # append first frame to chunk stack
|
|
||||||
last_chunk = None
|
last_chunk = None
|
||||||
for i in range(len(total_chunks)):
|
for i in range(len(total_chunks)):
|
||||||
last_chunk = total_chunks[-1-i]
|
last_chunk = total_chunks[-1-i]
|
||||||
|
|
||||||
if "timestamp" in last_chunk and len(last_chunk["timestamp"])>=1:
|
if "timestamp" in last_chunk and len(last_chunk["timestamp"])>=1:
|
||||||
last_chunk["timestamp"] = np.nan_to_num(np.array(last_chunk["timestamp"],dtype=float),nan=num_frames)
|
last_chunk["timestamp"] = np.nan_to_num(np.array(last_chunk["timestamp"],dtype=float),nan=max_frames)
|
||||||
break
|
break
|
||||||
|
|
||||||
if last_chunk is not None:
|
if last_chunk is not None:
|
||||||
timestamp = last_chunk["timestamp"]
|
timestamp = last_chunk["timestamp"]
|
||||||
if len(timestamp)==1:
|
if len(timestamp)==1:
|
||||||
start_time = timestamp[0]
|
start_time = timestamp[0]
|
||||||
end_time = start_time + abs(num_frames - start_time)+1
|
else:
|
||||||
else:
|
start_time = timestamp[-1 if loop else 0]
|
||||||
start_time = timestamp[-1]
|
end_time = start_time + max(max_frames - start_time,0)+1
|
||||||
end_time = start_time+1
|
timestamp = (start_time,end_time)
|
||||||
|
if loop: # append first frame to chunk stack
|
||||||
total_chunks.append({
|
total_chunks.append({
|
||||||
"text": total_chunks[0]["text"],
|
"text": total_chunks[0]["text"],
|
||||||
"timestamp": (start_time,end_time)
|
"timestamp": timestamp
|
||||||
})
|
})
|
||||||
else: # adds 1s frame to prevent audio from stopping early
|
else: # replace final frame
|
||||||
num_frames+=1
|
total_chunks[-1] = {
|
||||||
|
"text": total_chunks[-1]["text"],
|
||||||
|
"timestamp": timestamp
|
||||||
|
}
|
||||||
|
|
||||||
spacy_model = self.get_spacy_model(language)
|
spacy_model = self.get_spacy_model(language)
|
||||||
|
|
||||||
@@ -252,6 +258,7 @@ class BatchedTranscriptionEncoderNode:
|
|||||||
for ichunk in enumerate(total_chunks):
|
for ichunk in enumerate(total_chunks):
|
||||||
t, d, c, pc = self.process_text_chunks(ichunk,frame_interpolation,clip,
|
t, d, c, pc = self.process_text_chunks(ichunk,frame_interpolation,clip,
|
||||||
use_tags=use_tags,
|
use_tags=use_tags,
|
||||||
|
weights=weights,
|
||||||
use_sentiment=use_sentiment,
|
use_sentiment=use_sentiment,
|
||||||
prefix=prefix,
|
prefix=prefix,
|
||||||
suffix=suffix,
|
suffix=suffix,
|
||||||
@@ -263,6 +270,7 @@ class BatchedTranscriptionEncoderNode:
|
|||||||
pooled.append(pc.squeeze())
|
pooled.append(pc.squeeze())
|
||||||
|
|
||||||
num_chunks = len(total_chunks)
|
num_chunks = len(total_chunks)
|
||||||
|
num_frames = int(np.sum(duration_list))
|
||||||
final_pooled_output = torch.nested.to_padded_tensor(torch.nested.nested_tensor(pooled, dtype=torch.float32),0)
|
final_pooled_output = torch.nested.to_padded_tensor(torch.nested.nested_tensor(pooled, dtype=torch.float32),0)
|
||||||
final_conditioning = torch.nested.to_padded_tensor(torch.nested.nested_tensor(cond, dtype=torch.float32),0)
|
final_conditioning = torch.nested.to_padded_tensor(torch.nested.nested_tensor(cond, dtype=torch.float32),0)
|
||||||
print(f"{final_conditioning.shape=} {final_pooled_output.shape=}")
|
print(f"{final_conditioning.shape=} {final_pooled_output.shape=}")
|
||||||
|
|||||||
Reference in New Issue
Block a user