首页 > Open3d 学习计划—13(Azure Kinect)

Open3d 学习计划—13(Azure Kinect)

该文章为转载内容,请关注文章作者博客https://blog.csdn.net/io569417668

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 FilesAzure 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.

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

往期线上分享录播汇总

第一期B站录播之三维模型检索技术

第二期B站录播之深度学习在3D场景中的应用

第三期B站录播之CMake进阶学习

第四期B站录播之点云物体及六自由度姿态估计

第五期B站录播之点云深度学习语义分割拓展

第六期B站录播之Pointnetlk解读

[线上分享录播]点云配准概述及其在激光SLAM中的应用

[线上分享录播]cloudcompare插件开发

[线上分享录播]基于点云数据的 Mesh重建与处理

[线上分享录播]机器人力反馈遥操作技术及机器人视觉分享

[线上分享录播]地面点云配准与机载点云航带平差

点云PCL更多活动请查看:点云PCL活动之应届生校招群

扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:

如果你对本文感兴趣,请点击“原文阅读”获取知识星球二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作方式:群主微信“920177957”(需要按要求备注) 联系邮箱:[email protected],欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

更多相关:

  • 出品 | FlyAI编译 | 林椿眄编辑 | DonnaPython 已经成为机器学习及其他科学领域中的主流语言。它不但与多种深度学习框架兼容,而且还包含优秀的工具包和依赖库,方便我们对数据进行预处理和可视化操作。据最新消息,到2019 年底,Numpy 等很多科学计算工具包都将停止支持Python 2版本,而 2018 年后 Num...

  • 转载: 简单回答题主的问题,如果编程零基础,建议以python入门,但是并不建议以此作为数据分析的全部。R可以说是必须要学的,除此两者以外的,可以泛泛的关注。 =================================分割线================================= 下面详细说一下自己的看法,仅仅是个人...

  • 随着人工智能时代的来临,Python开始崭露头角并迅速吸引了人们的广泛关注。很多人想要从事Python开发,但零基础入门Python,需要了解什么呢?看看你都掌握了吗? 1.Python是如何被解释执行的? Python是一种解释型语言,它可以直接从源代码运行程序。程序员编写的源代码首先转变成一种中间语言代码,然后再被转换成能够直接执...

  • 在python中利用urllib2或是pycurl都可以实现http POST请求功能,下面是源码: #!/usr/bin/env python #encoding: utf-8 #description: demo a simple post form #date: 2015-12-14import urllib, urllib...

  • nan 是not a number ,inf是无穷大 numpy.nan_to_num(x): 使用0代替数组x中的nan元素,使用有限的数字代替inf元素...

  • 简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念.Utilities Reference  演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。Graphics Reference  图形化示例展现的是 CUDA, OpenGL,...

  • 在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。...

  • 我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。 基本思路可以完全照搬参考文献[2][3] 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL...

  • 该博文整理一些在使用stl编程过程中遇到的小经验: 1.在多线程环境下面打印调试,如何使用cout及时刷新到屏幕上? 在C中我们经常这样使用: printf("Hello World "); fflush(stdout); 如果使用stl,我们可以这样使用: cout << "Hello World" << endl <...

  •          2014年的日常工作,从技术支持岗位调到市场.社区岗位上:日常技术处理工作变为博客、微信、微博、市场活动策划、发送奖品等。如果以此为界:即毕业10年内的主要是软件研发、团队管理、项目管理;第二个十年开始,有幸从事市场工作–琢磨怎么让更多的人知道葡萄城控件、把软件产品卖出去! 这个对我的改变非常、非常大,以前是专注的做...