§ 1.6 OrbbecSDK-Python开发环境配置 (Ubuntu)

1. 查看USB设备列表

使用USB 3.0 Type-C数据线,将Gemini2连接到PC的USB3.0端口上。

查看设备列表

lsusb

Gemini2的设备ID:

  • VID:2bc5
  • PID:0670

Gemini2支持标准的UVC协议,因此不需要安装额外的驱动。

2. 安装依赖

安装Orbbec的依赖:

sudo apt install freeglut3
sudo apt install libudev-dev libusb-dev

Orbbec Python SDK的依赖:

sudo apt-get install libffi-dev    
sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev

3. 初始化相机USB规则

打开 01.奥比中光官方软件/Ubuntu/USB设备权限配置脚本 ,在当前路径下打开命令行。

执行USB设备号权限初始化的脚本

sudo ./install.sh 

输出日志

sudo ./install.sh 
[sudo] kyle 的密码: 
usb rules file install at /etc/udev/rules.d/99-obsensor-libusb.rules
exit

4. 下载Orbbec Python SDK

5. SDK 文件结构

解压奥比中光的Orbbec SDK Python的压缩包:

目前奥比中光的Python SDK还不支持 Python 3.10 ,如果你使用的是Ubuntu 22.04,系统默认的是 Python 3.10 ,则没有办法直接使用奥比中光的SDK。需要结合Anaconda,创建Python 3.8的虚拟环境。

注:后续操作步骤都以 python3.8 为例

点开 python3.8 文件夹

  • lib 文件夹里面存放的是库
  • Samples 是实例代码

进一步打开 lib ,里面有两个文件夹:

  • c_lib 是Orbbec SDK动态链接库

  • python_lib 是Orbbec SDK Python相关的动态链接库

6. 创建Orbbec SDK软链接

将Orbbec SDK Python压缩包里面的 c_lib 下面的动态链接库,创建软连接到 /usr/lib 文件夹下。

sudo ln -s <Python SDK绝对路径>/lib/c_lib/libOrbbecSDK.so.1.5.7 /usr/lib/
sudo ln -s <Python SDK绝对路径>/lib/c_lib/libOrbbecSDK.so.1.5 /usr/lib/
sudo ln -s <Python SDK绝对路径>/lib/c_lib/libOrbbecSDK.so /usr/lib/

示例:

sudo ln -s /home/kyle/Software/OrbbecSDK_Python/python3.8/lib/c_lib/libOrbbecSDK.so /usr/lib
sudo ln -s /home/kyle/Software/OrbbecSDK_Python/python3.8/lib/c_lib/libOrbbecSDK.so.1.5 /usr/lib
sudo ln -s /home/kyle/Software/OrbbecSDK_Python/python3.8/lib/c_lib/libOrbbecSDK.so.1.5.7 /usr/lib

7. Python动态链接库

7.1 【推荐】方法1:修改 PYTHONPATH

确定当前 python_lib 的全局路径:

pwd

输出日志:

/home/kyle/Software/OrbbecSDK_Python/python3.8/lib/python_lib

编辑 .bashrc

gedit ~/.bashrc

追加一行

export PYTHONPATH="${PYTHONPATH}:<lib的全局路径>"

示例:

export PYTHONPATH="${PYTHONPATH}:/home/kyle/Software/OrbbecSDK_Python/python3.8/lib/python_lib"

编辑好后,关闭退出。

source ~/.bashrc

7.2 方法2:手动添加系统路径

当然这个也不是必须的,也可以在示例代码头部添加增加系统路径的脚本。传入Python动态链接库的相对路径/绝对路径。

import sys
# 添加系统路径
sys.path.append("../lib/python_lib")

7.3 方法3:拷贝Python动态链接库

lib/python_lib 里面的动态链接库拷贝到案例文件夹下 Samples

8. 运行示例代码

运行其中一个示例代码,预览彩图:

python3 ColorViewer.py 

9. 报错与处理方法

9.1 创建USB设备失败 createUsbDevice

如果运行Python测试样例,出现如下报错:

[E20230424 22:42:48.181087  3795 DeviceLibusb.cpp:109] failed to open usb device  :  error: OB_USB_STATUS_ACCESS
[W20230424 22:42:48.181661  3795 EnumeratorLibusb.cpp:344] 
Execute failure! A std::exception has occurred!
	 where: 344 # createUsbDevice
	 msg: failed to open usb device  :  error: OB_USB_STATUS_ACCESS
	 type: St13runtime_error
[W20230424 22:42:48.181677  3795 EnumeratorLibusb.cpp:344] failed to create usb device at index: 0, url: 2-5.4.1-6
[I20230424 22:42:48.181694  3795 EnumeratorLibusb.cpp:352] retry to create usb device: 2-5.4.1-6
[E20230424 22:42:48.681905  3795 DeviceLibusb.cpp:109] failed to open usb device  :  error: OB_USB_STATUS_ACCESS
[W20230424 22:42:48.681970  3795 EnumeratorLibusb.cpp:344] 
Execute failure! A std::exception has occurred!
	 where: 344 # createUsbDevice
	 msg: failed to open usb device  :  error: OB_USB_STATUS_ACCESS
	 type: St13runtime_error
[W20230424 22:42:48.681988  3795 EnumeratorLibusb.cpp:344] failed to create usb device at index: 0, url: 2-5.4.1-6
[W20230424 22:42:48.682018  3795 ObException.hpp:40] usbEnumerator createUsbDevice failed!

说明没有执行初始化相机USB规则的脚本。见前面的脚本。

当然,也有单次有效的处理办法:

注:每次重启电脑/热拔插后,都得这样操作一下。

如果执行了 install.sh 则不再需要执行下面的脚本。 install.sh 是永久有效。

sudo chmod 777 /dev/bus/usb/001/*
sudo chmod 777 /dev/bus/usb/002/*

9.2 设备已经打开

如果出现如下报错:

function: b'ob_create_pipeline'
args: b''
message: b'uvc_open  path=2-5.4.1-6.0 already opened'
type: 0
status: 1
*** Aborted at 1682359887 (unix time) try "date -d @1682359887" if you are using GNU date ***
PC: @                0x0 (unknown)
*** SIGABRT (@0x3e800002b51) received by PID 11089 (TID 0x7f250e666740) from PID 11089; stack trace: ***
    @     0x7f250e442520 (unknown)
    @     0x7f250e496a7c pthread_kill
    @     0x7f250e442476 raise
    @     0x7f250e4287f3 abort
    @     0x7f250b8f67b9 google::LogMessage::Flush()
    @     0x7f250b8f688e google::LogMessage::~LogMessage()
    @     0x7f250b869b6f libobsensor::pal::UsbContext::~UsbContext()
    @     0x7f250b86fc01 std::shared_ptr<>::~shared_ptr()
    @     0x7f250e445495 (unknown)
    @     0x7f250e445610 exit
    @     0x7f250e429d97 (unknown)
    @     0x7f250e429e40 __libc_start_main
    @           0x579c8d (unknown)
已放弃 (核心已转储)

说明有其他脚本/上位机正在占用相机,需要将其他软件关闭,才能释放相机。