Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import magic | |
| import tempfile | |
| import os | |
| from langdetect import detect # or your own language detector | |
| from text import analyze_text # 从 text.py 导入 | |
| from video import analyze_video # 从 video.py 导入 | |
| from audio import analyze_audio # 从 audio.py 导入 | |
| def process_input(file, text, selected_lang): | |
| print("[DEBUG] 🟢 Analyze 按钮被点击") | |
| print(f"[DEBUG] file: {file}") | |
| print(f"[DEBUG] text: {text[:50]}") | |
| print(f"[DEBUG] lang: {selected_lang}") | |
| # 输入优先级: 文件 > 文本 | |
| if file: | |
| ext = os.path.splitext(file)[-1].lower() | |
| if ext in [".txt", ".pdf", ".docx"]: | |
| try: | |
| extracted_text, auto_lang = extract_text(file) | |
| lang = selected_lang if selected_lang != "auto" else auto_lang | |
| print(f"[DEBUG] 使用语言: {lang}") | |
| return analyze_text(extracted_text, lang) | |
| except Exception as e: | |
| return f"❌ File parsing failed: {str(e)}" | |
| elif ext in [".mp3", ".wav", ".m4a"]: | |
| lang = None if selected_lang == "auto" else selected_lang | |
| try: | |
| return analyze_audio(file, lang) | |
| except Exception as e: | |
| return f"❌ Audio analysis failed: {str(e)}" | |
| elif ext in [".mp4", ".mov"]: | |
| lang = None if selected_lang == "auto" else selected_lang | |
| try: | |
| return analyze_video(file, lang) | |
| except Exception as e: | |
| return f"❌ Video analysis failed: {str(e)}" | |
| else: | |
| return "❌ Unsupported file type" | |
| # 如果没有上传文件,但用户输入了文本 | |
| elif text and text.strip(): | |
| lang = selected_lang if selected_lang != "auto" else detect(text) | |
| print(f"[DEBUG] 使用语言: {lang}") | |
| try: | |
| return analyze_text(text, lang) | |
| except Exception as e: | |
| return f"🔥 Analysis error: {str(e)}" | |
| else: | |
| return "⚠️ Please upload a file or enter some text." | |
| # 构建交互界面 | |
| import gradio as gr | |
| from text import analyze_text, extract_text | |
| with gr.Blocks(theme=gr.themes.Default(spacing_size="sm")) as app: | |
| gr.Markdown(""" | |
| # 🌐 EthosAI - Media Integrity Toolkit | |
| *Empowering ethical journalism through AI-driven content analysis* | |
| """) | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| file_input = gr.File( | |
| label="📁 Upload File (Text / Video / Audio)", | |
| file_types=[".pdf", ".docx", ".txt", ".mp4", ".mov", ".wav", ".mp3", ".m4a"], | |
| type="filepath" # ✅ 返回路径字符串,而不是 NamedString/File 对象 | |
| ) | |
| lang_dropdown = gr.Dropdown( | |
| label="🌐 Language", | |
| choices=["auto", "en", "zh", "fr", "es", "ar", "ru"], | |
| value="auto" | |
| ) | |
| with gr.Column(scale=3): | |
| text_input = gr.Textbox( | |
| label="✍️ Or Input Text Directly", | |
| placeholder="Paste your content here...", | |
| lines=8 | |
| ) | |
| analyze_btn = gr.Button("🔍 Analyze Content", variant="primary") | |
| output = gr.Markdown() | |
| analyze_btn.click( | |
| fn=process_input, | |
| inputs=[file_input, text_input, lang_dropdown], # ✅ 必须包含 lang_dropdown | |
| outputs=output, | |
| api_name="analyze", | |
| show_progress="full" | |
| ) | |
| # 启动应用 | |
| app.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| debug=True | |
| ) |