videoflow

像搭积木一样拼出多进程视频分析流水线

Videoflow 是一个用 Python 编写的视频分析应用开发框架,核心目标是让开发者用搭积木的方式快速构建复杂的多进程视频处理流水线。它把视频处理拆解为生产者、消费者和处理器三类节点,节点之间通过队列传递数据,天然支持多进程并行,从而充分利用多核 CPU 提升吞吐。框架内置对对象检测、目标跟踪等常见任务的支持,也允许接入自定义模型或算法。开发者只需定义每个处理步骤的输入输出,就能把解码、推理、跟踪、后处理等环节串成一条可扩展的流水线,而不必自己处理进程调度、队列同步和背压问题。它适合需要实时或批量处理多路视频流的场景,例如安防监控、交通分析、零售客流统计等,能显著降低从原型到可运行系统的工程成本。

开源 free 计算机视觉
访问官网 ↗ GitHub ↗ 文档 ↗
GitHub 星标 ★ 1039
维护状态 活跃
是否开源 是
定价模式 free

项目数据

分类计算机视觉
开发团队videoflow
所属国家
定价模式free
价格说明开源免费,基于MIT许可证
访问状态
是否开源是
开源协议MIT
主要语言Python
技术栈/模型object-detection,object-tracking,video-analytics,video-pipeline,video-processing
GitHub 星标★ 1039
30天Star增速
HF 下载量
上线时间2019-04-15 00:00:00
最近更新2026-09-21 00:00:00
维护状态活跃
中文支持
访问方式
移动端支持
综合评分
收录时间2026-09-25
浏览次数0

使用教程

难度:入门 约 15 分钟 部署方式:库/依赖 7 步

环境要求

  • Python 3.12 或更高版本
  • Docker(用于 run-local 自动启动开发 NATS 容器)
  • 运行时需要 NATS JetStream 服务器,run-local 会自动启动一个
  • 可用的 pip 环境(从 PyPI 安装)

安装与启动步骤

  1. 1检查运行环境

    确认本机 Python 版本不低于 3.12,并已安装并启动 Docker;两者是 run-local 正常工作的前提。

    python --version
    docker info
  2. 2安装 videoflow

    从 PyPI 安装带全部可选依赖的版本,建议装进自己独立的虚拟环境,避免依赖冲突。

    pip install -U 'videoflow[all]'
  3. 3准备 NATS 服务器

    没有 Docker 时需自己起一个 JetStream 服务;有 Docker 时可跳过,run-local 会自动拉起开发 broker。

    nats-server -js
  4. 4编写流水线脚本

    在 build_flow() 里用生产者、处理器、消费者连成有向无环图,Flow 只列叶子消费者,生产者会自动发现。

    cat > my_flow.py <<'EOF'
    from videoflow.core import Flow
    from videoflow.core.constants import BATCH
    from videoflow.producers import IntProducer
    from videoflow.processors import IdentityProcessor, JoinerProcessor
    from videoflow.consumers import CommandlineConsumer
    
    def build_flow():
        producer  = IntProducer(0, 40, 0.1, name='producer')
        identity  = IdentityProcessor(name='identity')(producer)
        identity1 = IdentityProcessor(name='identity1')(identity)
        joined    = JoinerProcessor(name='joined')(identity, identity1)
        printer   = CommandlineConsumer(name='printer')(joined)
        return Flow([printer], flow_type=BATCH)
    
    if __name__ == '__main__':
        from videoflow.engines.local import LocalProcessEngine
        flow = build_flow()
        flow.run(LocalProcessEngine())
        flow.join()
    EOF
  5. 5本地运行流水线

    run-local 会为每个节点拉起一个子进程,等待流程结束后报告非零退出的节点,并只清理它自己启动的容器。

    videoflow run-local my_flow.py
  6. 6直接运行脚本

    如果已有可用的消息代理,可以直接执行脚本,不经过 run-local 的编排逻辑。

    python my_flow.py
  7. 7部署到 Kubernetes

    在 k3s、kind、minikube 或 Docker Desktop 等开发集群上,一条命令编译图、构建镜像并渲染每个节点的工作负载。

    videoflow deploy my_flow.py

关键配置

配置项必填说明示例
config.template.yaml否随解决方案提供,deploy 会按其中问题交互式生成 config.yamlconfig.template.yaml
--nats否指定已有的 NATS 服务器地址,替代自动置备的开发 broker--nats nats://127.0.0.1:4222
--blob-redis-url否指定 blob 存储使用的 Redis 地址--blob-redis-url redis://127.0.0.1:6379
--require-profile否要求某个通道达到指定保证等级,否则拒绝运行--require-profile producer=reliable_work
--config否直接指定运行使用的配置文件,跳过交互式生成--config config.yaml

如何确认成功

run-local 输出中每个节点各有一个工作子进程启动,命令行消费者正常打印数据,流程结束后没有节点以非零状态退出。

常见问题

Q:必须安装 Docker 吗?

A:不是必须。README 给出的替代方案是自行运行 nats-server -js 提供 JetStream;有 Docker 时 run-local 会自动帮你启动开发 broker。

Q:运行时连不上消息代理怎么办?

A:run-local 默认会启动开发用的 broker;如果已有服务器,用 --nats 指定地址,或先单独启动 nats-server -js。

Q:Flow 里为什么要只列消费者节点?

A:生产者会从消费者出发自动发现,即从叶子节点反向遍历整张图,所以只需把 CommandlineConsumer 这类终端节点传给 Flow。

Q:本地跑通后怎么上 Kubernetes?

A:同一份 build_flow() 工厂无需改代码,执行 videoflow deploy my_flow.py,即可在 k3s、kind、minikube 或 Docker Desktop 上部署。

Q:节点名重复会怎样?

A:每个节点由稳定且唯一的 name 标识,重名会导致节点无法区分,务必为每个节点设置不同的名字。

注意事项

  • Python 版本要求 3.12+,低版本无法安装。
  • run-local 只停止它自己启动的容器;自建的开发存储会保留上次失败运行留下的数据(批处理流 TTL 为 24 小时)。
  • 部署时若图旁存在 Dockerfile(或 gpu.Dockerfile)会被构建使用,否则使用对应版本的 videoflow 基础镜像,可用 --image 覆盖。
  • 本地图文件可通过可重复的 --mount /abs/path[:ro] 暴露给 Pod,集群内数据用 --mount-pvc claim:/path[:ro] 挂载。

核心亮点

  • 基于多进程和队列的节点式设计,能自动并行利用多核 CPU,提升视频处理吞吐
  • 抽象出生产者/消费者/处理器三类节点,开发者只需关注算法逻辑,无需手写进程调度与同步
  • 内置对目标检测、跟踪等常见视频分析任务的支持,并允许接入自定义模型,扩展性较好

不足之处

  • 项目星标约一千,社区规模和生态相对较小,遇到冷门问题可参考的资料有限
  • 文档以基础示例为主,复杂流水线的调试、性能调优和错误处理经验需要自行摸索

适用场景

  • 安防监控中多路摄像头视频流的实时目标检测与跟踪
  • 交通场景下对车流、人流进行批量视频分析与统计
  • 零售门店利用视频流水线做客流计数和顾客行为分析

替代项目

GStreamer、OpenCV、Apache Flink

项目介绍

videoflow 是计算机视觉领域的开源项目,由 videoflow 开发,2019 年首次发布。

在全站 13,090 个收录项目中,它的 GitHub 星标数(1,039)位列前 30%,在计算机视觉分类中处于中上游。

项目目前处于活跃维护状态,最近一次代码更新于 2026-09-21。开源免费,基于MIT许可证。

它主要面向的使用场景是:安防监控中多路摄像头视频流的实时目标检测与跟踪。同类可对比的替代方案包括 GStreamer、OpenCV、Apache Flink。

上一篇:cosmo-edge

下一篇:没有了!

同类项目推荐

modlens 开源

给纯文本编码代理装上眼睛,粘贴图片即刻获得结构化视觉证据。

The first vision plugin for DeepSeek Harness, and the vision bridge for every text-o···

★ 4019 2026-08-19
opencv 开源

开箱即用的视觉算法库,搞定图像视频处理与识别

Open Source Computer Vision Library

★ 90930 2026-08-10
OpenCVTutorials 开源

中文 OpenCV 教程,从入门到实战,边看边跑代码

OpenCV-Python4.1 中文文档

★ 1430 2026-08-20
DEIMv2 开源

用DINOv3做实时检测,又快又准,直接落地。

[DEIMv2] Real Time Object Detection Meets DINOv3

★ 2046 2026-08-14