一步一步学OAK之十四: 获取OAK设备信息

news2024/11/17 6:29:44

这一节我们通过调用DepthAI API 来获取OAK设备信息

目录

  • DeviceBootloader简介
  • 获取OAK设备信息的方法
    • Setup 1: 创建文件
    • Setup 2: 安装依赖
    • Setup 3: 导入需要的包
    • Setup 4: 获取可用设备
    • Setup 5: 判断infos的长度
    • Setup 6: 遍历infos
    • Setup 7: 打印提示消息
    • Setup 8: 连接设备
    • Setup 9:运行程序

DeviceBootloader简介

DepthAI API中的DeviceBootloader是一个用于与引导加载程序通信的类。它用于烧录创建的Pipeline、depthai应用程序包或更新引导加载程序本身。
DeviceBootloader中常用的方法如下:

  1. getAllAvailableDevices():此方法返回连接到计算机上的所有可用设备的列表。返回的列表包含设备的序列号和描述信息。

    from depthai import DeviceBootloader
    
    bootloader = DeviceBootloader()
    devices = bootloader.getAllAvailableDevices()
    
  2. getFirstAvailableDevice():此方法返回第一个连接到计算机上的可用设备。返回的对象包含设备的序列号和描述信息。

    from depthai import DeviceBootloader
    
    bootloader = DeviceBootloader()
    device = bootloader.getFirstAvailableDevice()
    
  3. getMemoryInfo(Memory memory):此方法返回设备中指定内存类型的信息,如空闲和总容量等。Memory是一个枚举类型,包括INTERNAL_STORAGEUSB_FLASHSPI_FLASH等。

    from depthai import DeviceBootloader, Memory
    
    bootloader = DeviceBootloader()
     
    memory_info = bootloader.getMemoryInfo(Memory.INTERNAL_STORAGE)
    
  4. getEmbeddedBootloaderVersion():此方法返回设备中嵌入式引导加载程序(固件)的版本号。

    from depthai import DeviceBootloader
    
    bootloader = DeviceBootloader()
    version = bootloader.getEmbeddedBootloaderVersion()
    
  5. getVersion():此方法返回DepthAI设备的版本号信息。

    from depthai import DeviceBootloader
    
    bootloader = DeviceBootloader()
    version = bootloader.getVersion()
    
  6. isClosed():此方法返回一个布尔值,指示DeviceBootloader对象是否已关闭。一旦关闭,DeviceBootloader对象将不再可用,并且需要创建一个新的对象来进行操作。

    from depthai import DeviceBootloader
    
    bootloader = DeviceBootloader()
     
    is_closed = bootloader.isClosed()
    

    获取OAK设备信息的方法

Setup 1: 创建文件

  • 创建新建device-information文件夹
  • 用vscode打开该文件夹
  • 新建一个main.py 文件

Setup 2: 安装依赖

安装依赖前需要先创建和激活虚拟环境,我这里已经创建了虚拟环境OAKenv,在终端中输入cd…退回到OAKenv的根目录,输入 OAKenv\Scripts\activate激活虚拟环境

安装pip依赖项:

pip install numpy opencv-python depthai blobconverter --user

Setup 3: 导入需要的包

在main.py中导入项目需要的包

import depthai as dai
from typing import List

这里从 Python 的 typing 模块中导入 List 类,typing模块中的List是用于对列表类型进行类型注释的工具。它是Python类型提示的一部分,用于在静态类型检查工具(如mypy)中对代码进行类型检查。

List是一个泛型(generic)类型,用于表示包含相同类型元素的可变序列。在类型提示中,你可以使用List来指定列表的元素类型。例如,List[int]表示整数类型的列表,List[str]表示字符串类型的列表。

Setup 4: 获取可用设备

print('Searching for all available devices...\n') 
infos: List[dai.DeviceInfo] = dai.DeviceBootloader.getAllAvailableDevices()

将调用depthai库中的DeviceBootloader.getAllAvailableDevices()方法,并将返回的设备信息存储在名为infos的列表变量中。这里的infos是一个List类型的变量,每个元素是一个DeviceInfo对象,包含有关设备的详细信息。

要使用设备信息,可以通过遍历infos列表来访问每个设备的属性和方法。例如,可以通过以下方式打印出每个设备的ID和连接类型:

for info in infos:
    print("Device ID:", info.getMxId()) 
    print()

这将遍历infos列表中的每个DeviceInfo对象,并打印出设备的ID

Setup 5: 判断infos的长度

if len(infos) == 0:
    print("Couldn't find any available devices.")
    exit(-1)

这段代码用于检查是否找到了可用设备。它使用了len(infos)来获取设备信息列表infos的长度,并与0进行比较。

如果设备信息列表的长度为0,即没有找到可用设备,那么代码会打印出一条消息:“Couldn’t find any available devices.”,并调用exit(-1)退出程序。

这段代码可以用来确保找到至少一个可用设备,然后才能继续后续的操作。如果没有找到可用设备,则可以根据具体情况采取适当的处理措施,例如提示用户检查设备连接或选择其他设备等。

Setup 6: 遍历infos

for info in infos: 
    state = str(info.state).split('X_LINK_')[1]

    print(f"Found device '{info.name}', MxId: '{info.mxid}', State: '{state}'")

遍历infos列表中的每个DeviceInfo对象,并打印出找到的设备的名称、MxId和状态信息。

在循环的每次迭代中,代码首先将设备状态转换为字符串类型,并使用split()方法将其拆分为X_LINK_之后的部分,赋值给变量state。这样做是为了获取设备状态的简洁表示,去除了前缀。

Setup 7: 打印提示消息

print(f"\nBooting the first available camera ({infos[0].name})...")

打印出一个提示消息,指示正在启动第一个可用摄像头。使用print()函数来打印字符串。字符串中使用了f-string来方便地格式化字符串,并使用花括号{}来插入表达式。字符串中插入了一个表达式infos[0].name,该表达式取出设备信息列表infos中的第一个设备的名称,并将其插入到字符串中。

Setup 8: 连接设备

with dai.Device(dai.Pipeline(), infos[0], usb2Mode=False) as device:
    print("Available camera sensors: ", device.getCameraSensorNames())
    calib = device.readCalibration()
    eeprom = calib.getEepromData()
    print(f"Product name: {eeprom.productName}, board name {eeprom.boardName}")

使用depthai库连接到设备的第一个可用摄像头。

使用with语句创建一个dai.Device对象,并将其与指定的设备信息infos[0]以及usb2Mode参数一起传递给Pipeline。

使用print()函数打印出设备的相机传感器名称,调用device.getCameraSensorNames()方法可以获获取连接到设备的相机的传感器名称。

使用device.readCalibration()方法读取设备的校准数据,并将其赋值给变量calib

通过访问calib对象的getEepromData()方法,获取设备的EEPROM数据,并将其赋值给变量eeprom

使用print()函数打印出产品名称和主板名称。使用f-string来格式化字符串,并插入eeprom对象的属性值。

Setup 9:运行程序

在终端中输入如下指令运行程序

python main.py

运行程序后,可以在终端中看到打印的设备信息。
在这里插入图片描述

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

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

相关文章

html_4——知识总结

html_4——知识总结 一、计算机基础知识二、html4总结2.1 html基本结构2.2 全局属性-id,class,style,dir,title,lang2.3 格式排版标签-div,p,h1-h6,br,hr,pre2.4 文本标签-span,en,strong,del,ins,sub,sup2.5 图片标签-img:src,alt,width,height,boder2.6 超链接-a:herf,target…

内部函数和外部函数

文章目录 怎么来的?内部函数外部函数明确一下内外的概念:外部函数的实例fgets()函数 怎么来的? 函数本质上是全局的,因为定义一个函数的目的就是这个函数与其他函数之间相互调用,如果不声明的话,一个函数既…

YouTube正测试屏蔽“广告拦截器”,以确保其广告收入

YouTube目前正在进行一项全球范围内的小规模测试,警告用户关掉他们的广告屏蔽器,否则将被限制观看视频的次数。 周三(6月28日),Reddit的一位用户发现,在使用YouTube时弹出了一个窗口,提示该用户…

Cali3F: Calibrated Fast Fair Federated Recommendation System

Decentralized Collaborative Learning Framework for Next POI Recommendation 标定的(校准的)快速公平联邦推荐系统 1. What does literature study? 提出一个经过校准的快速而公平的联邦推荐框架Cali3F,通过集群内参数共享解决了收敛问…

创新引领未来:RFID技术在汽车装配中的智能革命

射频识别(RFID)技术作为一种自动识别技术,已经在许多领域得到广泛应用。在汽车装配领域,RFID技术的应用可以提高装配过程的效率、降低人工错误率,并帮助实现自动化和智能化生产。本文将介绍RFID技术在汽车装配中的应用…

动态二维码生成器PHP Dynamic QRcode

什么是 PHP Dynamic QRcode ? PHP Dynamic QRcode 是一个允许生成和保存动态和静态二维码(QR码)的应用。它具有简洁、响应灵敏且用户友好的设计。其中包含您网站中可能需要的一般功能,如:记录管理(CRUD&…

【2023,学点儿新Java-27】是的——C语言中的const关键字 | 附:按照类型 快速了解与划分:C语言中的关键字 | goto关键字解释

前情回顾: 【2023,学点儿新Java-26】关键字介绍示例代码:assert 断言(如何启用断言),以 验证一个数组的长度是否不为零 为例说明【2023,学点儿新Java-25】如何解决浮点计算存在误差&#xff1a…

Selenium Grid入门详解

目录 前言: 一、简介 二、使用场景 三、使用前提 四、使用方式 五、实现在另一台电脑运行脚本 前言: Selenium Grid是一个用于分布式测试的工具,它允许同时在多个机器上执行Selenium测试。通过使用Selenium Grid,你可以在不…

Linux系统Centos7 安装MySQL8.0详细步骤

MySql安装 1.下载wget命令 yum -y install wget 2. 在线下载mysql安装包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm 3.MySQL的GPG升级了,需要更新,如果是新安装的MySQL,执行以下脚本即可&#xff1…

Vite + Vue3 + Electron实现进程通信

Vite Vue3 Electron实现进程通信 实现 渲染进程 / 主进程 通信(IPC) Electron 是一个基于 Chromium 和 Node.js 的桌面应用程序开发框架,而 Vue3 则是一种流行的前端框架。将两者结合使用可以快速地打造出跨平台的桌面应用程序。在这种组…

Sui x KuCoin Labs夏季黑客松第三批入围项目公布

自Sui x KuCoin Labs夏季黑客松开放注册以来,已收获了众多开发者的报名参与。赛程过半,截至目前为止,第一批和第二批入围项目已在前两周公布,第三批入围名单项目新鲜出炉,进入最终的Demo Day。 第三批入围名单 SuiVi…

在 Linux 中查找 IP 地址的 3 种简单方法

在 Linux 系统中,经常需要查找 IP 地址以进行网络配置、故障排除或安全管理。无论是查找本地主机的 IP 地址还是查找其他设备的 IP 地址,本文将介绍三种简单的方法,帮助你在 Linux 中轻松找到所需的 IP 地址。 总结 通过上述三种简单的方法&…

自动化测试进阶之路(WEB自动化二)

一、设计模式 Pom模块关键字驱动模式 pom模块:page object model 页面对象模式好处: 解决线性脚本的问题解决代码不能重复利用的问题后期的维护问题 分三层(页面对象层调用基础层的方法,测试用例层调用页面对象层的方法&#xff0…

Spring Boot 有哪些方式可以实现热部署

一、什么是热部署? 释义 所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。 对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着…

EasyDSS视频直播点播平台视频回看列表显示为ID的排查与优化

视频直播点播EasyDSS平台具备灵活的视频能力,包括直播、点播、转码、管理、录像、检索、时移回看等,平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等能力服务,可应用在无人机推流、在线直播、虚拟直播、远程培训等场景中。…

String面试

以下讨论以jdk8为标准: String Pool:字符串常量池 存储字面量位于堆中,不在元空间intern()方法会去常量池找,没有的话就创建一个,返回常量池中的地址;有的话就直接返回对象地址 new String(“”)方法强制创…

3.Hive SQL数据定义语言(DDL)

1. 数据定义语言概述 1.1 常见的开发方式 (1) Hive CLI、Beeline CLI Hive自带的命令行客户端 优点:不需要额外安装 缺点:编写SQL环境恶劣,无有效提示,无语法高亮,误操作率高 (2&…

IMX6ULL系统移植篇-uboot的配置与编译

一. 编译 uboot简介 开发板的资源 :256MB(DDR3) 512MB(NAND)核心板 这里使用的是阿尔法开发板,256MB的 DDR,核心板是 512MB的 Nand-Flash。 二. 编译 uboot 创建 /uboot/alientek_uboot 目录文件,将正点原子提供的 uboot源码包…

chatgpt赋能python:如何将Python图形居中

如何将Python图形居中 介绍 在Python编程中,绘图是非常重要的环节。无论是作为数据可视化的一部分,还是作为界面设计的基础,具有图形界面的Python应用程序都需要在屏幕上将图形元素居中。然而,很多新手在实现图形居中时往往会遇…

常州工学院计算机组成原理2022-2023第一学期补考

一、简答题(共30分,每题6分) 1、以将指令地址码指示的存储单元中的操作数取出后送至运算器的ACC中为例,完成一条指令的信息流程。 2、什么是RISC?请简述它的主要特点。比较RISC和CISC的异同之处。 RISC全称Reduced Instruction …