这一节我们通过调用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中常用的方法如下:
-
getAllAvailableDevices()
:此方法返回连接到计算机上的所有可用设备的列表。返回的列表包含设备的序列号和描述信息。from depthai import DeviceBootloader bootloader = DeviceBootloader() devices = bootloader.getAllAvailableDevices()
-
getFirstAvailableDevice()
:此方法返回第一个连接到计算机上的可用设备。返回的对象包含设备的序列号和描述信息。from depthai import DeviceBootloader bootloader = DeviceBootloader() device = bootloader.getFirstAvailableDevice()
-
getMemoryInfo(Memory memory)
:此方法返回设备中指定内存类型的信息,如空闲和总容量等。Memory
是一个枚举类型,包括INTERNAL_STORAGE
、USB_FLASH
和SPI_FLASH
等。from depthai import DeviceBootloader, Memory bootloader = DeviceBootloader() memory_info = bootloader.getMemoryInfo(Memory.INTERNAL_STORAGE)
-
getEmbeddedBootloaderVersion()
:此方法返回设备中嵌入式引导加载程序(固件)的版本号。from depthai import DeviceBootloader bootloader = DeviceBootloader() version = bootloader.getEmbeddedBootloaderVersion()
-
getVersion()
:此方法返回DepthAI设备的版本号信息。from depthai import DeviceBootloader bootloader = DeviceBootloader() version = bootloader.getVersion()
-
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
运行程序后,可以在终端中看到打印的设备信息。