python视频流处理库

videoflow的Python项目详细描述


视频流

Videoflow

Build Statuslicense

videoflow是用于视频流处理的python框架。该库的设计是为了方便快捷地定义计算机视觉流处理管道。它使开发人员能够使用简单的几行代码构建具有自包含的深度学习和计算机视觉功能的应用程序和系统。它包含了现成的参考组件,用于目标检测、目标跟踪、人体姿态估计等,并且易于扩展。

项目的完整文档位于docs.videoflow.dev

安装框架

要求

在安装之前,请确保已经安装了cv2tensorflow >= 1.12。python 2不支持。需要Python3.6+。也有一些known issues可以在windows上运行它

安装

通过执行pip3 install videoflow

或者,您可以通过以下方式安装:

  1. 克隆此存储库
  2. 在repository文件夹中,执行pip3 install . --user

使用Docker

# clone repo
docker build -t repo/videoflow:latest .
# runs examples/object_detector.py by default
docker run -u $(id -u):$(id -g) -v $(pwd):/usr/src/app repo/videoflow
# or mount the volume from your code directory  to /usr/src/app
docker run -u $(id -u):$(id -g) -v $(pwd):/usr/src/app repo/videoflow python /usr/src/app/yourown.py

贡献:

一个关于我们前进方向的暂定的roadmap

Contribution rules

如果您可以创建新的处理器、生产者或消费者,请检查videoflow-contrib项目。我们想要 保持视频流简洁、干净和简单,并尽可能减少对第三方库的依赖。videoflow-contrib更适合添加需要新库的新组件 依赖关系。

视频流应用程序示例:

下面是一个检测十字路口汽车的视频流应用程序示例。有关更多示例,请参见examples文件夹。它使用由tensorflow/models

IMAGE ALT TEXT HERE

importvideoflowimportvideoflow.core.flowasflowfromvideoflow.core.constantsimportBATCHfromvideoflow.consumersimportVideofileWriterfromvideoflow.producersimportVideofileReaderfromvideoflow.processors.vision.detectorsimportTensorflowObjectDetectorfromvideoflow.processors.vision.annotatorsimportBoundingBoxAnnotatorfromvideoflow.utils.downloaderimportget_fileURL_VIDEO="https://github.com/videoflow/videoflow/releases/download/examples/intersection.mp4"classFrameIndexSplitter(videoflow.core.node.ProcessorNode):def__init__(self):super(FrameIndexSplitter,self).__init__()defprocess(self,data):index,frame=datareturnframeinput_file=get_file("intersection.mp4",URL_VIDEO)output_file="output.avi"reader=VideofileReader(input_file)frame=FrameIndexSplitter()(reader)detector=TensorflowObjectDetector()(frame)annotator=BoundingBoxAnnotator()(frame,detector)writer=VideofileWriter(output_file,fps=30)(annotator)fl=flow.Flow([reader],[writer],flow_type=BATCH)fl.run()fl.join()

应用程序的输出是带批注的视频:

流应用程序的结构

流应用程序通常由三部分组成:

  1. 在应用程序的第一部分中,定义计算节点的有向无环图。有三种不同的节点:生产者、加工商和消费者。生产者节点创建数据(通常它们将从流外部的源获取数据)。处理器接收数据作为输入,产生数据作为输出。消费者读取数据,不产生任何输出。当您想将结果写入日志文件时,或者当您想将结果推送到外部源(rest api、s3 bucket等)时,通常使用使用者。

  2. 要创建流对象,需要将生产者列表和消费者列表传递给它。一旦定义了流,就可以启动它。启动流意味着生产者开始将数据放入流中,处理器和消费者开始接收数据。启动流还意味着为生产者、加工商和消费者分配资源。为了简单起见,现在我们可以说,每个生产者、处理器和消费者都将在自己的进程空间上运行。

  3. 一旦开始流动,你也可以停止它。当你停止流动,它将发生有机的。生产商将停止生产数据。流中的其余节点将继续运行,直到管道干透。当每个节点停止生成/处理/消耗数据时,流中使用的资源将逐步释放。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java简明流语法处理用户输入   GoogleAppEngine Java中的计划电子邮件   java JDK目录未设置或无效(unity)?   java CountDownLatch会导致JFrame(JButtons等)中的内容消失,只有当鼠标悬停时才会返回   java如何将日期发送到游标?   在Java中执行groovy文件   与Oracle和Postgres兼容的java Spring数据类jpa查询   Google App Engine中的java“平台方法缺失”和“NoSuchMethod”错误   java无法到达请求映射端点,因此我收到404错误   mysql mysqldump在java中不起作用   java在spring mvc中如何将节点对象注入服务类?   尝试使用Java连接到mySQL服务器(工作台)时出错   JavaFX和MVP,对象在不应该被垃圾收集的时候被垃圾收集   java检查出生日期是否在3个整数中有效(mm/dd/yyyy)