news 2026/9/19 7:53:41

四步从0到跑通:RealSense Android 深度测距实战,一张照片读出距离

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四步从0到跑通:RealSense Android 深度测距实战,一张照片读出距离

四步从0到跑通:RealSense Android 深度测距实战,一张照片读出距离

【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense

手机上的相机能拍照,却答不出面前那张桌子有多远。缺少深度数据,正是 RealSense Android 深度相机应用落不了地手机的症结。读完这篇你会完成三件事:

  • 完成 librealsense 依赖配置与相机权限设置,gradle sync 一次通过
  • 插上 D400 系列相机后自动识别设备,开启 Android 深度流采集
  • 从深度帧读出中心距离,并把彩色照片存进手机存储

一、硬件与软件准备清单

🔧 动手前,先对照清单自查。硬件侧:

  • Android 设备,系统版本 6.0 及以上,芯片组支持 OTG(OTG 就是让手机当"主机"、外接 USB 设备的功能)
  • USB3 OTG 数据线,一端接相机、另一端 OTG 接口插手机,必须支持数据传输
  • Intel RealSense D400 系列深度相机,D435i、D455 等型号均可

软件侧:

  • 安装最新版 Android Studio
  • 把 SDK 源码拉到本地:git clone https://gitcode.com/GitHub_Trending/li/librealsense ,Android 封装层与示例都在仓库的wrappers/android目录下

平台支持细节可查官方 Android 文档。相机是主角,OTG 线是数据通道,两者齐活才谈得上测距。

二、依赖与权限,一次配到位

打开 app 模块的build.gradle,补上两处内容。RealSense 的 AAR 托管在 maven 仓库,它负责相机权限申请,并提供基于 JNI 的 Java API:

repositories { maven { url "https://egiintel.jfrog.io/artifactory/librealsense" } } dependencies { implementation 'com.intel.realsense:librealsense:2.18.0@aar' }

AndroidManifest.xml里再加一行相机权限(Android 9 及以上强制要求):

<uses-permission android:name="android.permission.CAMERA"/>

为什么要配这些?AAR 不进来,librealsense 的 Java 类根本找不到;权限不声明,系统不会把相机硬件交给你的应用。配完后 sync 一次 gradle,能导入com.intel.realsense.librealsense包就算过关。

三、从设备插上去到画面出来

画面要分三步走出来。

先,初始化上下文。在应用入口调用一次RsContext.init(getApplicationContext()),多 Activity 项目务必用 Application context,这样各页面才能共享同一个上下文。

再,注册设备监听。RealSense Android 深度相机的插拔动作都会通过回调通知你,由你决定流去还是留:

mRsContext.setDevicesChangedCallback(new DeviceListener() { @Override public void onDeviceAttach() { mStreamingThread.start(); } @Override public void onDeviceDetach() { mStreamingThread.interrupt(); } });

最后,启动数据流。在专用线程里创建 Pipeline(可以理解为相机的总调度,负责编排深度、彩色等所有传感器流),调用pipe.start()后帧就开始流动。官方Java 示例用单个 Activity 走完了全部流程,可以直接当骨架照着改:

设备一插,深度画面几秒内点亮。

四、读出距离,拍下照片

原理先说清。深度帧本质上是"每个像素一个距离值",对中心像素调用getDistance,拿到的就是相机到画面中央目标的米制距离,这是实现深度测距最直接的姿势。核心循环不长:

Pipeline pipe = new Pipeline(); pipe.start(); while (!mStreamingThread.isInterrupted()) { try (FrameSet frames = pipe.waitForFrames()) { try (Frame f = frames.first(StreamType.DEPTH)) { DepthFrame depth = f.as(Extension.DEPTH_FRAME); float distance = depth.getDistance( depth.getWidth() / 2, depth.getHeight() / 2); // 更新界面距离显示,或触发拍照动作 } } } pipe.stop();

两层 try 是 try-with-resources,帧读完立刻 close,否则 GC 追不上新帧分配,卡帧就在眼前。

RealSense 拍照保存只有三步:一,从 FrameSet 里取StreamType.COLOR彩色帧;二,把帧的原始数据转成 Bitmap;三,以 JPG 格式写入手机存储。Android 拍照示例已把彩色、深度双画面与保存逻辑全部串好,打开就能对照。📷

距离是数字,照片是凭证,一帧数据两种产出。

五、踩过的坑与下一步

三个高频问题,按"问题→原因→解法"列给你:

  • OTG 识别失败→ 手机 OTG 开关没开,或数据线只支持充电 → 在系统设置里打开 OTG,换一根支持数据传输的 USB3 数据线
  • 帧率波动、频繁掉帧→ 帧对象没及时释放,缓冲被占满 → 统一走 try-with-resources,读到的 Frame 用完即关
  • 权限被拒、画面黑屏→ Android 9 以上需要运行时 CAMERA 权限 → 启动数据流前用checkSelfPermission检查,未授予就动态申请

若测出的距离跳变明显,可以翻一翻官方后处理滤波示例,看看给深度流加抽取、时序滤波的效果。想从单点距离走向整片场景,再去看测量示例与 examples 目录下的 pointcloud 示例,把深度数据变成点云。

建议你先让相机对准 2 米外的墙面,确认读数落在 1.9 到 2.1 米之间,再谈参数调优。

【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 7:53:25

北斗定位核心原理与工程实践:从伪距解算到误差消减

简介&#xff1a;这份PDF资料系统梳理了北斗卫星导航系统的定位原理与实际应用&#xff0c;内容涵盖系统组成、双星定位机制、工作流程&#xff0c;以及北斗一号与二代的演进对比&#xff0c;适合通信、测绘、交通等领域的技术人员和对卫星导航原理感兴趣的读者。压缩包内仅包含…

作者头像 李华
网站建设 2026/9/19 7:48:36

BI平台选型本质:企业数据能力与AI分析落地路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 7:45:02

浏览器性能优化五阶段实战地图:从DNS到交互响应

1. 这不是背题清单&#xff0c;是浏览器性能优化的实战作战地图“面试官问「浏览器性能优化有哪些」&#xff1f;5 大阶段 30 手段甩他脸上”——这个标题乍看像极了那种靠堆砌术语博眼球的速成帖&#xff0c;但如果你真把它当口诀来背&#xff0c;进了技术深水区马上露馅。我带…

作者头像 李华
网站建设 2026/9/19 7:42:31

网页前端开发大作业实战:HTML/CSS/JavaScript与Bootstrap从零到一

1. 大作业选题背后的真实需求拆解1.1 为什么“网页前端考查大作业”值得认真对待很多人看到“考查大作业”这四个字&#xff0c;第一反应是去网上找一个模板&#xff0c;改改文字和图片就交上去。我带过几届学生的课程设计&#xff0c;也帮同事看过他们接的外包项目&#xff0c…

作者头像 李华
网站建设 2026/9/19 7:41:41

React核心概念深度解析:虚拟DOM、Fiber与生命周期一次讲透

我一直觉得&#xff0c;React 是一个“入门容易&#xff0c;学明白难”的东西。很多人搭好环境、写完几个组件、跑通了 ToDoList&#xff0c;就以为自己会 React 了&#xff0c;结果面试一问生命周期、Fiber、为什么函数组件每次都要重新执行&#xff0c;瞬间卡壳。这个“React…

作者头像 李华
网站建设 2026/9/19 7:40:49

Omarchy 研发基础设施迁移至 DigitalOcean 云平台实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华