§ 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
-
选择
linux_x64
注意事项:英伟达的Jetson Nano和树莓派使用的都是博通Arm架构的芯片,不是
x64
架构。不要下载错了。目前还没有Arm架构的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)
已放弃 (核心已转储)
说明有其他脚本/上位机正在占用相机,需要将其他软件关闭,才能释放相机。