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

news/2024/4/27 2:29:36/文章来源:https://blog.csdn.net/oakchina/article/details/128093736

消息快播: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 idprint('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.luyixian.cn/news_show_39075.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构初阶--栈和队列(讲解+类模板实现)

栈的概念和结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)加粗样式的原则。 入…

Redis数据结构和类型

Redis 包含五种数据类型,分别为String、List、Hash、Set、ZSet 底层实现的数据结构包SDS、双向链表、压缩列表、哈希表、整数集合、跳表 redis结构图数据类型和数据结构的关系Redis六种数据结构 一、动态字符串(SDS) Redis 是用 C 语言实现的,但是它…

在Word、WPS中插入AxMath公式导致行间距异常的解决办法

引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常,如下图所示: 查遍互联网,最有效的办法竟然要取消文档网格对齐,这对于一些严格要求的场合是非常不利的,经过我的尝试&#…

SpringBoot3.0正式发布,我来尝尝鲜

GraalVM 版本:graalvm-ce-java17-22.3.0 SpringBoot3.0 中最重要的特性就是对 GraalVM 的支持,从而达到更快的启动速度,有两种使用方式。 利用 GraalVM 构建可执行文件 因为需要利用 GraalVM 来打包可执行文件,所以需要你的机器上…

Casein-PEG-Indocyanine green 络蛋白-聚乙二醇-吲哚菁绿 Casein-ICG

产品名称:络蛋白-聚乙二醇-吲哚菁绿 英文名称:Casein-PEG-Indocyanine green 质量控制:95% 原料分散系数PDI:≤1.05 存储条件:-20C,避光,避湿 用 途:仅供科研实验使用,…

Ansible 企业级自动化运维实战

一、Ansible 简介 如果Ansible不采用0mq(ZeroMQ),在操作1000个以下的节点性能还可以,如果操作1000个以上的节点,性能就很差。 目前来说Ansible支持local,ssh,0mq,Ansible用ssh来管理被管理主机是最常见的方法。 saltstack简称salt,默认采用0mq(ZeroMQ),支持数万…

TaWRKY19/61/82激活糖转运蛋白TaSTP3从而增强小麦条锈病敏感性

文章信息 题目:Sugar transporter TaSTP3 activation by TaWRKY19/61/82 enhances stripe rust susceptibility in wheat 刊名:New Phytologist 作者:Baoyu Huai,Zhensheng Kang,Jie Liu et al. 单位:Northwest A&…

麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会

在党政及金融、交通、能源等重要行业的信创应用步伐逐步加快的背景下,各行业均面临着不同程度的国产化落地难题。11月29日下午,麒麟信安与河南省信息协会IT产业分会(河南IT联盟)携手召开《麒麟信安信创应用解决方案》线上分享会&a…

ARM汇编之乘法指令

ARM汇编之乘法指令前言 首先,请问大家几个小小问题,你清楚: 乘法指令有哪些种类呢?ARM乘法指令具体的使用场景又有哪些? 今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的…

基础知识java

1.浅克隆和深克隆?深克隆的方法 浅克隆:对象的引用变量只会拷贝地址,不会新建一个对象 深克隆:对象的引用变量也会新建一个对象 实现方式: 浅克隆:实现cloneable接口的clone方法 深克隆:实现Ser…

西门子精彩触摸屏SMART V3组态报警的具体方法示例

西门子精彩触摸屏SMART V3组态报警的具体方法示例 用户自定义报警分为离散量报警和模拟量报警。 离散量报警:离散量对应于二进制数的1位,离散量的两种相反状态可以用1位二进制数的0、1状态来表示。例如:电动机的交流接触器的接通和断开、各种故障信号的出现和消失,都可以用…

flask入门教程之请求与响应

Flask是一个轻量级的web开发框架,依赖jinja2和Werkzeug WSGI服务的一个微型框架。 官方文档:https://flask.palletsprojects.com/en/2.0.x/ 中文文档:http://docs.jinkan.org/docs/flask/ 中文文档的版本会比较低,如果英语OK的话&…

22年-自研-面试题

目录背景题目Activiti回退功能条件分支功能,并行网关、包含网关有没有用到流程流转中,需知会其他人,这些人需同意/做处理(有点流程的感觉),最后所有的意见都要汇总。你的实现思路Redis哪些数据结构&#xf…

【毕业设计】15-基于单片机的交通灯系统设计(原理图+仿真+论文)

【毕业设计】15-基于单片机的交通灯系统设计(原理图、仿真、源代码工程答辩论文答辩PPT) 文章目录【毕业设计】15-基于单片机的交通灯系统设计(原理图、仿真、源代码工程答辩论文答辩PPT)任务书设计说明书摘要设计框架架构设计说明…

【Rust日报】2022-11-29 Wirefish:基于 Tauri 的跨平台数据包嗅探器

Wirefish:基于 Tauri 的跨平台数据包嗅探器作者 stefanodevenuto 通过 Rust Tauri 实现,构建了一个类似 Wireshark 的跨平台数据包嗅探器。这个应用离生产阶段当然还很远,功能和页面上还有很多改善的空间,但是代码组织良好&#…

基于 Hive 的 Flutter 文档类型存储

基于 Hive 的 Flutter 文档类型存储 原文 https://medium.com/gytworkz/document-type-storage-in-flutter-using-hive-a18ea9659d84 前言 长久以来,我们一直使用共享首选项以键对格式在本地存储中存储数据,或者使用 SQLite 在 SQL 数据库中存储数据。 存…

【收藏】安科瑞企业微电网能效管理系统云平台演示账号

安科瑞 李亚俊 Acrel8757 1、AcrelCloud-1000变电所电力运维云平台 网址:https://acrelcloud.cn/ 演示账号:acrel 密码:123456 2、SCADA电力监控系统 网址:http://scada.acrel-eem.com/ 演示账号:acrel 密码:…

Android——使用ContentProvider共享数据

实验名称: 使用ContentProvider共享数据 实验目的: (1)能使用ContentProvider共享数据 (2)能使用内容观察者观察其他程序的数据变化 实验内容及原理&…

Kamiya丨Kamiya艾美捷小鼠血红蛋白ELISA说明书

Kamiya艾美捷小鼠血红蛋白ELISA预期用途: 小鼠血红蛋白ELISA是一种高灵敏度的双位点酶联免疫分析(ELISA)小鼠生物样品中血红蛋白的测定。仅供研究使用。 引言 血红蛋白(HM)是红细胞中的含铁氧转运蛋白。它吸收肺部的…

第10讲:Python列表对象查操作之通过切片获取列表中的元素

文章目录1.切片获取列表中的技术要点1.1切片获取列表中的概念总结1.2.切片的语法格式以及含义3.使用切片方法获取列表中元素3.1.定义一个原始列表列表3.2.当step步长为正数时切片的案例3.3.当step步长为负数时切片的案例3.4.使用负数索引作为切片范围4.将切片后的列表赋值给新的…