Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| import os | |
| from PIL import Image | |
| import tempfile | |
| import subprocess | |
| import sys | |
| # 安装MonkeyOCR | |
| def install_monkeyocr(): | |
| """安装MonkeyOCR依赖""" | |
| try: | |
| subprocess.check_call([ | |
| sys.executable, "-m", "pip", "install", | |
| "git+https://github.com/Yuliang-Liu/MonkeyOCR.git" | |
| ]) | |
| return True | |
| except: | |
| return False | |
| # 在启动时安装 | |
| if not install_monkeyocr(): | |
| print("Failed to install MonkeyOCR") | |
| try: | |
| from monkeyocr import MonkeyOCR | |
| except ImportError: | |
| print("MonkeyOCR not available, using placeholder") | |
| class MonkeyOCRDemo: | |
| def __init__(self): | |
| self.model = None | |
| self.load_model() | |
| def load_model(self): | |
| """加载MonkeyOCR模型""" | |
| try: | |
| # 这里需要根据实际的MonkeyOCR API调整 | |
| self.model = MonkeyOCR.from_pretrained("echo840/MonkeyOCR") | |
| print("MonkeyOCR模型加载成功") | |
| except Exception as e: | |
| print(f"模型加载失败: {e}") | |
| self.model = None | |
| def parse_document(self, file_input, prompt="解析这个文档"): | |
| """解析文档""" | |
| if self.model is None: | |
| return "模型未加载,请稍后再试", "模型加载失败" | |
| try: | |
| # 处理上传的文件 | |
| if file_input is None: | |
| return "请上传一个文件", "错误:没有文件" | |
| # 根据文件类型处理 | |
| file_path = file_input.name if hasattr(file_input, 'name') else file_input | |
| # 调用MonkeyOCR进行解析 | |
| # 这里需要根据实际的API调整 | |
| result = self.model.parse(file_path) | |
| # 返回解析结果 | |
| markdown_result = result.get('markdown', '解析失败') | |
| status = "解析成功" | |
| return markdown_result, status | |
| except Exception as e: | |
| error_msg = f"解析过程中出现错误: {str(e)}" | |
| return error_msg, "错误" | |
| # 创建Demo实例 | |
| demo_instance = MonkeyOCRDemo() | |
| def parse_with_monkeyocr(file_input, prompt="解析文档内容"): | |
| """Gradio包装函数""" | |
| return demo_instance.parse_document(file_input, prompt) | |
| # 创建Gradio界面 | |
| def create_interface(): | |
| with gr.Blocks(title="MonkeyOCR Document Parser", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # 🐵 MonkeyOCR 文档解析器 | |
| MonkeyOCR采用Structure-Recognition-Relation (SRR)三元组范式,能够高效解析中英文文档。 | |
| **支持格式**: PDF, PNG, JPG, JPEG | |
| **功能**: 文本识别、公式解析、表格提取、结构化输出 | |
| """) | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| file_input = gr.File( | |
| label="上传文档", | |
| file_types=[".pdf", ".png", ".jpg", ".jpeg"], | |
| type="filepath" | |
| ) | |
| prompt_input = gr.Textbox( | |
| label="提示词(可选)", | |
| placeholder="请描述您希望如何解析这个文档...", | |
| value="解析这个文档的所有内容,包括文本、表格和公式", | |
| lines=2 | |
| ) | |
| parse_btn = gr.Button("🚀 开始解析", variant="primary", size="lg") | |
| gr.Markdown(""" | |
| ### 使用说明 | |
| 1. 上传PDF文档或图片 | |
| 2. 输入解析提示词(可选) | |
| 3. 点击"开始解析"按钮 | |
| 4. 等待解析完成,查看结果 | |
| """) | |
| with gr.Column(scale=2): | |
| status_output = gr.Textbox( | |
| label="解析状态", | |
| value="等待上传文件...", | |
| interactive=False | |
| ) | |
| result_output = gr.Textbox( | |
| label="解析结果(Markdown格式)", | |
| lines=20, | |
| max_lines=30, | |
| show_copy_button=True | |
| ) | |
| # 示例文件 | |
| gr.Examples( | |
| examples=[ | |
| ["./examples/sample.pdf", "解析这个学术论文"], | |
| ["./examples/table.png", "提取表格数据"], | |
| ["./examples/formula.jpg", "识别数学公式"], | |
| ], | |
| inputs=[file_input, prompt_input], | |
| outputs=[result_output, status_output], | |
| fn=parse_with_monkeyocr, | |
| cache_examples=False | |
| ) | |
| # 绑定事件 | |
| parse_btn.click( | |
| fn=parse_with_monkeyocr, | |
| inputs=[file_input, prompt_input], | |
| outputs=[result_output, status_output] | |
| ) | |
| # 文件上传时的处理 | |
| file_input.change( | |
| fn=lambda x: "文件已上传,请点击解析按钮" if x else "等待上传文件...", | |
| inputs=[file_input], | |
| outputs=[status_output] | |
| ) | |
| return demo | |
| # 启动应用 | |
| if __name__ == "__main__": | |
| demo = create_interface() | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=False | |
| ) |