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 framesAzure Kinect SDK並沒有提供Ubuntu 16.04的官方版本,在這裡我們給出非官方提供的例程.
使用Open3d Python包
對於Python版本的Open3d,運行
pip install open3d_azure_kinect_ubuntu1604_fixopen3d_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,歡迎企業來聯繫公眾號展開合作。