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

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

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

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

猜你喜欢

转载自blog.csdn.net/w137160164/article/details/131484700
今日推荐