用OpenNI2获取奥比中光Astra Pro输出的深度图(win,linux arm64平台)
搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 上获取深度信息,之前的驱动下载已经不好用了
1、windows平台 x64
另外windows平台要安装一个驱动程序
Releases · orbbec/OrbbecSDKhttps://github.com/orbbec/OrbbecSDK/releases下载OrbbecSDK_C_C++_v1.10.22_20250410_46139de6f_win_x64_release.zip
选中x64的包解压缩后\OrbbecSDK_v1.10.22\Driver\SensorDriver_V4.3.0.22.exe就是驱动
下载
Release Release v2.3.0.86-beat6 · orbbec/OpenNI_SDK · GitHubThis repository stores the Release packages of the OpenNI SDK - Release Release v2.3.0.86-beat6 · orbbec/OpenNI_SDKhttps://github.com/orbbec/OpenNI_SDK/releases/tag/v2.3.0.86-beat6
OpenNI_2.3.0.86_202210111950_4c8f5aa4_beta6_windows.zip解压缩后
OpenNI_2.3.0.86_202210111950_4c8f5aa4_beta6_windows\Win64-Release\tools\NiViewer.exe
运行后就可以获取数据了。
另外如何使用python读取数据
参考下面代码,另外要把OpenNI_2.3.0.86_202210111950_4c8f5aa4_beta6_windows\Win64-Release\tools\NiViewer中的文件放到与这个python代码同一目录下
from openni import openni2
import numpy as np
import cv2def depth2mi(depthValue):return depthValue * 0.001def depth2xyz(u, v, depthValue):fx = 577.54679fy = 578.63325cx = 310.24326cy = 253.65539# depth = depth2mi(depthValue)depth = depthValue * 0.001z = float(depth)x = float((u - cx) * z) / fxy = float((v - cy) * z) / fyresult = [x, y, z]return resultdef mousecallback(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDBLCLK:print(y, x, dpt[y, x])arr = np.array(dpt)depthValue = float(arr[y, x])coordinate = depth2xyz(x, y, depthValue)print("coordinate:", coordinate)if __name__ == "__main__":openni2.initialize()dev = openni2.Device.open_any()print("get_device_info()",dev.get_device_info())depth_stream = dev.create_depth_stream()depth_stream.start()cap = cv2.VideoCapture(0)cv2.namedWindow('depth')('depth', mousecallback)while True:frame_dep = depth_stream.read_frame()dframe_data = np.array(frame_dep.get_buffer_as_triplet()).reshape([480, 640, 2])dpt1 = np.asarray(dframe_data[:, :, 0], dtype='uint16')dpt2 = np.asarray(dframe_data[:, :, 1], dtype='uint16')dpt2 *= 255dpt = dpt1 + dpt2dpt = dpt[:, ::-1]im_color = cv2.applyColorMap(cv2.convertScaleAbs(dpt, alpha=0.03), cv2.COLORMAP_JET)cv2.imshow('depth', im_color)ret, frame = cap.read()a = framecv2.imshow('color', frame)key = cv2.waitKey(1)if int(key) == ord('q'):breakdepth_stream.stop()dev.close()
学习资料
Astra Pro深度相机https://www.yahboom.com/study/Astra_Pro
2、linux 平台arm 64 (还有调试中)
另外我使用的linux 是rk3588 arm64的 ubuntu2404 要再安装一个libglut3.12替换freeglut3
sudo apt install libglut3.12
sudo ln -s /usr/lib/aarch64-linux-gnu/libglut.so.3.12.0 /usr/lib/aarch64-linux-gnu/libglut.so.3
目前使用OrbbecViewer_v1.10.22_202504111013_arm64_release.zip中的OrbbecViewer是可以显示深度与红外图的,但是视频流不好用,而且插在一个usb3.0上不好用,但换了一个就不行了,原因未知,进一步查询