You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JavaScript向Gradio Dataframe传递数据?附边界框编辑器需求

实现JS边界框数据传递到Gradio Dataframe

一、前端直接更新Dataframe组件

Gradio允许前端JS通过组件ID直接获取实例并更新数据,步骤如下:

  1. Python端定义组件:给Dataframe设置唯一ID,方便JS定位:
import gradio as gr

with gr.Blocks() as demo:
    # 定义带列的Dataframe,设置id
    bbox_df = gr.Dataframe(
        columns=["x1", "y1", "x2", "y2", "label"],
        id="bbox-dataframe"
    )
    # 你的Canvas编辑器HTML/自定义组件
    gr.HTML('<canvas id="bbox-editor" width="600" height="400"></canvas>')
    # 添加触发按钮(可选,也可以在绘制完成后自动触发)
    save_btn = gr.Button("保存边界框到表格", id="save-bbox-btn")
  1. JS端传递数据:在你的Canvas编辑器逻辑中,整理好边界框数据(格式匹配Dataframe的列),然后调用Gradio组件的update方法:
// 假设你已经实现了获取当前边界框的函数getCurrentBboxes()
// 返回格式示例:[{x1:10,y1:20,x2:100,y2:150,label:"物体1"}, ...]
function getCurrentBboxes() {
    // 替换成你的实际数据获取逻辑
    return [
        {x1: 10, y1: 20, x2: 100, y2: 150, label: "物体1"},
        {x1: 50, y1: 80, x2: 200, y2: 250, label: "物体2"}
    ];
}

// 绑定按钮点击事件(或在绘制完成后自动执行)
document.getElementById("save-bbox-btn").addEventListener("click", () => {
    // 获取Dataframe组件实例
    const dfComponent = gr.getComponent("bbox-dataframe");
    // 更新组件数据
    dfComponent.update(getCurrentBboxes());
});

二、通过后端接口传递数据(适合需要后端处理的场景)

如果需要先在Python端处理边界框数据再更新Dataframe,可以通过Gradio的API传递:

  1. Python端定义处理函数:
import gradio as gr

def process_bboxes(bboxes):
    # 可选:在这里对边界框数据进行处理(比如校验、转换格式)
    return bboxes

with gr.Blocks() as demo:
    bbox_df = gr.Dataframe(columns=["x1", "y1", "x2", "y2", "label"])
    save_btn = gr.Button("保存边界框到表格")
    # 绑定按钮点击事件,接收JSON格式的边界框数据
    save_btn.click(
        fn=process_bboxes,
        inputs=gr.JSON(),
        outputs=bbox_df
    )
  1. JS端调用后端接口:
document.getElementById("save-bbox-btn").addEventListener("click", () => {
    const bboxes = getCurrentBboxes();
    // 调用Gradio的predict接口传递数据
    gr.post("/predict", {data: [bboxes]}).then(() => {
        // 数据已传递到后端并更新了Dataframe
    });
});
优质边界框编辑器方案推荐

以下是具备绘制/删除/调整大小功能的成熟方案:

  • Fabric.js:轻量级Canvas图形库,内置矩形绘制、拖拽缩放、删除等交互能力,API简洁,可快速封装成边界框编辑器,支持自定义样式和事件监听。
  • Konva.js:分层Canvas图形库,提供完善的图形交互控件,支持边界框的创建、调整、删除,适合构建复杂的图像标注工具。
  • LabelStudio 前端组件逻辑:参考LabelStudio的边界框标注模块实现,它的前端部分基于React+Canvas,具备完整的标注交互功能,可提取核心逻辑集成到你的Gradio项目中。
  • OpenCV.js:结合图像处理能力的JS库,支持图形绘制和交互,适合需要对图像进行预处理的边界框标注场景。

内容的提问来源于stack exchange,提问作者sleshworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:55:58