import subprocess import sys try: import pptx except ImportError: subprocess.check_call([sys.executable, "-m", "pip", "install", "python-pptx"]) import pptx # Import the library after installing it try: import openai except ImportError: subprocess.check_call([sys.executable, "-m", "pip", "install", "openai"]) import openai # Import the library after installing it from pptx import Presentation import openai def translate_text(text, apikey): openai.api_key = apikey completion = openai.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "請把字串「"+text+"」翻譯成為英文,不需要有其他多餘的說明"}] ) return completion.choices[0].message.content def translate_pptx(file, key): prs = Presentation(file.name) for slide in prs.slides: for shape in slide.shapes: if shape.has_text_frame: for paragraph in shape.text_frame.paragraphs: original_text = ''.join(run.text for run in paragraph.runs) translated_text = translate_text(original_text, key) for run in paragraph.runs: run.text = translated_text # Save the modified presentation to a new file output_file_path = "translated_presentation.pptx" prs.save(output_file_path) return output_file_path def setup_gradio_interface(): with gr.Blocks() as demo: gr.Markdown("## PowerPoint Translator") gr.Markdown("Upload your PowerPoint presentation in Chinese, and download it translated into English.") with gr.Row(): file_input = gr.File(label="Upload PPTX file") api_key_input = gr.Textbox(label="Enter OpenAI API Key", placeholder="OpenAI API Key") submit_button = gr.Button("Translate") file_output = gr.File(label="Download Translated Presentation") def translate_and_download(file): if file is not None: output_path = translate_pptx(file, key) return output_path submit_button.click( translate_and_download, inputs=[file_input, api_key_input], outputs=file_output ) return demo # First, try importing gradio. If it fails, attempt to install it. try: import gradio as gr except ImportError: import sys import gradio as gr # Run the interface if __name__ == "__main__": demo = setup_gradio_interface() demo.launch()