Как мне получить эту панель прогресса, чтобы отображать только в разделе файла SRT, а не в разделе предупреждений?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как мне получить эту панель прогресса, чтобы отображать только в разделе файла SRT, а не в разделе предупреждений?

Сообщение Anonymous »

Я делаю небольшой побочный проект, работая через курс агента Huggingface (и, возможно, это будет мой последний проект, который я сдаю, если он приемлема). Я не очень знаком с Грейо, но они, кажется, предпочитают это там, поэтому я решил использовать его. Но у меня есть небольшая проблема: строка прогресса предназначена для замены содержимого разделения переведенного файла SRT, но не раздел предупреждений (это будет живым журналом). Но на практике то, что происходит, они оба перезаписываются. Я попробовал около полудюжины разных вещей, основанных на вводе искусственного интеллекта, но ни один из них не работает. Я думаю, что это связано с тем, что функция дает оба раздела, но оба нуждаются в обновлении, поэтому я не уверен, как это сделать правильно. < /P>
def translate_srt_file(srt_file, target_language, style_guideline, technical_guideline, progress=gr.Progress()):
temp_dir = None
try:
temp_dir = os.path.join(get_persistent_temp_dir(), f"tmp{os.urandom(4).hex()}")
os.makedirs(temp_dir, exist_ok=True)

input_path = Path(temp_dir) / "input.srt"
output_path = Path(temp_dir) / "output.srt"

with open(input_path, "wb") as f:
f.write(srt_file)

translator = create_translator(
target_language=target_language,
style_guideline=style_guideline,
technical_guideline=technical_guideline
)
entries = translator.parse_srt(input_path)
total_entries = len(entries)

warning_message = "Starting translation...\n"
progress_desc = "Initializing..."
yield None, warning_message, gr.update(value=progress_desc)

for i, entry in enumerate(entries, 1):
progress_desc = f"Translating: {i}/{total_entries} entries ({int((i/total_entries)*100)}%)"
progress(i / total_entries)
current_warning_update = None

try:
context = (
2, # Context window size
[
entries[max(0, i-1)]['text'],
entries[min(total_entries-1, i+1)]['text']
]
)

entry['translation'] = translator.translation_tool(entry['text'], context=context)
is_valid, feedback = translator.validation_tool(entry['text'], entry['translation'], context=context)

if not is_valid:
warning = {
'entry': entry['number'],
'type': 'validation',
'message': feedback,
'original': entry['text'],
'translation': entry['translation']
}
formatted = format_warning(warning)
warning_message += formatted
current_warning_update = warning_message

except Exception as e:
error = {
'entry': entry['number'],
'type': 'error',
'message': str(e),
'original': entry['text'],
'translation': None
}
formatted = format_warning(error)
warning_message += formatted
entry['translation'] = f"[ERROR] {entry['text']}"
current_warning_update = warning_message

yield None, current_warning_update if current_warning_update else gr.update(), progress_desc

with open(output_path, 'w', encoding='utf-8') as f:
for entry in entries:
f.write(f"{entry['number']}\n")
f.write(f"{entry['timecode']}\n")
f.write(f"{entry.get('translation', entry['text'])}\n\n")

# Final output with caching consideration
warning_message += "\n\n✅ Translation complete!"
progress_desc = "Translation complete!"

if os.getenv("GRADIO_CACHING_EXAMPLES"):
# For caching, keep files around and let Gradio handle them
yield str(output_path), warning_message, progress_desc
time.sleep(2) # Give Gradio time to cache
else:
# For normal operation, yield and cleanup
yield str(output_path), warning_message, progress_desc

except Exception as e:
raise gr.Error(f"Translation failed: {str(e)}")
finally:
if not os.getenv("GRADIO_CACHING_EXAMPLES") and temp_dir and os.path.exists(temp_dir):
try:
import shutil
shutil.rmtree(temp_dir)
logger.info(f"Cleaned up temporary directory: {temp_dir}")
except Exception as cleanup_error:
logger.error(f"Failed to cleanup {temp_dir}: {cleanup_error}")

# Gradio interface
with gr.Blocks(title="SRT File Translator") as demo:
gr.Markdown("""
# SRT File Translator
Upload an SRT subtitle file and customize your translation.
""")

with gr.Row():
# --- Input Column ---
with gr.Column():
file_input = gr.File(label="Upload SRT File", type="binary")
language_dropdown = gr.Dropdown(
label="Target Language",
choices=["en", "es", "fr", "de", "it", "pt", "ru", "zh", "ja", "ko"],
value="es"
)
style_guideline = gr.Textbox(
label="Style Guideline",
value="Natural speech patterns",
placeholder="E.g., Conversational, Formal, Casual"
)
technical_guideline = gr.Textbox(
label="Technical Guideline",
value="Use standard terminology",
placeholder="E.g., Use industry-specific terms, Localize technical language"
)
submit_btn = gr.Button("Translate", variant="primary")

# --- Output Column ---
with gr.Column():
file_output = gr.File(label="Translated SRT File")
warnings_output = gr.Textbox(label="Translation Warnings", interactive=False)

# *** Click handler outputs ***
submit_btn.click(
fn=translate_srt_file,
inputs=[file_input, language_dropdown, style_guideline, technical_guideline],
outputs=[file_output, warnings_output],
)

# *** Examples outputs ***
gr.Examples(
examples=[
["example.srt", "es", "Natural speech patterns", "Use standard terminology"],
["example.srt", "fr", "Formal and elegant", "Precise technical translations"],
],
inputs=[file_input, language_dropdown, style_guideline, technical_guideline],
outputs=[file_output, warnings_output],
fn=translate_srt_file,
cache_examples=True,
)

if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)


Подробнее здесь: https://stackoverflow.com/questions/795 ... -not-the-w
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»