(一)DepthAI-python相关接口:OAK Device

news2024/11/25 2:41:37

消息快播:OpenCV众筹了一款ROS2机器人rae,开源、功能强、上手简单。来瞅瞅~

编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多👍⭐️✍
内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。

▌前言

Hello,大家好,这里是OAK中国,我是助手君。

最近在知乎看到有朋友写了depthai python接口相关的内容,内容非常不错。我整理了一下,分享给大家。

本系列一共四篇博客,原文出处:石满@知乎。

▌Device API

在这里插入图片描述

import depthai as dai

Example样例

Device对象指的是一个OAK设备。当启动一个oak设备时,会上传一个Pipeline管道,该管道会在VPU上运行,当用代码创建设备时,固件、管道和其他资源(NN blobs)会被一起上传。

pipeline = depthai.Pipeline()

# 创建节点,配置并连接他们

# 上传一个管道到设备上
with depthai.Device(pipeline) as device:
  print('MxId:',device.getDeviceInfo().getMxId()) # Myraid X id
  print('USB speed:',device.getUsbSpeed())  # usb 传输速度 
  print('Connected cameras:',device.getConnectedCameras())  # 相机

  # 输入队列,主机传输数据到设备
  input_q = device.getInputQueue("input_name", maxSize=4, blocking=False)

  # 输出队列,设备传输数据到主机
  output_q = device.getOutputQueue("output_name", maxSize=4, blocking=False)

  while True:
      # 获取输出队列中一条信息
      output_q.get() # Or output_q.tryGet() for non-blocking

      # 向设备发送一条消息
      cfg = depthai.ImageManipConfig()
      input_q.send(cfg)

Queue队列

对设备进行初始化后,必须进行输入/输出队列的初始化,这些队列将会位于主机上。

outputQueue = device.getOutputQueue("output_name")
inputQueue = device.getInputQueue("input_name")

定义一个输出队列后,设备会一直输出新的信息,主机也会一直读取它。通常情况下,主机读取队列的速度更快,导致大部分时间,队列是一个空的状态。但当主机同事在做其他程序,设备写入的速度快于主机读取的速度,在队列中的信息会增加,maxSize、blocking两个参数决定了队列的行为。

# 初始化
queue = device.getOutputQueue(name="name", maxSize=5, blocking=False)

# Or afterwards
queue.setMaxSize(10)
queue.setBlocking(True)
  • 一般情况下不需要考虑,但当主机内存很小的情况下,需要设置最大队列尺寸。 仅需要最新的结果,以前的不要紧, maxSize=1, blocking=False
  • 30fps代表一帧大约需要33ms,如果主机处理一帧在这个范围内,maxSize=1,2代表处理一帧需要66ms
  • 如对间隔内获取的数据有需要,可以进行具体设置,如DetectionNetwork网络需要检查最近1s内的结果,maxSize=30,blocking=False(假设DetectionNetwork网络处理速度为30fps)
  • blocking=True 仅当信息之间正确的顺序被需要的时候, 例如:匹配直通帧和原始帧, 编码等

Blocking or Non-Blocking 堵塞与否

默认情况下,maxSize=30,blocking=True。所以当设备填满一个队列,且达到上限,其他任何来自设备的消息将被堵塞,等主机处理完一个消息后,才会将新的消息输入队列。

当blocking=False,将改变上述等待的行为,库将会丢弃最老的信息,并增加新的到队列上,继续其处理循环,maxSize决定了队列的尺寸,并会帮助控制主机内存的使用。例如一条5MB的数据,队列尺寸为30, 那么这条队列在主机中占用150MB的数据内存。

附加信息

  • maxSize=1, blocking=False, 代表仅需要队列中的最新信息
  • 队列是线性安全,可从任何线程中访问它们
  • 队列创建时,每个队列是自己的线程,负责接受、序列化、反序列化,传输信息
  • Device对象不是完全的线程安全

▌参考资料

https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/


OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态

戳「+关注」获取最新资讯↗↗

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

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

相关文章

SuperMap iPortal 与独立代理服务的 session 共享通过redis配置实现

作者:yx 文章目录前言一、支持的Tomcat系列二、使用步骤1.将 /lib 中所有的 jar 拷贝到 tomcat/lib 目录2.给 tomcat 添加一个系统环境变量 "catalina.base",变量取值为 tomcat 的根目录3、修改 redis 的相关配置4、在 【SuperMap iPortal / i…

Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

数字化时代,中小企业如何落地数字化转型

大数据时代,各行各业的行业龙头和大型集团都已经开始了数据管理,让数据成为数据资产。但是在我国,中小企业的数量巨大,很多管理者忽视了这一点,今天我们就来聊一聊中小企业的数字化转型。 中小企业需要数字化转型 首…

博客系统【前后端分离版本】

笔记【博客系统】 测试网站:小孙的博客系统 测试:admin 测试:123456 实现一个网站,有两种典型的风格: 服务器渲染客户端渲染(前后端分离) 所谓渲染,就是把一个动态页面给构造出来 页…

性能测试fangan

XX 5.0系统 性能测试方案 修订历史记录 1 项目概述 1.1 背景说明 1.2 测试目的 为保证在日常运行及大型活动期间,稳定运行、应用快速,对进行性能测试,验证系统是否能够达到业务所需的性能指标,同时发现系统中存在的性能瓶颈&a…

对辊柱塞式成型机总体设计

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1选题背景及意义 1 1.2国内外型秸秆谷物发展概况 2 1.2.1国外发展现状 2 1.2.2国内发展现状 2 1.3对辊柱塞式成型机的发展概况 6 1.3.1对辊柱塞式成型机的发展展状况 6 1.3.2对辊柱塞式成型机的成型机理 7 1.3研究主要内容 9 第二章…

UGUI性能优化学习笔记(一)网格重建

一、基本概念 在正式学习UGUI性能优化之前,需要先了解一些基本的概念 网格 无论是3D物体还是2D物体,都是由网格绘制而成。需要绘制的网格越多,性能消耗越大。 将Unity编译器调整到Wireframe模式,可以查看当前场景元素的网格组成…

冯诺依曼体系结构及操作系统的认识

目录1.前言2.冯诺依曼体系结构2.1.结构构成2.2.硬件分析2.2.1存储器的作用2.2.2CPU2.3.实际分析3.操作系统3.1.是什么3.2.为什么3.3.操作系统怎么进行管理3.3.1管理的本质3.3.2管理的方法3.4.系统调用3.5.最终体系1.前言 为什么现代计算机都被称为冯诺依曼结构计算机&#xff1…

C#运算符执行顺序对照表

C#运算符执行顺序对照表:在线查看C#运算符执行优先级别 窍门: CtrlF 快速查找 C#运算符优先级,是描述在计算机计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说…

k8s整合kong

k8s整合kong Kong网关的发展历程 ​ Kong网关起源于2007年,由Augusto、Marco、Michele三人在意大利的一个小车库中开发,当时命名为Mashup平台。在随后7年的时间里,Mashup平台逐渐占据API网关市场的主导地位。2017年10月,Mashup平台…

引擎入门 | Unity UI简介–第2部分(2)

本期我们继续为大家进行Unity UI简介(第二部分)的后续教程 本篇内容 3.动画按钮滑入 文章末尾可免费获取教程源代码 本篇本篇Unity UI简介(第二部分)篇幅较长,分为八篇,本篇为第二篇。 3.动画按钮滑入…

如何安装Torch7在Ubuntu20.04 ( CUDA10.1 和 CUDNN7.6.5)

先展示安装成果,东西没啥,就是很麻烦,特别是安装torch7库,下载不下来,断断续续的。 1. 首先,安装CUDA 10.1CUDNN7.6.5。切记:cudnn不要装cudnn8.X,好像跟torch不是很匹配。另外就是g…

省市县:数十万数据集PM2.5面板数据柵格数据(1998-2019)

1、数据来源: https://sites.wustl.edu/acag/datasets/surface-pm2-5/ 2、时间跨度:1998-2019 3、区域范围:中国各省、各城市、各区县 4、指标说明: 根据Global/Regional Estimates (V5.GL.02),计算出国内PM2.5数…

车载电子专用DC-DC方案PL5501

PL5501是一个同步4开关Buck-Boost能够调节输出电压的控制器高于或低于输入电压。PL5501运作输入电压范围从3.6 V到32 V (36 V Maximum)以支持各种应用程序。PL5501 buck采用恒ON时间控制,上位机采用升压和升压两种操作方式负荷和线路调节。开关频率可以设置为150kHz…

在字符串两侧填充指定字符ljust()与rjust()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 在字符串两侧填充指定字符 ljust()与rjust()方法 选择题 以下python代码输出正确的一项是? str"abc" print("【显示】str原始数据:") print("【执行】…

Spark框架

Spark计算速度 Hadoop的多个job之间的数据通信是基于磁盘的 Hadoop偏存储,其MR框架,是基于磁盘的计算,多个MR作业之间的数据交互,依赖于磁盘的IO,这会影响计算性能。 job1:读取磁盘文件,MR计算…

网页JS自动化脚本(三)查找定位页面元素的多种方法

当然定位元素不止一个方法,下面总结一些常用的方法 父元素定位 a.undertips-link>span我们看到父元素是第8代的a,那么先定位到a,然后再通过a定位到子元素span,可以看到1 of 1 ,匹配上了唯一的元素 祖父元素定位 div#lm-new>a>span可以看到进对第7代的div元素进行定位…

承上启下:基于全域漏斗分析的主搜深度统一粗排

1. 背景 1.1 概述 淘宝主搜索是一个典型的多阶段检索系统,主要分为召回、粗排、精排等阶段。召回阶段,由文本召回、个性化等多路召回构成,输出商品量级约10^5;粗排阶段,需要从三路召回集合中分别进行筛选&#xff0c…

[附源码]SSM计算机毕业设计校园自行车租售管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Vue 打包优化之 externals 抽离公共的第三方库

使用 vue/cli 脚手架构建的 Vue 全家桶项目,默认配置下,打包后会把 vue、vue-router、axios、vuex、element-ui、echarts 等公共库打包在一起,导致基础 chunk、vendor 包体积特别大,有时一个文件能达到 3-5MB,这会大大…