本文档主要介绍 Orbbec SDK Python Wrapper 的功能,Orbbec SDK Python Wrapper 基于 Orbbec SDK 进行设计封装,主要实现数据流接收,设备指令控制。
git clone https://github.com/orbbec/pyorbbecsdk.git
pip3 install -r requirements.txt
这里假定你已经正确的安装了 python3,如果没有安装 python3,可以参考python 官网 选择你的 python3 版本进行安装。
这里假定你已经正确的安装了 cmake, 如果没有安装 cmake,可以参考cmake 官网
方法一:通过 cmake,点击“Open Project”按钮,打开 Visual Studio 工程
方法二:通过文件夹,build 中的 Visual Studio 工程直接启动,如下图所示:
右键点击 pyorbbecsdk 编译,如下图所示:
鼠标右键点击 INSTALL,如下图所示:
编译好的文件会拷贝到 install/lib 目录下,如下图所示:
在 examples 目录执行python color_viewer.py
等测试例子,如下图所示:
git clone https://github.com/orbbec/pyorbbecsdk.git
sudo apt-get install python3-dev python3-venv python3-pip python3-opencv
cd pyorbbecsdk
# Strongly recommended create virtual environment.
python3 -m venv ./venv
source venv/bin/activate # activate virtual environment
pip3 install -r requirements.txt
mkdir build
cd build
cmake -Dpybind11_DIR=`pybind11-config --cmakedir` ..
make -j4
make install
cd pyorbbecsdk
# set PYTHONPATH environment variable to include the lib directory in the install directory
export PYTHONPATH=$PYTHONPATH:$(pwd)/install/lib/
# install udev rules
sudo bash ./scripts/install_udev_rules.sh
sudo udevadm control --reload-rules && sudo udevadm trigger
# run examples
python3 examples/depth_viewer.py
首先我们需要创建一个 Pipeline,通过 Pipeline 可以很容易的打开和关闭多种类型的流并获取一组帧数据。
from pyorbbecsdk import *
config = Config()
pipeline = Pipeline()
获取 Depth 相机的所有流配置,找到对应分辨率、格式、帧率的 profile
profile_list = pipeline.get_stream_profile_list(OBSensorType.DEPTH_SENSOR)
depth_profile = profile_list.get_video_stream_profile(640, 0, OBFormat.Y16, 30)
通过创建 Config 开启视频流,这里将启用 Depth 流
config.enable_stream(depth_profile)
pipeline.start(config)
以阻塞的方式等待一帧数据,该帧是一个复合帧,里面包含配置里启用的所有流的帧数据,并设置帧的等待超时时间为 100ms
frames = pipeline.wait_for_frames(100)
depth_frame = frames.get_depth_frame()
停止 Pipeline,将不再产生帧数据
pipeline.stop()
from pyorbbecsdk import *
self.context = Context()
device_list = self.context.query_devices()
from pyorbbecsdk import *
# ...
device = device_list[0]
sensor_list = device.get_sensor_list()
from pyorbbecsdk import *
# ...
device_info = self.device.get_device_info()
device_name = device_info.get_name()
device_pid = device_info.get_pid()
serial_number = device_info.get_serial_number()
# ...
from pyorbbecsdk import *
# ...
auto_exposure = True
device.set_bool_property(OBPropertyID.OB_PROP_COLOR_AUTO_EXPOSURE_BOOL, auto_exposure)
from pyorbbecsdk import *
# ...
device.set_bool_property(OBPropertyID.OB_PROP_COLOR_AUTO_EXPOSURE_BOOL, False)
curr_color_exposure = device.get_int_property(OBPropertyID.OB_PROP_COLOR_EXPOSURE_INT)
color_exposure = curr_color_exposure + 1
device.set_int_property(OBPropertyID.OB_PROP_COLOR_EXPOSURE_INT, color_exposure)
# ...
from pyorbbecsdk import *
# ...
device.set_bool_property(OBPropertyID.OB_PROP_COLOR_AUTO_EXPOSURE_BOOL, False)
curr_color_gain = device.get_int_property(OBPropertyID.OB_PROP_COLOR_GAIN_INT)
color_gain = curr_color_gain + 1
device.set_int_property(OBPropertyID.OB_PROP_COLOR_GAIN_INT, color_gain)
# ...
from pyorbbecsdk import *
# ...
mirror = True
device.set_bool_property(OBPropertyID.OB_PROP_COLOR_MIRROR_BOOL, mirror)
# ...
from pyorbbecsdk import *
# ...
laser = True
device.set_bool_property(OBPropertyID.OB_PROP_LASER_BOOL, laser)
# ...
from pyorbbecsdk import *
# ...
ldp = True
device.set_bool_property(OBPropertyID.OB_PROP_LDP_BOOL, ldp)
# ...
from pyorbbecsdk import *
# ...
soft_filter = True
device.set_bool_property(OBPropertyID.OB_PROP_DEPTH_SOFT_FILTER_BOOL, soft_filter)
# ...
from pyorbbecsdk import *
# ...
device.reboot()
请参考源码包examples
目录下的例子和tests
目录下的测试用例
Q: 为什么我在 Jetson nano 运行python3 examples/depth_viewer.py
时,会出现如下错误?
illegal instruction (core dumped)
A: 检查你的 opencv,如果直接运行
import cv2
在启动 Python 之前,导出 OPENBLAS_CORETYPE=ARMV8(或任何实际的硬件)应该有希望解决这个问题。比如说:
OPENBLAS_CORETYPE=ARMV8 python
如果你想让这个输出永久化,你应该在终端上输入.bashrc 文件,打开它:
nano ~/.bashrc
并在文件的末尾添加以下一行:
export OPENBLAS_CORETYPE=ARMV8
关于如何解决这个问题,请参考这里
的更多信息。
Q: 运行python3 examples/depth_viewer.py
时,会出现如下错误?
- msg:failed to open usb device! error: OB_USB_STATUS_ACCESS
- type:St13runtime_error
[2023-07-04 17:09:19.891859][warning][117523][EnumeratorLibusb.cpp:342] failed to create usb device at index: 1, url:2-1.4.1-6
[2023-07-04 17:09:20.391989][error][117523][DeviceLibusb.cpp:109] failed to open usb device! error: OB_USB_STATUS_ACCESS
[2023-07-04 17:09:20.392032][warning][117523][EnumeratorLibusb.cpp:342] Execute failure! A std::exception has occurred!
- where:342#createUsbDevice
- msg:failed to open usb device! error: OB_USB_STATUS_ACCESS
- type:St13runtime_error
[2023-07-04 17:09:20.392057][warning][117523][EnumeratorLibusb.cpp:342] failed to create usb device at index: 1, url:2-1.4.1-6
[2023-07-04 17:09:20.392072][warning][117523][ObException.hpp:40] usbEnumerator createUsbDevice failed!
Traceback (most recent call last):
File "depth_viewer.py", line 73, in <module>
main()
File "depth_viewer.py", line 34, in main
device: Device = device_list.get_device_by_index(0)
pyorbbecsdk.OBError: usbEnumerator createUsbDevice failed!
[2023-07-04 17:09:20.403747][info][117523][Context.cpp:81] Context destroyed
A: 当前设备没有权限访问,需要添加 udev 规则,以便让当前用户有权限访问。
lsusb | grep 2bc5
你的设备 pid 应该是your_pid_here
Bus 002 Device 007: ID 2bc5:your_pid_here
编辑/etc/udev/rules.d/99-obsensor-libusb.rules
文件,添加如下内容
SUBSYSTEM=="usb", ATTR{idProduct}=="your_pid_here", ATTR{idVendor}=="2bc5", MODE:="0666", OWNER:="root" GROUP:="video", SYMLINK+="you_device_name_here"
you_device_name_here
是你的设备名称,比如Astra
,dabai
等。
重启 udev 服务
sudo udevadm control --reload-rules && sudo service udev restart && sudo udevadm trigger
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。