Open3d 學習計劃—13(Azure Kinect)

2021-02-13 點雲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,歡迎企業來聯繫公眾號展開合作。

相關焦點

  • 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中文教程-彩色點雲的配準
    它實現了 [[Park2017]] (http://www.open3d.org/docs/release/tutorial/reference.html#park2017) 裡的算法。顏色信息的對齊是沿切線平面的。與已有的點雲配準算法相比,該算法具有更高的精度和魯棒性,同時運行速度與ICP配準算法相當。本教程使用 Open3D中文教程-點雲ICP配準中的符號。
  • 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學習計劃—高級篇 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
  • PyKinect讓你用Python編寫Kinect遊戲
    Pykinect和Pygame讓編寫Kinect遊戲更加簡單 幾點提示: PyKinect不依賴於Pygame。
  • 如何在微軟Azure上搭建個人博客網站
    應用名稱配置:在Azure裡,對於一個新建的WordPress站點來說,應用名稱十分重要,你可以把應用名稱理解成「你的WordPress站點在.azurewebsites.net下的專屬網址」。例如,小編希望自己的WordPress站點的網址是「geekscollege.azurewebsites.net」,那麼在「應用名稱」輸入框中,小編需要輸入「geekscollege.azurewebsites.net」的前綴,即:「geekscollege」。
  • OpenRASP學習筆記
    .git~/openrasp-v8~/openrasp-v8/openrasp-v8~/openrasp-v8/openrasp-v8~/openrasp-v8/openrasp-v8~/openrasp-v8/javaInjellij IDEA打開 \openrasp-master\agent\javaHelp > Find Action ,輸入並打開 Maven Project
  • 如何學習3D建模?學習3D建模有哪些方面要注意的?
    第二,一個系統的滿足時下技術需求的課程學習體系。學習與時俱進的技術,而不是過時落後的技術。這一點在網上的免費教程裡要尤其注意甄別。 第三,最重要的一點,你學完了,做完了,你做的東西對不對?好不好?不好的地方如何修改?為什麼這樣修改?學習過程中遇到問題怎麼解決,這些都是你需要一個老師的地方所在。
  • 中國版 Kinect 受挫,綠動體感遊戲機價格坑爹很難賣
    由於其採用與微軟kinect類似的體感技術,並且自稱國內首款體感遊戲機而備受業界關注。2011年5月聯合綠動將ebox正式更名為isec進行發布,但之後卻一直遲遲未能上市。由於聯合綠動推遲產品上市時間長達一年半,被業內戲稱為跳票王。2012年4月底,聯合綠動召開產品發布會,宣布CT510正式上市,再次引起媒體與用戶關注。
  • 原來微軟 Azure 也有自己搞不定的事
    用戶可在GitHub下載這一方案:https://github.com/persistentsystems/adcms若想了解更多詳情,請訪問:http://azure.microsoft.com/blog/2015/01/12/azure-data-center-migration-just-got-easier
  • 微軟Azure Kinect 中文官方網站正式上線
    功能   在這個版塊中,你將通過產品視頻了解到Azure Kinect的產品構造及特色,並通過Azure Kinect發布前夕的三個合作夥伴先期體驗計劃視頻
  • python學習筆記:頻數分布圖與3D柱狀圖
    result)#生成列表frequencies,計算不同數值情況下骰子的頻次frequencies=[]max_result=die_1.num_sides+die_2.num_sides#計算 2 到 max_result 的各種點數出現的次數#原本可以使用 range(2, 13
  • 給你3d建模學習的十條鐵律,請收藏
    當新手開始學習3d建模的時候,總是很好奇有沒有什麼捷徑可以走呢?其實學習建模不僅需要你擁有一些天賦和願景,還需要你學習建模的決心以及你的努力程度。、Maya、動漫建模、遊戲模型、建模學習、建模教程想要成為一個高水平的3d藝術家,你需要的不僅僅是作為畫家或者雕塑家藝術的技巧,你還需要一個對於軟體透徹的理解能力。
  • 三年open工籤!手持open工籤和4-10級學籤,都可以獲得三年open工籤
    新的學生籤證申請人new student visa applicants以下表格適用於在2018年8月8日,你沒有持有學生籤證,或沒有遞交學生籤證申請:如果你計劃就讀以下課程…並且…)如果你在奧克蘭以外地區就讀,你可以獲得兩年的畢業生open工籤(不包括遠程學習)*其他7級無學位課程課程時間不少於30周如果你在奧克蘭就讀,你可以獲得一年的畢業生open工籤如果你在奧克蘭以外地區就讀,你可以獲得兩年的畢業生open工籤(不包括遠程學習)*單一學歷4-6級課程(兩年以上)課程時間不少於
  • Azure Application Insights REST API使用教程
    新加入的team中的一項工作是製作日常的運維報表,製作方式是手工前往portal.azure.com,在網頁中多次執行不同的查詢語句、導出excel,之後再人工進行合併、分組、匯總、分析等等。這是一個繁瑣的過程,其中大部分步驟其實不值得花費人工,應該交給程序。
  • R包-openxlsx-學習筆記
    本著學習以及熟悉包函數功能的目的,所以有了本文的學習筆記。文中大部分案例是都官方案例,推薦直接閱讀官方資料。項目地址如下:openxlsx官方項目地址個人感覺主要優勢:本文使用版本信息如下:packageVersion("openxlsx")#> [1] '4.2.3'Note:當數據量較大時,本人目前採用writexl::write_xlsx(dt,'test.xlsx')輸出Excel
  • 配置錯誤所導致的Azure嚴重漏洞
    這個HubsExtenstion與其他擴展稍有不同,因為它的URI屬性缺少//或任何合法的域名格式屬性(例如portal.azure.com),相反,它看起來只是一個URL路徑。雖然這很有趣,但仍然不清楚為什麼會出現這種奇怪的錯誤。我需要找到發出這些請求的特定JS代碼。於是我仔細查看了處理這個擴展對象的JS代碼。
  • 做3d建模的工作工資是不是很高?零基礎學習3D建模到學成功,需要多久?
    很多小夥伴總是在問我一個問題,畢業後,做3d建模的工作工資是不是很高啊?我想說的是,很多人的工資確實很高,但是也有很多人的工資很低,為什麼會這樣呢?當然是個人能力決定的。
  • open book和open the book完全是兩個意思!
    ♬ 主播:James老師♬ 配樂:Odjbox今日學習內容:[ open book/closed book ] 上課倒計時▼I'm an open book.(worth my time 值得我花時間)
  • 別逗了,微軟azure加班比阿里還瘋狂,醒了就是幹活
    現在在azure,平時工作時常也差不多一周65小時左右,有deadline的話能到80+。現在在國外做cloud,也很忙很忙。就算google gcp也一樣。還有hard deadline,miss了就可以捲鋪蓋滾的那種。孤獨感會比較強,最重要的還有身份問題,會很沒有安全感,父母也在國內。沒有長期留美的打算,遲早要回,索性早點回了。