用OpenNI2获取奥比中光Astra Pro输出的深度图(win,linux arm64 x64平台)

news2025/6/7 3:14:37

 搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 (香橙派,ubuntu2404,debian)上获取深度信息,之前的驱动下载已经不好用了,参考如下

Astra 3D相机选型建议 - 知乎https://zhuanlan.zhihu.com/p/594485674

全网最详细 Opencv + OpenNi + 奥比中光(Orbbec) Astra Pro /乐视三合一体感摄像头LeTMC-520 + linux 环境搭建_opencv__小熊_-GitCode 开源社区https://gitcode.csdn.net/6628b2179c80ea0d2271a3b9.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MjQ2NjU4LCJleHAiOjE3NDk1NDcyMzYsImlhdCI6MTc0ODk0MjQzNiwidXNlcm5hbWUiOiJiYWJ5dGlnZXIifQ.7MZgOckoBFv-g_xu7D_ZwhsYMLEjSeeIYY9RONlT3KU&spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-2-114464244-blog-104761686.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-2-114464244-blog-104761686.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=3

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 cv2


def depth2mi(depthValue):
    return depthValue * 0.001


def depth2xyz(u, v, depthValue):
    fx = 577.54679
    fy = 578.63325
    cx = 310.24326
    cy = 253.65539

    # depth = depth2mi(depthValue)
    depth = depthValue * 0.001

    z = float(depth)
    x = float((u - cx) * z) / fx
    y = float((v - cy) * z) / fy

    result = [x, y, z]
    return result


def 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 *= 255
        dpt = dpt1 + dpt2

        dpt = 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 = frame
        cv2.imshow('color', frame)

        key = cv2.waitKey(1)
        if int(key) == ord('q'):
            break

    depth_stream.stop()
    dev.close()

 学习资料

Astra Pro深度相机https://www.yahboom.com/study/Astra_Pro

 2、linux 平台x64

使用的x64 ubuntu2404 要再安装一个libglut3.12替换freeglut3

sudo apt install libglut3.12
sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so.3.12.0 /usr/lib/x86_64-linux-gnu/libglut.so.3

设备接入后用lsusb看到的情况,直接免驱动 

将Release Release v2.3.0.86-beat6 · orbbec/OpenNI_SDK · GitHub下载的zip包解压缩

运行 NiViewer报错,但是用管理员权限可以,改进方法如

你的设备是 Orbbec Astra Pro 系列,USB 设备 ID 是:

  • 2bc5:0403(Astra Pro 深度摄像头)

  • 2bc5:0501(Astra Pro HD 彩色摄像头)


创建规则文件

使用 sudo 创建新的规则文件:

 sudo nano /etc/udev/rules.d/558-orbbec-usb.rules

最后增加如下 内容,因为这个USB 设备 ID 没有加入到最新驱动中

# Astra Pro Depth Sensor
SUBSYSTEM=="usb", ATTR{idVendor}=="2bc5", ATTR{idProduct}=="0403", MODE:="0666", OWNER:="root", GROUP:="video", SYMLINK+="Pro_depth_Sensor"
# Astra Pro HD Camera
SUBSYSTEM=="usb", ATTR{idVendor}=="2bc5", ATTR{idProduct}=="0501", MODE:="0666", OWNER:="root", GROUP:="video", SYMLINK+="Pro_rgb"

 重新加载 udev 规则

sudo udevadm control --reload-rules
sudo udevadm trigger
之后普通用户也可以运行./NiViewer

 另外

3、linux 平台arm 64 (rk3588 香橙派 ubuntu2404)

另外我使用的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上不好用,但换了一个就不行了,原因未知,进一步查询

使用python代码实现了

实现了一个yolo算法,深度信息进一步获取中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity VR/MR开发-VR设备与适用场景分析

视频讲解链接:【XR马斯维】VR/MR设备与适用场景分析?【UnityVR/MR开发教程--入门】_游戏热门视频

Linux: network: switch:arp cache更新规则 [chatGPT]

文章目录 介绍概念普通包带有不同的mac,是否更新arp cache?普通包带有相同的mac,是否刷新 aging timeswitch是否会主动学习介绍 关于arp cache在switch侧的行为。有很多问题需要理解。 概念 HP L3 - IP Services Configuration Guide 文档里有写:dynamic arp entry的解说…

Java网络编程API 1

Java中的网络编程API一共有两套:一套是UDP协议使用的API;另一套是TCP协议使用的API。这篇文章我们先来介绍UDP版本的API,并尝试来写一个回显服务器(接收到的请求是什么,返回的响应就是什么)。 UDP数据报套…

兰亭妙微 | 医疗软件的界面设计能有多专业?

从医疗影像系统到手术机器人控制界面,从便携式病原体检测设备到多平台协同操作系统,兰亭妙微为众多医疗设备研发企业,打造了兼具专业性与可用性的交互界面方案。 我们不仅做设计,更深入理解医疗场景的实际需求: 对精…

前端原生构建交互式进度步骤组件(Progress Steps)

在现代网页设计中,进度步骤(Progress Steps) 是一种常见的 UI 模式,常用于引导用户完成注册流程、多步表单、教程或任何需要分步骤操作的场景。本文将带你从零开始构建一个美观且功能完整的 “进度步骤”组件,并详细讲…

【基于阿里云搭建数据仓库(离线)】Data Studio创建资源与函数

Data Studio支持在您的数据分析代码中引用自定义的资源和函数(支持MaxCompute、EMR、CDH、Flink),您需要先创建或上传资源、函数至目标工作空间,上传后才可在该工作空间的任务中使用。您可参考本文了解如何使用DataWorks可视化方式…

web3-以太坊智能合约基础(理解智能合约Solidity)

以太坊智能合约基础(理解智能合约/Solidity) 无需编程经验,也可以帮助你了解Solidity独特的部分;如果本身就有相应的编程经验如java,python等那么学起来也会非常的轻松 一、Solidity和EVM字节码 实际上以太坊链上储存…

【C++项目】负载均衡在线OJ系统-2

文章目录 oj_server模块编写oj_server框架的搭建-oj_server/oj_server.cpp 路由框架 oj_model模块编写题目信息设置v1.文件版本-common/util.hpp boost库spilt函数的使用-oj_server/oj_model_file.hpp 文件版本model编写v2.mysql数据库版本1.mysql创建授权用户、建库建表录入操…

GC1809:高性能24bit/192kHz音频接收芯片解析

1. 芯片概述 GC1809 是数字音频接收芯片,支持IEC60958、S/PDIF、AES3等协议,集成8选1输入切换、低抖动时钟恢复和24bit DAC,适用于家庭影院、汽车音响等高保真场景。 核心特性 高精度:24bit分辨率,动态范围105dB&…

2025年06月05日Github流行趋势

项目名称:onlook 项目地址url:https://github.com/onlook-dev/onlook项目语言:TypeScript历史star数:16165今日star数:1757项目维护者:Kitenite, drfarrell, spartan-vutrannguyen, apps/devin-ai-integrat…

基于BI PaaS架构的衡石HENGSHI SENSE平台技术解析:重塑企业级数据分析基座

在数据驱动决策的时代,传统BI工具日益显露出扩展性弱、灵活性差、资源利用率低等痛点。衡石科技推出的HENGSHI SENSE平台,创新性地采用BI PaaS(平台即服务)架构,为企业构建了一个强大、开放、可扩展的数据分析基础设施…

【R语言编程绘图-plotly】

安装与加载 在R中使用plotly库前需要安装并加载。安装可以通过CRAN进行,使用install.packages()函数。加载库使用library()函数。 install.packages("plotly") library(plotly)测试库文件安装情况 # 安装并加载必要的包 if (!requireNamespace("p…

通信刚需,AI联手ethernet/ip转profinet网关打通工业技术难关

工业人工智能:食品和饮料制造商的实际用例通信刚需 了解食品饮料制造商如何利用人工智能克服业务挑战 食品和饮料制造商正面临劳动力短缺、需求快速变化、运营复杂性加剧以及通胀压力等挑战。如今,生产商比以往任何时候都更需要以更少的投入实现更高的…

JavaEE->多线程:定时器

定时器 约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见) 客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里“等待的最大时间”可以用定时…

<el-table>构建树形结构

最佳实践 el-table实现树形结构主要依靠row-key和tree-props来实现的。 &#x1f4ab; 无论是el-table实现的树形结构还是el-tree组件都是绑定的树形结构的数据&#xff0c;因此如果数据是扁平的话&#xff0c;需要进行树化。 代码 <template><div><el-table:d…

linux——磁盘和文件系统管理

1、磁盘基础简述 1.1 硬盘基础知识 硬盘&#xff08;Hard Disk Drive&#xff0c;简称 HDD&#xff09;是计算机常用的存储设备之一. p如果从存储数据的介质上来区分&#xff0c;硬盘可分为机械硬盘&#xff08;Hard Disk Drive, HDD&#xff09;和固态硬盘&#xff08;Soli…

云原生 DevOps 实践路线:构建敏捷、高效、可观测的交付体系

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;DevOps 与云原生的深度融合 在传统软件工程范式下&#xff0c;开发与运维之间存在天然的壁垒。开发希望尽快…

gateway 网关 路由新增 (已亲测)

问题&#xff1a; 前端通过gateway调用后端接口&#xff0c;路由转发失败&#xff0c;提示404 not found 排查&#xff1a; 使用 { "href":"/actuator/gateway/routes", "methods":[ "POST", "GET" ] } 命令查看路由列表&a…

Python 训练营打卡 Day 33-神经网络

简单神经网络的流程 1.数据预处理&#xff08;归一化、转换成张量&#xff09; 2.模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 3.定义损失函数和优化器 4.定义训练过程 5.可视化loss过程 预处理补充&#xff1a; 分类任务中&#xff0c;若标签是整…

如何有效删除 iPhone 上的所有内容?

“在出售我的 iPhone 之前&#xff0c;我该如何清除它&#xff1f;我担心如果我卖掉它&#xff0c;有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后&#xff0c;你如何处理旧 iPhone&#xff1f;你打算出售、以旧换新还是捐赠&#xff1f;无论你选择哪一款&am…