专栏首页点云PCLOpen3d 学习计划—13(Azure Kinect)

Open3d 学习计划—13(Azure Kinect)

Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。

本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划(点击“原文阅读”可以直接关注blue的博客)。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Open3D或者感兴趣的小伙伴能够加入我们的翻译计划,贡献免费交流社区,为使用Open3D提供中文的使用教程。

注意:Azure Kinect只支持在Windows和Ubuntu 18.04下使用.

安装Azure Kinect SDK

从这篇指南(https://github.com/microsoft/Azure-Kinect-Sensor-SDK)中下载Azure Kinect SDK(K4A). 在Ubuntu中,你将要设置udev规则去使用不带sudo的Kinect相机,请参考以下指南(https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/docs/usage.md#linux-device-setup).

安装以后,你需要在Linux的窗口运行 k4aviewer 或者在Windows上运行 k4aviewer.exe 来确保设备工作. 当前Open3d支持的 Azure Kinect SDK 版本为v1.2.0,不过未来的版本也可能兼容. 如果你使用的是Ubuntu 16.04,Azure Kinect SDK是不受官方支持的,我们需要一个非官方的解决方案,参考如下: Unofficial Ubuntu 16.04 workaround.(后面会有介绍)

从Pip或者Conda安装使用Open3d

如果你是从Pip或者Conda安装的Open3d,那么通过推荐的方式在系统中安装K4A,Open3d的Azure Kinect功能是可以直接使用的.当Open3d使用K4A相关的功能时,将会自动加载K4A的动态链接库. 在Ubuntu,默认的搜索路径遵循Linux的惯例. 在Windows,Open3d将从默认的安装路径加载共享库.举个例子,对于v1.2.0版本的K4A,默认的安装路径是 C:\Program Files\Azure Kinect SDK v1.2.0 .如果这个不起作用,复制 depthengine_x_x.dll, k4a.dll 和 k4arecord.dll文件到Open3d Python模块安装的路径(如果你用的Python),或者到你的C++可执行文件相同的目录. 你能够通过下面的方式得到Open3d的Python模块路径:

python -c "import open3d as o3d; import os; print(os.path.dirname(o3d.__file__))"

源码构建

想要从源码构建支持K4A的Open3d,需要在CMake设置的时候设置

BUILD_AZURE_KINECT=ON.
cmake -DBUILD_AZURE_KINECT=ON -DOTHER_FLAGS ..

Open3D Azure Kinect Viewer

使用Open3D Azure Kinect Viewer来预览Azure Kinect相机捕获到的深度和RGB图像. Open3D 提供了Azure Kinect Viewer的Python和C++例程代码.请在 examples/Cpp/AzureKinectViewer.cpp 和examples/Python/ReconstructionSystem/sensors/azure_kinect_viewer.py 中查看更多细节. 我们将使用Python版本作为例程.

python examples/Python/ReconstructionSystem/sensors/azure_kinect_viewer.py --align_depth_to_color

当使用高帧数,高分辨率进行记录时,可以使用未经变换的原始深度图像来减少计算.

python examples/Python/ReconstructionSystem/sensors/azure_kinect_viewer.py

近来很多3D的应用在兴起,3D传感器在进步,随着虚拟网络的发展转到物理实际中的应用,比如(ADAS,AR,MR)自动驾驶中需要理解 汽车行人交通标识,同时也需要理解三维物体的状态静止和移动。

当可视化窗口工作时,可以使用ESC来退出. 也可以使用Json文件来配置传感器.

python examples/Python/ReconstructionSystem/sensors/azure_kinect_viewer.py --config config.json

这个传感器的配置如下.完整的配置列表请参阅这里(https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/include/k4a/k4atypes.h)

{
    "camera_fps" : "K4A_FRAMES_PER_SECOND_30",
    "color_format" : "K4A_IMAGE_FORMAT_COLOR_MJPG",
    "color_resolution" : "K4A_COLOR_RESOLUTION_720P",
    "depth_delay_off_color_usec" : "0",
    "depth_mode" : "K4A_DEPTH_MODE_WFOV_2X2BINNED",
    "disable_streaming_indicator" : "false",
    "subordinate_delay_off_master_usec" : "0",
    "synchronized_images_only" : "false",
    "wired_sync_mode" : "K4A_WIRED_SYNC_MODE_STANDALONE"
}

Open3D Azure Kinect记录器

使用Open3D Azure Kinect Viewer记录RGB和深度图像流到MKV文件. Open3D 提供了Azure Kinect Viewer的Python和C++例程代码.请在 examples/Cpp/AzureKinectRecord.cpp 和examples/Python/ReconstructionSystem/sensors/azure_kinect_recorder.py Python版本的使用例程如下:

python examples/Python/ReconstructionSystem/sensors/azure_kinect_recorder.py --output record.mkv

当运行记录器脚本时,可以任意修改相机配置. 当可视化窗口工作时,按 空格键 开始或者暂停记录.按ESC可以退出记录.

Open3D Azure Kinect MKV文件读取

记录的MKV文件使用K4A的自定义格式,里面包含了RGB和深度图像.常规的视频播放器可能只支持播放彩色图像或者不支持所有格式,要想查看自定义的MKV文件,请使用Open3D Azure Kinect MKV Reader. Open3D 提供了Open3D Azure Kinect MKV Reader 的 Python 和 C++ 的使用例程代码,请查看 examples/Cpp/AzureKinectMKVReader.cpp 和examples/Python/ReconstructionSystem/sensors/azure_kinect_mkv_reader.py . Python版本使用:

python examples/Python/ReconstructionSystem/sensors/azure_kinect_mkv_reader.py --input record.mkv

需要注意,尽管记录的时候记录的是未对齐的原始深度图像,阅读器依然能够将深度图与彩色图像对齐. 要将MKV 视频转换为深度图和彩色图的图像帧时,请指定 --output 标志.

python examples/Python/ReconstructionSystem/sensors/azure_kinect_mkv_reader.py --input record.mkv --output frames

非官方的Ubuntu 16.04工作环境

Azure Kinect SDK并没有提供Ubuntu 16.04的官方版本,在这里我们给出非官方提供的例程.

使用Open3d Python包

对于Python版本的Open3d,运行

pip install open3d_azure_kinect_ubuntu1604_fix

open3d_azure_kinect_ubuntu1604_fix包包含四个共享库

libstdc++.so:从Ubuntu 18.04复制,libdepthengine.so需要.

libdepthengine.so:从K4A的Ubuntu 18.04版本拷过来的.

libk4a.so:在Ubuntu 16.04上从源码构建的.

libk4arecord.so:在Ubuntu 16.04上从源码构建的. open3d_azure_kinect_ubuntu1604_fix将会预加载共享库并设置LD_LIBRARY_PATH,之后当编译模块加载Kinect库时,dlopen会使用他们. 当安装完open3d_azure_kinect_ubuntu1604_fix后,使用import open3d导入Open3d时,Open3d将会在初始化阶段试图加载共享库.

从源码构建Open3d

首先,下载open3d_azure_kinect_ubuntu1604_fix包到你的Python环境.这个包包含编译Azure Kinect支持版本的Open3d的所要的头文件.

从源码构建Open3d时,在CMake配置阶段设置

-DBUILD_AZURE_KINECT=ON.CMake

将会使用当前路径中可用的Python可执行文件去检测open3d_azure_kinect_ubuntu1604_fix包的位置.因此在运行CMake时,

请确保启用的Python环境是open3d_azure_kinect_ubuntu1604_fix包所在的环境.

如果是构建C++二进制文件,依然要确保在运行时LD_LIBRARY_PATH包含 libstdc++.so 和libdepthengine.so 目录.如果你构建已经编译的Open3d Python模块,Open3d的 init.py文件将会试图导入open3d_azure_kinect_ubuntu1604_fix,为了自动追加 LD_LIBRARY_PATH.

本文分享自微信公众号 - 点云PCL(dianyunPCL),作者:梦醒blue

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Open3d学习计划(1)

    Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而...

    点云PCL博主
  • 点云深度学习系列一: PointNet和PointNet++

    前言:,本公众号将持续点云深度学习最近的相关文章,这个系列从CVPR2017的PointNet开始,主要总结顶会的相关文章,不会全文翻译,只总结重要的点。

    点云PCL博主
  • pcl小分享

    背景:在使用ISSKeypoint3D求取点云的keypoint的时候,编译pcl程序,竟然提示源码中错误,逆天了!其实还是自己失误!

    点云PCL博主
  • Python多进程multiprocessing、进程池用法实例分析

    本文实例讲述了Python多进程multiprocessing、进程池用法。分享给大家供大家参考,具体如下:

    砸漏
  • 参加 HKOSC 2016 见闻

    这个拖了一个月才开始写,一部分原因是懒,开通了赞赏就没写了;还有就是想沉淀下,看看过这么久还有哪些是自己还印象深刻的。 HKOSC (Hong Kong Ope...

    温铭@APISIX
  • Pywick:追求功能完备的PyTorch高级训练库

    52CV曾经分享过很多CV方面新出的论文和开源技术,我们可以非常明显的感受到,越来越多的人使用PyTorch开发新模型。

    CV君
  • 从SAP最佳业务实践看企业管理(194)-FI-GR/IR应用

    1,采购的an incoming invoice当被过帐时,必须参照(refer to) (1). a purchase order (2). a good r...

    SAP最佳业务实践
  • docker 常用命令

    docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口

    墨染秦时
  • 五、常用模块

    模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 conf...

    酱紫安
  • python基础学习16----模块

    这种方式引入会相当于将模块中代码执行一遍,所以如果引入的模块中有输出语句,那么只写import 模块名,运行也会显示输出。

    py3study

扫码关注云+社区

领取腾讯云代金券