gradio 处理视频
package
本文字数:410 字 | 阅读时长 ≈ 1 min

gradio 处理视频

package
本文字数:410 字 | 阅读时长 ≈ 1 min

现在有一个目标是对视频进行处理,比如输入一个 mp4 文件,通过算法对每一帧进行处理,最后将视频重新输出,有以下难点

1. 将视频处理为单帧的形式

首先涉及到 gr.State 函数,参考如下例子对其进行了解

import gradio as gr

demo = gr.Blocks(css="""#btn {color: red} .abc {font-family: "Comic Sans MS", "Comic Sans", cursive !important}""")

with demo:
    default_json = {"a": "a"}
    btn = gr.Button("Next Square", elem_id="btn", elem_classes=["abc", "def"])

    num = gr.State(value=0)
    stats = gr.State(value=default_json)

    squared = gr.Number(value=0)
    table = gr.JSON()

    def increase(var, stats_history):
        var += 1
        stats_history[str(var)] = var**2
        return var, var**2, stats_history, stats_history

    btn.click(increase, [num, stats], [num, squared, stats, table])

if __name__ == "__main__":
    demo.launch()

输出如下所示,这是点击了 4 次 next square 按钮的结果,一般来说 gradio 都是输入经过一个函数得到输出,是一次性的,gr.State 则可以保存中间变量,让 demo 能够进行多次的输入和输出,如上述代码所示,我们定义了两个 State:num 和 stats,这两个变量作为输入,squared 和 table 作为输出变量,increase 是我们的函数,将 num 和 stats 输入到函数中后,最后返回四个变量,其中两个用来更新 num 和 stats,另外两个变量则就是输出了,多看几遍代码就很容易弄懂

了解上述函数之后用 opencv 库将视频帧进行提取即可

4月 06, 2025
3月 10, 2025
12月 31, 2024