Open3d 學習計劃—13(Azure Kinect)

2021-02-23 點雲PCL

Open3D是一個開源庫,支持快速開發和處理3D數據。Open3D在c++和Python中公開了一組精心選擇的數據結構和算法。後端是高度優化的,並且是為並行化而設置的。

本系列學習計劃有Blue同學作為發起人,主要以Open3D官方網站的教程為主進行翻譯與實踐的學習計劃(點擊「原文閱讀」可以直接關注blue的博客)。點雲PCL公眾號作為免費的3D視覺,點雲交流社區,期待有使用Open3D或者感興趣的小夥伴能夠加入我們的翻譯計劃,貢獻免費交流社區,為使用Open3D提供中文的使用教程。

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

從這篇指南(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,那麼通過推薦的方式在系統中安裝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 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

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

如果你對本文感興趣,請點擊「原文閱讀」獲取知識星球二維碼,務必按照「姓名+學校/公司+研究方向」備註加入免費知識星球,免費下載pdf文檔,和更多熱愛分享的小夥伴一起交流吧!

以上內容如有錯誤請留言評論,歡迎指正交流。如有侵權,請聯繫刪除

掃描二維碼

                   關注我們

讓我們一起分享一起學習吧!期待有想法,樂於分享的小夥伴加入免費星球注入愛分享的新鮮活力。分享的主題包含但不限於三維視覺,點雲,高精地圖,自動駕駛,以及機器人等相關的領域。

分享及合作方式:群主微信「920177957」(需要按要求備註) 聯繫郵箱:dianyunpcl@163.com,歡迎企業來聯繫公眾號展開合作。

相關焦點

  • Azure Kinect DK 初次上手指南
    您可以通過點擊連結 https://docs.microsoft.com/zh-cn/azure/Kinect-dk/sensor-sdk-download 下載傳感器SDK。您可以通過點擊連結 https://docs.microsoft.com/zh-cn/azure/Kinect-dk/body-sdk-download 下載身體跟蹤SDK。
  • 全面了解 Azure Kinect DK 這款全新設備,現在來了!
    更多詳情請參考https://docs.microsoft.com/en-us/azure/Kinect-dk/azure-kinect-viewer問:如何獲得Azure帳戶(全球版)?根據人體追蹤和Azure 的圖像識別和深度學習等功能,我們還可以幫助病患實時康復訓練,CT 掃描校準,評估表現;而教練員也可以通過Azure Kinect監測和改進運動員訓練方案,從而提升訓練質量。
  • Azure Kinect 中文官方網站正式亮相
    您可以直接訪問https://azure.microsoft.com/zh-cn/services/kinect-dk/來持續獲得有關Azure Kinect的中文產品資訊信息,您也可以通過點擊文末的閱讀原文直接瀏覽。從產品功能,入門,到行業場景,您都可以通過這個網站找到相關的介紹內容。今天,就請您跟隨小編一起來快速瀏覽下這個網站吧。
  • Open3d學習計劃(3)點雲
    open3d還支持使用RANSAC從點雲中分割幾何基元。要查找點雲中最有可能存在的平面,我們使用segement_plane函數。pcd = o3d.io.read_point_cloud("../..
  • Open3d學習計劃—8(可視化)
    print("Let's draw a cubic using o3d.geometry.LineSet.")points = [ [0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0], [0, 0, 1], [1, 0, 1],
  • Open3d學習計劃(4)網格
    print("Generate data")mesh = o3dtut.get_bunny_mesh().subdivide_midpoint(number_of_iterations=2)vert = np.asarray(mesh.vertices)min_vert, max_vert = vert.min(axis=0), vert.max
  • Open3d學習計劃—6(RGBD圖像)
    Open3d提供圖像(images)數據結構。支持多種函數read_image,write_image,filter_image 和draw_geometries。Open3d的圖像能夠直接轉化為numpy或者從numpy轉化。一個Open3d的RGBDImage由兩幅圖像組成,分別是RGBDImage.depth & RGBDImage.color。
  • Open3D 網格操作
    [-22.12651634  31.28466606 -87.37570953] [-13.91188431  25.4865818  -86.25827026] [ -5.27768707  23.36245346 -81.43279266]]Triangles:[[   0   12   13] [   0   13    1] [
  • Open3D編譯源碼
    配置mkdir buildcd buildcmake -DCMAKE_INSTALL_PREFIX=<open3d_install_directory> ..CMAKE_INSTALL_PREFIX 參數是可選的,可用於將Open3D安裝到用戶指定位置。
  • Open3D點雲操作
    有關可視化GUI的更多信息,請參閱 [可視化](http://www.open3d.org/docs/release/tutorial/geometry/visualization.ipynb) 和 [自定義可視化](http://www.open3d.org/docs/release/tutorial/visualization/customized_visualization.html)。
  • 深度測量相機——Azure Kinect DK把玩記
    因此,開發者需要了解和學習使用新的SDK。下面,我們先了解一下Azure Kinect DK的基本內容,然後圍繞深度測量這一主題來進行探索和學習。1. Azure Kinect DK概述Azure Kinect DK是微軟推出的一款開發人員工具包,由配有先進AI傳感器的Kinect設備和配套的軟體開發工具包(SDK)組成。
  • Open3d學習計劃—高級篇 2(彩色點雲配準)
    source_down.estimate_normals( o3d.geometry.KDTreeSearchParamHybrid(radius=radius * 2, max_nn=30)) target_down.estimate_normals( o3d.geometry.KDTreeSearchParamHybrid(radius=radius * 2,
  • Open3d學習計劃—高級篇 4(多視角點雲配準)
    def pairwise_registration(source, target): print("Apply point-to-plane ICP") icp_coarse = o3d.registration.registration_icp( source, target, max_correspondence_distance_coarse
  • Open3D中文教程-多方向點雲位置配準
    後面實現的技術發表於 [Choi2015] (http://www.open3d.org/docs/release/tutorial/reference.html#choi2015)。輸入教程代碼的第一部分從文件中讀取三個點雲。點雲被降採樣並一起可視化。如圖,它們是錯位了的。
  • Open3D中文教程-彩色點雲配準例程(c++版本)
    #include <Eigen/Dense>#include <iostream>#include <memory>#include "open3d/Open3D.h"#include "open3d/pipelines/registration/ColoredICP.h" using
  • Open3D中文教程-彩色點雲的配準
    它實現了 [[Park2017]] (http://www.open3d.org/docs/release/tutorial/reference.html#park2017) 裡的算法。顏色信息的對齊是沿切線平面的。與已有的點雲配準算法相比,該算法具有更高的精度和魯棒性,同時運行速度與ICP配準算法相當。本教程使用 Open3D中文教程-點雲ICP配準中的符號。
  • Open3d學習計劃—高級篇 5(RGBD融合)
    str__(self): return 'Metadata : ' + ' '.join(map(str, self.metadata)) + '\n' + \ "Pose : " + "\n" + np.array_str(self.pose)def read_trajectory(filename): traj = [] with open
  • CODE|cloudcompare調用深度相機kinect
    我最近又搞了臺結構光深度相機的老前輩kinect v1,(搞不到v2,哪位大佬可以贊助我一下)。我發現cloudcompare上有一個qkinect的插件,但這個插件在2.11中被拋棄了,也不知道為什麼,於是我就考古把這個插件調用了起來。
  • kinect應用開發實踐——Kinect v2安裝、環境搭建、測試
    2、此時連接上USB接口轉換器指示燈由黃色變為白色說明已經成功連接kinect 2.0;繼續進行下一步安裝好後,此時按照SDK安裝包提示重啟一下電腦 注意:這一步非常關鍵 必須重啟下電腦,重啟後,插好usb,觀察Kinect兩顆白色小燈和三個紅外線主動補光亮就表示kinect 2.0已經正常啟動!