""")
with gr.Tabs():
with gr.Tab("Document Parsing"):
with gr.Row():
with gr.Column(scale=5):
file_doc = gr.File(label="Upload Image", file_count="single", type="filepath", file_types=["image"])
preview_doc_html = gr.HTML(value="", elem_id="image_preview_doc", visible=False)
gr.Markdown("_( Use this mode for recognizing full-page documents with structured layouts, such as reports, papers, or magazines.)_")
gr.Markdown("💡 *To recognize a single, pre-cropped element (e.g., a table or formula), switch to the 'Element-level Recognition' tab for better results.*")
with gr.Row(variant="panel"):
chart_parsing_switch = gr.Checkbox(label="Enable chart parsing", value=False, scale=1)
btn_parse = gr.Button("Parse Document", variant="primary", scale=2)
if complex_document_examples:
complex_paths = [e[0] for e in complex_document_examples]
complex_state = gr.State(complex_paths)
gr.Markdown("**Document Examples (Click an image to load)**")
gallery_complex = gr.Gallery(value=complex_paths, columns=4, height=400, preview=False, label=None, allow_preview=False)
gallery_complex.select(fn=_on_gallery_select, inputs=[complex_state], outputs=[file_doc])
with gr.Column(scale=7):
with gr.Tabs():
with gr.Tab("Markdown Preview"):
md_preview_doc = gr.Markdown("Please upload an image and click 'Parse Document'.", latex_delimiters=LATEX_DELIMS, elem_id="md_preview_doc")
with gr.Tab("Visualization"):
# 【核心改动点】: 将 gr.Image 替换为 gr.HTML
vis_image_doc = gr.HTML(label="Detection Visualization", elem_id="vis_image_doc")
with gr.Tab("Markdown Source"):
md_raw_doc = gr.Code(label="Markdown Source Code", language="markdown")
file_doc.change(fn=update_preview_visibility, inputs=[file_doc], outputs=[preview_doc_html])
btn_parse.click(fn=handle_complex_doc, inputs=[file_doc, chart_parsing_switch], outputs=[md_preview_doc, vis_image_doc, md_raw_doc])
with gr.Tab("Element-level Recognition"):
with gr.Row():
with gr.Column(scale=5):
file_vl = gr.File(label="Upload Image", file_count="single", type="filepath", file_types=["image"])
preview_vl_html = gr.HTML(value="", elem_id="image_preview_vl", visible=False)
gr.Markdown("_(Best for images with a **simple, single-column layout** (e.g., pure text), or for a **pre-cropped single element** like a table, formula, or chart.)_")
gr.Markdown("Choose a recognition type:")
with gr.Row(elem_classes=["prompt-grid"]):
btn_ocr = gr.Button("Text Recognition", variant="secondary")
btn_formula = gr.Button("Formula Recognition", "secondary")
with gr.Row(elem_classes=["prompt-grid"]):
btn_table = gr.Button("Table Recognition", variant="secondary")
btn_chart = gr.Button("Chart Recognition", variant="secondary")
if targeted_recognition_examples:
targeted_paths = [e[0] for e in targeted_recognition_examples]
targeted_state = gr.State(targeted_paths)
gr.Markdown("**Element-level Recognition Examples (Click an image to load)**")
gallery_targeted = gr.Gallery(value=targeted_paths, columns=4, height=400, preview=False, label=None, allow_preview=False)
gallery_targeted.select(fn=_on_gallery_select, inputs=[targeted_state], outputs=[file_vl])
with gr.Column(scale=7):
with gr.Tabs():
with gr.Tab("Recognition Result"):
md_preview_vl = gr.Markdown("Please upload an image and click a recognition type.", latex_delimiters=LATEX_DELIMS, elem_id="md_preview_vl")
with gr.Tab("Raw Output"):
md_raw_vl = gr.Code(label="Raw Output", language="markdown")
file_vl.change(fn=update_preview_visibility, inputs=[file_vl], outputs=[preview_vl_html])
btn_ocr.click(fn=handle_targeted_recognition, inputs=[file_vl, gr.State("Text Recognition")], outputs=[md_preview_vl, md_raw_vl])
btn_formula.click(fn=handle_targeted_recognition, inputs=[file_vl, gr.State("Formula Recognition")], outputs=[md_preview_vl, md_raw_vl])
btn_table.click(fn=handle_targeted_recognition, inputs=[file_vl, gr.State("Table Recognition")], outputs=[md_preview_vl, md_raw_vl])
btn_chart.click(fn=handle_targeted_recognition, inputs=[file_vl, gr.State("Chart Recognition")], outputs=[md_preview_vl, md_raw_vl])
if __name__ == "__main__":
port = int(os.getenv("PORT", "7860"))
demo.queue(max_size=6).launch(server_name="0.0.0.0", server_port=port,share=False)