DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.

手动安装 DepthAI

本指南将介绍设置 OAK 相机和 DepthAI 库的第一步。
  1. 安装依赖项
  2. 安装 DepthAI
  3. 运行 OAK Viewer

Ubuntu/Debian

执行以下命令安装所需依赖项:
Command Line
1sudo wget -qO- https://docs.luxonis.com/install_dependencies.sh | bash
这将执行以下操作:
  • 执行 apt update 和 apt upgrade
  • 安装 python3、pip3、cmake、git、udev(如果尚未安装)
  • 安装其他依赖项,如 libusb、libudev 等

MacOS

执行以下命令安装所需依赖项:
Command Line
1curl -fL https://docs.luxonis.com/install_dependencies.sh | bash
这将执行以下操作:
  • 安装 brew 和 git(如果尚未安装)

Windows 10/11

您可以通过 Windows 安装程序 或使用 Chocolatey 包管理器手动安装所需组件:

通过 Chocolatey 安装

要安装 Chocolatey 并使用它来安装 DepthAI 的依赖项,请执行以下操作:
  • 右键单击“开始”
  • 选择“Windows PowerShell (管理员)”并运行以下命令:
Powershell
1Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  • 关闭 PowerShell,然后通过重复前两个步骤重新打开另一个 PowerShell(管理员)。
  • 安装 Python 和 PyCharm
Powershell
1choco install cmake git python pycharm-community -y

Windows 7

虽然我们不官方支持 Windows 7,但社区成员已通过使用 Zadig 手动安装 WinUSB 取得了成功。连接 DepthAI 设备后,查找 USB ID 为 03E7 2485 的设备,并通过选择 WinUSB(v6.1.7600.16385) 然后点击 Install WCID Driver 来安装 WinUSB 驱动程序。

Docker

我们在 Docker Hub 的 luxonis/depthai-library repository 中维护了一个包含 DepthAI、其依赖项和有用工具的 Docker 镜像。该镜像基于 luxonis/depthai-base 镜像构建。在 Linux 主机(使用 X11 窗口系统)上的 Docker 容器中运行 rgb_preview.py 示例:
Command Line
1docker pull luxonis/depthai-library
2docker run --rm \
3    --privileged \
4    -v /dev/bus/usb:/dev/bus/usb \
5    --device-cgroup-rule='c 189:* rmw' \
6    -e DISPLAY=$DISPLAY \
7    -v /tmp/.X11-unix:/tmp/.X11-unix \
8    luxonis/depthai-library:latest \
9    python3 /depthai-python/examples/ColorCamera/rgb_preview.py
要允许容器更新 X11,您可能需要在主机上运行 xhost local:root

WSL 2

以下步骤是在运行 Ubuntu 20.04 的 WSL 2 上执行的,主机运行的是 Win10 20H2(OS build 19042.1586)。原始教程由 SputTheBot 编写在此处要让 OAK 在 WSL 2 上运行,您首先需要将 USB 设备附加到 WSL 2。我们使用了 usbipd-win (2.3.0) 来实现。在 WSL 2 内部,您还需要安装 depthai 依赖项(Ubuntu/Debian)和 USB/IP 客户端工具(2 条命令)。要将 OAK 相机附加到 WSL 2,我们准备了以下 Python 脚本,您需要在主机计算机(管理员模式)上执行该脚本。
Python
1import time
2import os
3while True:
4    output = os.popen('usbipd wsl list').read() # 列出所有 USB 设备
5    rows = output.split('\n')
6    for row in rows:
7        if ('Movidius MyriadX' in row or 'Luxonis Device' in row) and 'Not attached' in row: # 检查未附加的 OAK 相机
8            busid = row.split(' ')[0]
9            out = os.popen(f'usbipd wsl attach --busid {busid}').read() # 附加 OAK 相机
10            print(out)
11            print(f'Usbipd attached Myriad X on bus {busid}') # 日志
12    time.sleep(.5)
之后,您可以在 WSL 2 内部检查 lsusb 命令,应该能够看到 Movidius MyriadX如果您想使用 usbipd-win >= 4.0,则 usbipd wsl 命令不再可用,因此您需要使用另一个脚本,该脚本最初由 kazuya 编写在此处
Python
1import time
2import subprocess
3
4while True:
5    output = subprocess.run('usbipd list', capture_output=True, encoding="UTF-8")
6    rows = output.stdout.split('\n')
7    for row in rows:
8        if ('Movidius MyriadX' in row or 'Luxonis Device' in row) and 'Not shared' in row:
9            busid = row.split(' ')[0]
10            out = subprocess.run(f'usbipd bind -b {busid}', capture_output=True, encoding="UTF-8")
11            print(out.stdout)
12            print(f'Usbipd bind Myriad X')
13        if ('Movidius MyriadX' in row or 'Luxonis Device' in row) and 'Shared' in row:
14            busid = row.split(' ')[0]
15            out = subprocess.run(f'usbipd attach -w -b {busid}', capture_output=True, encoding="UTF-8")
16            print(out.stdout)
17            print(f'Usbipd attached Myriad X on bus {busid}')
18    time.sleep(0.5)

OpenSUSE

对于 openSUSE,可在这篇官方文章中找到如何在 openSUSE 平台上安装 OAK 设备的信息。

内核虚拟机 (KVM)

要在内核虚拟机中访问 OAK-D 摄像头,需要在宿主机检测到 USB 总线变化时,动态地挂载和卸载 USB 设备。当 DepthAI API 使用 OAK-D 摄像头时,它会更改 USB 设备类型。这在本地使用摄像头时会在后台自动发生。但在虚拟环境中使用时,情况则不同。在宿主机上,使用以下代码:
Text
1SUBSYSTEM=="usb", ACTION=="bind", ENV{ID_VENDOR_ID}=="03e7", MODE="0666", RUN+="/usr/local/bin/movidius_usb_hotplug.sh depthai-vm"
2SUBSYSTEM=="usb", ACTION=="remove", ENV{PRODUCT}=="3e7/2485/1", ENV{DEVTYPE}=="usb_device", MODE="0666", RUN+="/usr/local/bin/movidius_usb_hotplug.sh depthai-vm"
3SUBSYSTEM=="usb", ACTION=="remove", ENV{PRODUCT}=="3e7/f63b/100", ENV{DEVTYPE}=="usb_device", MODE="0666", RUN+="/usr/local/bin/movidius_usb_hotplug.sh depthai-vm"
udev 规则调用的脚本(movidius_usb_hotplug.sh)随后应将 USB 设备挂载/卸载到虚拟机。在这种情况下,我们需要调用 virsh 命令。例如,脚本可以执行以下操作:
Text
1#!/bin/bash
2# 发生错误时中止脚本执行
3set -e
4if [ "${ACTION}" == 'bind' ]; then
5  COMMAND='attach-device'
6elif [ "${ACTION}" == 'remove' ]; then
7  COMMAND='detach-device'
8  if [ "${PRODUCT}" == '3e7/2485/1' ]; then
9    ID_VENDOR_ID=03e7
10    ID_MODEL_ID=2485
11  fi
12  if [ "${PRODUCT}" == '3e7/f63b/100' ]; then
13    ID_VENDOR_ID=03e7
14    ID_MODEL_ID=f63b
15  fi
16else
17  echo "无效的 udev ACTION: ${ACTION}" >&2
18  exit 1
19fi
20echo "正在对 ${DOMAIN} 执行 virsh ${COMMAND},设备为 ${ID_VENDOR}。" >&2
21virsh "${COMMAND}" "${DOMAIN}" /dev/stdin <<END
22<hostdev mode='subsystem' type='usb'>
23  <source>
24    <vendor id='0x${ID_VENDOR_ID}'/>
25    <product id='0x${ID_MODEL_ID}'/>
26  </source>
27</hostdev>
28END
29exit 0
请注意,当设备从 USB 总线断开时,某些 udev 环境变量不可用(例如 ID_VENDOR_IDID_MODEL_ID),因此您需要使用 PRODUCT 环境变量来识别哪个设备已断开。运行 DepthAI API 应用的虚拟机应定义一条识别 OAK-D 摄像头的 udev 规则。该 udev 规则在此处描述。

VMware

在 VMware 中使用 OAK-D 设备需要一些额外的一次性设置才能正常工作。首先,确保 USB 控制器从 USB2 切换为 USB3。进入 虚拟机设置 -> USB 控制器 -> USB 兼容性,将其更改为 USB 3.1(或根据可用选项,旧版 VMware 选择 USB 3.0)。根据设备状态,可能会显示两个设备,这两个设备都需要路由到虚拟机。它们可以在 播放器 -> 可移动设备 中看到:
  • Intel Movidius MyriadX
  • Intel VSC 环回设备 或 Intel Luxonis 设备
在 Linux 操作系统中,运行以下命令为普通用户授予 USB 权限:
Command Line
1echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules
2sudo udevadm control --reload-rules && sudo udevadm trigger
如果虚拟机未检测到设备,请尝试以下操作:找到并选择类似 忘记连接规则 的选项(针对两个设备),然后在虚拟机内再次运行 DepthAI 示例。选择路由到虚拟机,并选择 不再询问 (这很重要,因为存在超时,如果宿主机未在几秒内开始通信,设备看门狗可能会触发)。您可能需要重复运行几次脚本,直到所有设置正确适用于 VMware。

VirtualBox

如果要使用 VirtualBox 运行 DepthAI 源代码,请确保允许虚拟机访问 USB 设备。此外,请注意,默认情况下,VirtualBox 仅支持 USB 1.1 设备,而 DepthAI 分两个阶段运行:
  1. 当插入时显示。我们使用此端点将固件加载到设备上,这是一种 USB 启动技术。此设备为 USB2。
  2. 用于运行实际代码。在 USB 启动后显示,为 USB3。
为了支持 DepthAI 模式,您需要下载并安装 Oracle VM VirtualBox 扩展包。安装完成后,在 USB 设置中启用 USB3(xHCI)控制器。完成此操作后,您需要将 Myriad 作为 USB 设备从宿主机路由到 VirtualBox。这是深度设备在启动前的过滤器,此时它是一个 USB2 设备:将未启动的深度设备路由到 VirtualBox
将未启动的深度设备路由到 VirtualBox
最后一步是添加 USB Intel 环回设备。深度设备通过 USB 启动其固件,启动后会显示为一个新设备。该设备仅在深度设备/OAK 尝试重新连接时显示(在运行时,即运行深度设备管道后立即显示,例如 python3 depthai_demo.py)。可能需要尝试几次才能让该环回设备显示并添加,因为您需要在深度设备在管道构建后尝试连接时执行此操作(此时它已通过 USB2 启动了内部固件)。如果只想启用一次,您可以在以下位置看到环回设备(在管道启动后):在您告诉深度设备启动管道后立即找到环回设备,并选择它。
在您告诉深度设备启动管道后立即找到环回设备,并选择它。
然后,为了永久启用此直通到 VirtualBox,请在以下设置中启用: 为深度设备/OAK 制作 USB 环回设备,以允许启动后的设备在 VirtualBox 中通信为深度设备/OAK 制作 USB 环回设备,以允许启动后的设备在 VirtualBox 中通信
为深度设备/OAK 制作 USB 环回设备,以允许启动后的设备在 VirtualBox 中通信
然后,对于每个要传递的额外深度设备/OAK 设备,只需为每个单元重复此最后的环回设置步骤(因为每个单元都有自己的唯一 ID)。
安装 depthai 依赖项后,您可以参考 depthai-core 进行 C++ 开发,或通过 PyPi 下载 depthai Python 库:
Command Line
1python3 -m pip install depthai

测试安装

我们有一套示例,可以帮助您验证设置是否正确。首先,克隆 depthai-python 仓库并进入该目录:
Command Line
1git clone https://github.com/luxonis/depthai-python.git
2cd depthai-python
接下来,安装此仓库的依赖项。 请注意,我们建议在虚拟环境中安装这些依赖项,以免它们干扰系统上的其他 Python 工具/环境。
  • 对于开发机器(如 Mac/Windows/Ubuntu 等),我们推荐使用 PyCharm IDE,因为它能自动创建/管理虚拟环境,并带来许多其他好处。或者,也可以直接使用 condapipenvvirtualenv(以及你偏好的 IDE)。
  • 对于资源受限的系统(如 Raspberry Pi 或其他小型 Linux 系统),我们推荐使用 condapipenvvirtualenv。如果要使用 virtualenv 设置虚拟环境,请运行 virtualenv venv && source venv/bin/activate
在虚拟环境(或系统全局环境,如果你愿意)中,运行以下命令来安装此示例仓库的依赖项:
Command Line
1cd examples
2python3 install_requirements.py
现在,从 examples 目录中运行 rgb_preview.py 脚本,以确保一切正常:
Command Line
1python3 ColorCamera/rgb_preview.py
如果一切顺利,会显示一个小窗口视频。下方是一个示例:

运行其他示例

运行完此示例后,你可以运行其他示例来了解 DepthAI 的各种可能性。你也可以继续:
  • 我们的教程,从 Hello World 教程开始,逐步解释 API 的使用方法(这里
  • 我们的示例,包含 DepthAI 上各种用户用例的实现(这里
你也可以继续往下学习如何将自己的神经网络转换为在 DepthAI 上运行。我们还提供了下面的在线模型训练内容,演示如何训练和转换适用于 DepthAI 的模型:
OAK Viewer 是 DepthAI 和 OAK 相机的可视化工具。它是一个 GUI 应用,默认会运行一个演示程序,可视化所有流并在设备上运行推理。它还允许你更改设备的配置。DepthAI Viewer 支持 USB 和 POE 相机。更多信息请参见 这里