add multiple audiofiles input and glue it
This commit is contained in:
7
app.py
7
app.py
@@ -11,8 +11,9 @@ from handlers.gradioHandler import GradioHandlers
|
|||||||
from handlers.fileHandlers import FileHandlers
|
from handlers.fileHandlers import FileHandlers
|
||||||
from services.fasterWhisper import FasterWhisper
|
from services.fasterWhisper import FasterWhisper
|
||||||
from handlers.convertMdToPdf import ConvertMdToPdf
|
from handlers.convertMdToPdf import ConvertMdToPdf
|
||||||
|
from handlers.glueAudio import GlueAudio
|
||||||
|
|
||||||
gh = GradioHandlers(gr, Llm, ConvertMdToPdf, FileHandlers, FasterWhisper)
|
gh = GradioHandlers(gr, Llm, ConvertMdToPdf, FileHandlers, FasterWhisper, GlueAudio)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
with gr.Blocks() as demo:
|
with gr.Blocks() as demo:
|
||||||
@@ -32,7 +33,7 @@ def main():
|
|||||||
with gr.Row():
|
with gr.Row():
|
||||||
with gr.Accordion(label='Recognization and integration'):
|
with gr.Accordion(label='Recognization and integration'):
|
||||||
with gr.Column():
|
with gr.Column():
|
||||||
audioFile = gr.Audio(label='Load audio for transcribe', type="filepath")
|
audioFiles = gr.Files(label='Load audio for transcribe', type="filepath", file_types=['audio'])
|
||||||
images = gr.Files(label='Upload images', file_types=['image'])
|
images = gr.Files(label='Upload images', file_types=['image'])
|
||||||
recognizeBtn = gr.Button('recognize and integrate', variant='primary')
|
recognizeBtn = gr.Button('recognize and integrate', variant='primary')
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ def main():
|
|||||||
saveFileCheckbox.change(gh.updateTextbox, inputs=saveFileCheckbox, outputs=filename)
|
saveFileCheckbox.change(gh.updateTextbox, inputs=saveFileCheckbox, outputs=filename)
|
||||||
saveFileCheckbox.change(gh.updateTextbox, inputs=saveFileCheckbox, outputs=filenamePdf)
|
saveFileCheckbox.change(gh.updateTextbox, inputs=saveFileCheckbox, outputs=filenamePdf)
|
||||||
|
|
||||||
recognizeBtn.click(gh.FasterWhisper.recognize, outputs=[recognizedText], inputs=[fastWhisperModel, device, compute_type, audioFile, beamSize, vadFilter, minSilenceDurationMs, speechPadMs, temp0, temp1, temp2, wordTimestamps, noSpeechThreshold, conditionOnPreviousText])
|
recognizeBtn.click(gh.handleRecognizeBtn, outputs=[recognizedText], inputs=[audioFiles, fastWhisperModel, device, compute_type, beamSize, vadFilter, minSilenceDurationMs, speechPadMs, temp0, temp1, temp2, wordTimestamps, noSpeechThreshold, conditionOnPreviousText, gr.State(GLUED_AUDIO_FILENAME), gr.State(OUTPUT_PATH)])
|
||||||
|
|
||||||
# Если пайплайн включен то тогда делаем автоматически
|
# Если пайплайн включен то тогда делаем автоматически
|
||||||
# автоматический пайплайн
|
# автоматический пайплайн
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ DEFAULT_API_KEY=os.getenv('API_KEY')
|
|||||||
# Задаем выходную директорию
|
# Задаем выходную директорию
|
||||||
OUTPUT_PATH='outputs'
|
OUTPUT_PATH='outputs'
|
||||||
|
|
||||||
|
GLUED_AUDIO_FILENAME='glued.mp3'
|
||||||
|
|
||||||
DEFAULT_SYSTEM_PROMPT='''You are a diligent university student who has recorded a lecture as an audio file and later transcribed it into raw text.
|
DEFAULT_SYSTEM_PROMPT='''You are a diligent university student who has recorded a lecture as an audio file and later transcribed it into raw text.
|
||||||
Your task is to rewrite this unstructured transcript into a clear, logically organized, and detailed lecture summary (lecture notes).
|
Your task is to rewrite this unstructured transcript into a clear, logically organized, and detailed lecture summary (lecture notes).
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from markdown_pdf import MarkdownPdf # Для аннотации типов
|
|
||||||
|
# Для аннотации типов
|
||||||
|
from markdown_pdf import MarkdownPdf
|
||||||
|
from pydub import AudioSegment
|
||||||
|
|
||||||
class FileHandlers:
|
class FileHandlers:
|
||||||
# Функция сохранения файла
|
# Функция сохранения файла
|
||||||
def saveFile(self, filename, content, output_path):
|
def saveFile(self, filename, content, output_path, format='mp3'):
|
||||||
'''
|
'''
|
||||||
Сохраняет текст или pdf из markdown_pdf в файл с указанным названием и директорией.
|
Сохраняет текст, pdf из markdown_pdf или склеенный аудиофайл в файл с указанным названием и директорией.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
:param filename: название файла;
|
:param filename: название файла;
|
||||||
@@ -16,8 +19,13 @@ class FileHandlers:
|
|||||||
directory = Path(output_path)
|
directory = Path(output_path)
|
||||||
filePath = directory / filename # Добавление пути директории
|
filePath = directory / filename # Добавление пути директории
|
||||||
filePath.parent.mkdir(parents=True, exist_ok=True) # Создание директории если не существует
|
filePath.parent.mkdir(parents=True, exist_ok=True) # Создание директории если не существует
|
||||||
|
|
||||||
# Сохранение для разных типов
|
# Сохранение для разных типов
|
||||||
if type(content) == MarkdownPdf:
|
if type(content) == MarkdownPdf:
|
||||||
content.save(filePath)
|
return content.save(filePath)
|
||||||
|
|
||||||
elif type(content) == str:
|
elif type(content) == str:
|
||||||
filePath.write_text(content, encoding='utf-8')
|
return filePath.write_text(content, encoding='utf-8')
|
||||||
|
|
||||||
|
elif type(content) == AudioSegment:
|
||||||
|
return content.export(filePath, format=format)
|
||||||
|
|||||||
11
handlers/glueAudio.py
Normal file
11
handlers/glueAudio.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
from pydub import AudioSegment
|
||||||
|
|
||||||
|
class GlueAudio():
|
||||||
|
def glue(self, audioFiles):
|
||||||
|
glued = AudioSegment.empty()
|
||||||
|
|
||||||
|
for audioFile in audioFiles:
|
||||||
|
audio = AudioSegment.from_file(audioFile)
|
||||||
|
glued += audio
|
||||||
|
|
||||||
|
return glued
|
||||||
@@ -1,12 +1,19 @@
|
|||||||
class GradioHandlers:
|
class GradioHandlers:
|
||||||
def __init__(self, gr, Llm, ConvertMdToPdf, FileHandlers, FasterWhisper):
|
def __init__(self, gr, Llm, ConvertMdToPdf, FileHandlers, FasterWhisper, GlueAudio):
|
||||||
# Объект для работы с файлами
|
# Объект для работы с файлами
|
||||||
self.fh = FileHandlers()
|
self.fh = FileHandlers()
|
||||||
|
self.ga = GlueAudio()
|
||||||
self.ConvertMdToPdf = ConvertMdToPdf()
|
self.ConvertMdToPdf = ConvertMdToPdf()
|
||||||
self.FasterWhisper = FasterWhisper()
|
self.FasterWhisper = FasterWhisper()
|
||||||
self.Llm = Llm
|
self.Llm = Llm
|
||||||
self.gr = gr
|
self.gr = gr
|
||||||
|
|
||||||
|
def handleRecognizeBtn(self, audioFiles, model, device, compute_type, beamSize, vadFilter, minSilenceDurationMs, speechPadMs, temp0, temp1, temp2, wordTimestamps, noSpeechThreshold, conditionOnPreviousText, filename, outPath):
|
||||||
|
audioFile = self.ga.glue(audioFiles)
|
||||||
|
file = self.fh.saveFile(filename, audioFile, outPath)
|
||||||
|
|
||||||
|
return self.FasterWhisper.recognize(model, device, compute_type, file, beamSize, vadFilter, minSilenceDurationMs, speechPadMs, temp0, temp1, temp2, wordTimestamps, noSpeechThreshold, conditionOnPreviousText)
|
||||||
|
|
||||||
# Функция улучшения текста
|
# Функция улучшения текста
|
||||||
def generateByCondition(self, api_key, llm_model, system_prompt, recognized_text, llm_temperature, is_pipeline_enabled, trigger, isSaveFile, filename, filenamePdf, output_path):
|
def generateByCondition(self, api_key, llm_model, system_prompt, recognized_text, llm_temperature, is_pipeline_enabled, trigger, isSaveFile, filename, filenamePdf, output_path):
|
||||||
llm = self.Llm(api_key)
|
llm = self.Llm(api_key)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class FasterWhisper:
|
|||||||
for seg in segments:
|
for seg in segments:
|
||||||
text += f"[{self.format_timestamp(seg.start)} -> {self.format_timestamp(seg.end)}] {seg.text}" + '\n'
|
text += f"[{self.format_timestamp(seg.start)} -> {self.format_timestamp(seg.end)}] {seg.text}" + '\n'
|
||||||
|
|
||||||
return(text)
|
return text
|
||||||
|
|
||||||
def format_timestamp(self, seconds: float) -> str:
|
def format_timestamp(self, seconds: float) -> str:
|
||||||
millis = int(seconds * 1000)
|
millis = int(seconds * 1000)
|
||||||
|
|||||||
Reference in New Issue
Block a user