videoflow

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

开源 🏷️完全免费 🔧 仅开源项目,无在线服务,需自行部署 计算机视觉 🍴 复刻 90 🐛 待处理 21 👀 关注 21
访问官网 ↗ GitHub ↗
GitHub 星标 ★ 1044
维护状态 较活跃
是否开源 开源
定价模式 🏷️完全免费 开源免费,基于MIT许可证

项目预览

videoflow 项目界面预览图
图片来源:GitHub 官方仓库名片

项目数据

分类计算机视觉
开发团队videoflow
定价模式🏷️完全免费
价格说明开源免费,基于MIT许可证
访问状态🔧 仅开源项目,无在线服务,需自行部署
是否开源是
开源协议MIT
主要语言Python
技术栈/模型object-detection,object-tracking,video-analytics,video-pipeline,video-processing
GitHub 星标★ 1044
上线时间2019-04-15 00:00:00
代码更新2026-10-30
仓库体积21.7 MB
本站数据更新2026-11-08
维护状态较活跃
收录时间2026-09-25
浏览次数1

项目介绍

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

Star 增长趋势

本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整

数据来源:GitHub API 逐日快照 · 收录于 2026-09-25 · 当前星标 ★ 1044

使用教程

难度:入门 约 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

上一篇:cosmo-edge

下一篇:mahotas

同类项目推荐

galaxy-explorer 开源

浏览器里漫游程序化生成的银河系,无需后端和构建步骤

An interactive, procedurally-generated Milky Way galaxy in the browser — WebGL / th···

★ 101 2026-08-09
diffseg 开源

用扩散模型注意力,零标注自动分割图像

DiffSeg is an unsupervised zero-shot segmentation method using attention information···

★ 328 2026-08-09
awesome-3D-scene-graphs 开源

3D场景图论文与代码一站查,调研省时

Awesome 3D Scene Graphs: a curated list of 3D scene graph generation and related res···

★ 182 2026-10-27
sports 开源

用AI看懂体育比赛,一键提取球员位置和动作数据

computer vision and sports

★ 5485 2026-08-10
ai4rs 开源

遥感图像目标检测与变化检测,开箱即用

AI for remote sensing, remote sense, object detection, oriented object detection, co···

★ 163 2026-09-28
cvkit 开源

轻量 C++ 工具,快速查看图像与 3D 模型

Computer Vision Toolkit. cvkit is available for Linux as well as for Windows. It off···

★ 281 2026-09-18
scene-language 开源

用程序+文字+嵌入,一句话生成可编辑的3D场景

(CVPR 2025 Highlight) The Scene Language: Representing Scenes with Programs, Words, ···

★ 273 2026-08-09
sparsefusion 开源

从稀疏视角生成高质量3D模型,重建新视角图像

[CVPR 2023] SparseFusion: Distilling View-conditioned Diffusion for 3D Reconstructio···

★ 380 2026-08-09
DriveLM 开源

用图问答让自动驾驶学会推理和解释

[ECCV 2024 Oral] DriveLM: Driving with Graph Visual Question Answering

★ 1352 2026-08-09