Download scripts/app.py from SoMark/FastCDM: direct link, hf CLI and curl.
- Browser
- Download file 2.98 kB
-
https://huggingface.co/spaces/SoMark/FastCDM/resolve/main/scripts/app.py
- Command line
-
hf download hf://spaces/SoMark/FastCDM/scripts/app.py
-
curl -L -o app.py https://huggingface.co/spaces/SoMark/FastCDM/resolve/main/scripts/app.py
2.98 kB
| import gradio as gr | |
| import cv2 | |
| from pathlib import Path | |
| from fastcdm import FastCDM | |
| CHROMEDRIVER_PATH = Path("driver/chromedriver") | |
| def _wrap_latex(s: str) -> str: | |
| s = s or "" | |
| return s if s.strip().startswith("$$") else f"$$ {s} $$" | |
| def preview_latex_gt(gt: str) -> str: | |
| return _wrap_latex(gt) | |
| def preview_latex_pred(pred: str) -> str: | |
| return _wrap_latex(pred) | |
| def compute_fastcdm(gt: str, pred: str): | |
| print("-" * 20) | |
| print(" gt:", gt) | |
| print("pred:", pred) | |
| print("-" * 20) | |
| driver_path = str(CHROMEDRIVER_PATH) if CHROMEDRIVER_PATH.exists() else None | |
| fastcdm = FastCDM(chromedriver=driver_path) | |
| try: | |
| f1, recall, precision, vis_img = fastcdm.compute(gt, pred, visualize=True) | |
| if vis_img is not None: | |
| vis_rgb = cv2.cvtColor(vis_img, cv2.COLOR_BGR2RGB) | |
| else: | |
| vis_rgb = None | |
| metrics_md = f"**CDM得分(F1)**: {f1:.4f} \n**召回率**: {recall:.4f} \n**准确率**: {precision:.4f}" | |
| return metrics_md, vis_rgb | |
| finally: | |
| fastcdm.close() | |
| with gr.Blocks(title="FastCDM 可视化") as demo: | |
| gr.Markdown("# FastCDM 可视化") | |
| with gr.Row(): | |
| with gr.Column(): | |
| gt_input = gr.Textbox( | |
| label="GT (LaTeX)", | |
| lines=4, | |
| placeholder="输入GT公式,例如: \\frac{1}{2}", | |
| ) | |
| gt_md = gr.Markdown( | |
| value="", | |
| latex_delimiters=[ | |
| {"left": "$$", "right": "$$", "display": True}, | |
| {"left": "$", "right": "$", "display": False}, | |
| {"left": "\\(", "right": "\\)", "display": False}, | |
| {"left": "\\[", "right": "\\]", "display": True}, | |
| ], | |
| ) | |
| pred_input = gr.Textbox( | |
| label="Pred (LaTeX)", | |
| lines=4, | |
| placeholder="输入Pred公式,例如: \\frac{1}{2}", | |
| ) | |
| pred_md = gr.Markdown( | |
| value="", | |
| latex_delimiters=[ | |
| {"left": "$$", "right": "$$", "display": True}, | |
| {"left": "$", "right": "$", "display": False}, | |
| {"left": "\\(", "right": "\\)", "display": False}, | |
| {"left": "\\[", "right": "\\]", "display": True}, | |
| ], | |
| ) | |
| submit_btn = gr.Button("提交并评估") | |
| with gr.Column(): | |
| metrics_out = gr.Markdown(label="评估指标") | |
| vis_out = gr.Image(type="numpy", label="匹配可视化", format="png") | |
| gt_input.change(fn=preview_latex_gt, inputs=gt_input, outputs=gt_md) | |
| pred_input.change(fn=preview_latex_pred, inputs=pred_input, outputs=pred_md) | |
| submit_btn.click( | |
| fn=compute_fastcdm, | |
| inputs=[gt_input, pred_input], | |
| outputs=[metrics_out, vis_out], | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0", server_port=7860) | |