PeekingDuck

news2024/12/27 9:46:58

7603fed4cfa8e0b10211dfdb655f34ee.jpeg

介绍

计算机视觉项目可能会非常令人望而生畏,涉及到各种工具和包,如OpenCV、TensorFlow和PyTorch等等。不仅需要熟悉所涉及的工具和API,还需要正确组合各个包,以使整个计算机视觉流水线正常工作。

例如,OpenCV以[H,W,C]格式处理带有BGR通道的图像,而TensorFlow以相同格式处理带有RGB通道的图像,PyTorch以[C,H,W]格式处理带有RGB通道的图像。由于这种不一致性,图像格式必须在图像在各个库之间传递时不断修改。这种问题(以及其他问题!)导致了大量样板代码,我们希望在一般情况下避免使用。

如果我们能够使用单一统一的流水线简化计算机视觉流程,该怎么办呢?这个流水线应具备以下特点:

  • 开源且没有像GPL-3.0这样的限制,以降低成本。

  • 模块化,适用于各种用例。

  • 最先进的,以获得最佳性能。

  • 最小化,以减少流水线的复杂性。

事实证明,PeekingDuck部分解决了所有这些问题 —— 这是新近由AI Singapore发布的计算机视觉包!

PeekingDuck

PeekingDuck是一个计算机视觉框架,具备以下特点:

  1. 开源(Apache 2.0) —— 没有成本或限制。

  2. 模块化 —— 可以混合匹配各种模块以解决不同的用例。

  3. 最先进的计算机视觉推理 —— 强大的深度学习模型。

  4. 最小化 —— 真正不需要Python代码!

通过使用像pip这样的软件包管理器安装PeekingDuck作为Python软件包后,可以直接从命令行/终端使用该软件包,轻松直接地与其他应用程序集成。

安装PeekingDuck

PeekingDuck作为Python软件包进行安装:

pip install peekingduck

节点 —— PeekingDuck的基本构建块

使用PeekingDuck,计算机视觉流程使用称为节点的基本构建块构建。每个节点处理不同的操作集,通过混合使用各种节点,可以创建不同的流水线。截至撰写本文,PeekingDuck有6种不同类型的节点:

  1. 输入节点 —— 从实时摄像头或视频/图像文件中将图像数据输入到流水线中。

  2. 增强 - 预处理图像数据。

  3. 模型 - 执行诸如目标检测或姿态估计等计算机视觉任务。

  4. 涂抹 - 后处理模型输出。

  5. 绘制 - 可视化模型输出,如边界框。

  6. 输出 - 将模型输出保存到磁盘。

人物追踪流程

使用PeekingDuck非常简单!在本节中,我们将演示如何使用PeekingDuck创建一个人物追踪流程!

初始化PeekingDuck

第一步是在指定的目录中初始化PeekingDuck(在本例中为person_tracking/)。

mkdir person_tracking

cd person_tracking

peekingduck init

这将在person_tracking/目录下创建一个名为pipeline_config.yml的配置文件,以及其他一些源代码文件。为了让PeekingDuck按照我们的意愿进行操作,我们需要修改pipeline_config.yml文件。

在我们的情况下,pipeline_config.yml应包含以下内容:

nodes:
- input.visual:
    source: venice-2-train.mp4
    
- model.jde

- dabble.statistics:
    maximum: obj_attrs["ids"]
    
- draw.bbox

- draw.tag:
    show: ["ids"]
    
- draw.legend:
    show: ["cum_max"]
    
- output.media_writer:               
    output_dir: output/

我们在这个任务中使用了以下节点:

  1. input.visual —— 指定要从中加载图像数据的文件。我们使用从MOT15数据集的Venice-2图像拼接而成的视频。

  2. model.jde —— 指定要使用的模型。对于人物追踪,我们使用Joint Detection and Embedding (JDE)模型。

  3. dabble.statistics —— 基于模型的输出进行统计计算。在这种情况下,我们计算每帧检测到的ID的最大数量。

  4. draw.bbox —— 在每帧上绘制检测到的边界框。

  5. draw.tag —— 为每个边界框绘制相应的标签。

  6. draw.legend —— 绘制累积最大检测数。

  7. output.media_writer —— 将模型的预测输出保存到磁盘上。 通过混合和匹配不同的节点,我们可以构建不同的流水线来解决不同的计算机视觉用例。PeekingDuck网站上提供了可用节点的详细列表。

https://peekingduck.readthedocs.io/en/stable/nodes/input.html

准备数据

接下来是准备数据。在我们的情况下,我们使用OpenCV将来自MOT15数据集的Venice-2图像拼接成一个名为venice-2-train.mp4的视频文件,帧率为30,分辨率为[1920, 1080]。

import cv2

import os

w = cv2.VideoWriter("venice-2-train.mp4", 
                    cv2.VideoWriter_fourcc(*"MP4V"), 
                    30, [1920, 1080])

files = sorted(os.listdir("MOT15/train/Venice-2/img1"))

for f in files:
    im = cv2.imread(os.path.join("MOT15/train/Venice-2/img1", f))
    w.write(im)

w.release()

运行PeekingDuck

在初始化PeekingDuck和数据之后,只需简单地从命令行运行流水线:

peekingduck run

流水线的输出将保存在output/目录下,如pipeline_config.yml中所指定的,可以将其可视化为视频或.gif图像,如下所示。

检测到的边界框已经叠加在每个被追踪的人物上,并显示了每个相应的追踪ID。累积最大追踪ID的数量也显示在每个帧的左下角。

ce6ec2c40996300dda021f92f7466893.gif

请注意,除了准备数据外,在使用PeekingDuck进行人物追踪时,我们没有编写一行Python代码!

结论

计算机视觉已经取得了长足的进步,我们现在可以访问许多出色的软件包,如PeekingDuck。

PeekingDuck提供了开源、模块化的最先进的计算机视觉模型,只需要很少量的Python代码,任何人都可以相对轻松地进行计算机视觉项目!

参考引用

  1. https://peekingduck.readthedocs.io/en/stable/master.html

  2. https://motchallenge.net/data/MOT15/

  3. https://github.com/Zhongdao/Towards-Realtime-MOT

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

b410337760dd10e684e6b4268f771ead.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩转百问网东山Pi壹号-SSD202 Linux开发板(一)

点击上方“嵌入式应用研究院”,选择“置顶/星标公众号” 干货福利,第一时间送达! 来源 | 嵌入式应用研究院 整理&排版 | 嵌入式应用研究院 很早之前就做过SSD20x相关的平台,刚好手里有一块东山Pi壹号-开发板,于是我…

儿童睡眠慢波的起源、同步和传播

摘要 目的:使用EEG delta功率(<4Hz)测量的睡眠慢波活动在整个发育过程中发生显著变化,反映了大脑功能和解剖结构的变化。然而,个体慢波特征随年龄的变化尚未被彻底研究。在这里,本研究旨在表征儿童期到成年期的个体慢…

Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解

文章目录 1.原理解析1.1.SDS的内部实现原理1.1.1 Redis 6.0版本和Redis5.0对比1.1.2 redis6和redis5对比1.1.3 优势1.1.3.1. 动态扩容1.1.3.2. 常数复杂度获取字符串长度1.1.3.3. 杜绝缓冲区溢出1.1.3.4. 减少修改字符串的内存重新分配次数1.1.3.5. 二进制安全1.1.3.6. 兼容部分…

SpringMVC06:Json交互处理

目录 一、什么是JSON? 二、代码测试 1、新建一个module,SpringMVC-05-json,添加web支持和lib包 2、在index.jsp中编写测试内容 3、配置tomcat,启动项目,在浏览器中打开,查看控制台输出 4、controller返回JSON数据…

AC变DC220V变5V小家电电源芯片-AH8652、AH8669

Q: 什么是AH8652和AH8669电源芯片? A: AH8652和AH8669都是AC变DC的电源芯片,适用于将输入的交流电压(220V)转换为5V直流电压输出,用于小家电的电源模块等应用。 AC变DC220V变5V小家电电源芯片-AH8669 Q: AH8652和AH8669的最大输…

2023智源大会议程公开丨自动驾驶论坛

6月9日,2023北京智源大会,将邀请这一领域的探索者、实践者、以及关心智能科学的每个人,共同拉开未来舞台的帷幕,你准备好了吗?与会知名嘉宾包括,图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

Observability:如何有效地将应用日志发送到 Elasticsearch

在今天的文章中,我们将探讨使用 3 种不同的架构发送应用的日子到 Elasticsearch。我们将详述它们的优缺点。更多关于日志架构的介绍,请参考 “Elastic:开发者上手指南” 中的 “Elastic Stack 架构” 部分。 介绍 采用 Elastic Stack&#x…

前端录制回放rrweb

rrweb 是 ‘record and replay the web’ 的简写,旨在利用现代浏览器所提供的强大 API 录制并回放任意 web 界面中的用户操作。 rrweb中文文档 https://github.com/rrweb-io/rrweb/blob/master/guide.zh_CN.md 本文项目地址 https://github.com/qdfudimo/vue-rrweb…

网安学习|Kail安全渗透测试系统之【前期信息收集】工具实践学习

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页:[ https://www.weiyigeek.top ] 博客&…

达梦数据库与MySQL的区别及语法差异

达梦数据库与MySQL的区别及其SQL语句对比 简介:正文:1. 达梦数据库和MySQL的概述2. 特点对比3. SQL语句对比1. 数据类型:2. 语法:1. DDL(数据定义语言)的差异:2. DML(数据操作语言&a…

面向对象——多态、抽象类、接口

学习资料来自:黑马程序员,内容仅为学习记录,侵删 多态 多态:事务存在的多种形态 多态的前提:1、有继承关系;2、重写父类方法;3、父类引用指向子类对象 面向对象 面向对象多态中成员访问特点…

动态测试数据处理

分类 动态测试数据: 1、确定性数据:能够用明确的数学表达式进行描述的数据称为确定性数据。 Ⅰ、周期数据 Ⅱ、非周期数据 2、随机性数据:无法用明确的数学表达式表述;若在一个…

强大的工具:APISpace IP归属地查询API

引言 IP地址在互联网世界中扮演着重要的角色,对于许多应用程序和服务来说,了解IP地址的归属地信息可以提供有价值的洞察和功能。 在本文中,我们将介绍一种名为IP归属地-IPv4区县级 API 的强大工具,它提供了查询 IP 地址归属地信…

如何解释物联网IOT平台?

物联网开发的本质是将各种物品通过网络连接在一起,并对这些物品进行数字化管理,从而实现智能自动化。在物联网的早期阶段,一些物联网应用程序(例如,智能电表)使用软件将信息传输到后台服务器。但随着时间的…

华为路由器:多区域OSPF协议实验

一、实验拓扑 二、ospf基本概念复习 区域划分:area0为骨干区域,其他area1、area2都为普通区域/常规区域。普通区域必须和骨干区域直接相连。ABR:区域边界路由器。R2、R3位于两个区域的中间,我们称之为区域边界路由器 &#xff1b…

ObjectARX如何监控实体双击事件(利用钩子函数或者反应器)

目录 1 实现方法1——钩子函数1.1 钩子函数的作用1.2 利用钩子函数监控双击事件 2 实现方法2——反应器2.1 反应器的作用2.2 利用编辑器反应器监控双击事件 在ObjectARX开发中,常常要监控鼠标的双击事件,比如,往一个实体中写了扩展数据&#…

基于html+css的图展示115

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

2023年湖北下半年中级职称申报中级职称评审申报条件是什么?

2023年湖北下半年中级职称申报中级职称评审申报条件是什么? 2023年湖北中级职称申报条件:本科毕业5年,专科毕业7年,相关专业 助工满4年这个条件目前不是硬性要求,意思就是有肯定更好,没有也没有太大的影响 …

穿越火线几次体验良好的游戏优化方案

文章目录 介绍救世主模式终结者模式30人生化模式挑战模式英雄级武器源武器英雄级武器皮肤英雄级武器游戏玩偶英雄级武器万化包、光效英雄级武器强化英雄级武器音效卡免费获取挑战强化武器戒指击杀效果个人竞技击杀效果人机训练模式交易所火线币快速加入跳跳乐爆头战HS间谍模式地…

做了一个日内信号可视化系统

量化策略开发,高质量社群,交易思路分享等相关内容 大家好,半年过去了。松鼠Quant计划6月内发布本年度最重要的一个策略:盘口策略。这个策略群友们的呼声很高,也是花了比较多时间去弄。整个策略有多个python脚本: CTP数据生成order…