You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接将ARCore GPU纹理传递给Mediapipe 避免位图拷贝转换

方案结论

完全可以跳过CPU侧图像拷贝、Bitmap转换的冗余步骤,直接将ARCore输出的GPU纹理传入MediaPipe计算图,这套方案在生产环境可落地,还能大幅降低帧处理延迟。

原有流程的冗余来源

你当前用的取帧链路本质是绕了一圈跨内存数据搬运:

  • 从ARCore Frame 拿Image是把GPU侧存储的相机帧回读到CPU内存
  • 字节数组拷贝、RenderScript转RGB Bitmap是在CPU侧做二次格式加工
  • 如果MediaPipe走GPU推理,传入Bitmap时又会把数据重新上传回GPU
    整个流程至少存在3次不必要的内存拷贝,高分辨率下很容易出现掉帧、检测延迟高的问题。
具体实现步骤
  • 第一步:打通两边的EGL上下文
    创建ARCore Session时,配置和MediaPipe GPU运行环境共享的EGL上下文,不要独立创建渲染上下文,这样两边可以互访对方创建的GPU纹理,不需要做纹理拷贝。ARCore本身支持传入共享EGL上下文的初始化配置,直接对接MediaPipe的EGL环境即可。
  • 第二步:直接获取ARCore的GPU纹理参数
    废弃原来frame.acquireCameraImage()的CPU取帧逻辑,在Scene.OnUpdateListener.onUpdate回调里直接拿ARCore输出的相机纹理参数:GL_TEXTURE_EXTERNAL_OES类型的纹理ID、纹理对应的旋转/镜像变换矩阵、当前帧的时间戳,这些数据全程留在GPU侧,不会触发CPU回读。
  • 第三步:用GpuBuffer格式向MediaPipe传帧
    替换原来的FrameProcessor.onNewFrame(bitmap, timestamp)调用,将拿到的OES纹理ID、纹理宽高、帧时间戳封装为MediaPipe支持的GpuBuffer对象,直接送入计算图的输入流。ARCore提供的纹理变换矩阵可以直接传给MediaPipe内置的GlTextureTransform计算器做坐标对齐,不需要自己在CPU侧做旋转、镜像修正,检测输出的坐标和你原来用Bitmap输入的结果完全一致,后续AR锚点的坐标映射逻辑不需要改动。
注意事项
  • 如果你的MediaPipe计算图中包含必须运行在CPU上的自定义计算器,不需要手动做纹理转Bitmap的操作,MediaPipe内部会自动在需要的节点做GPU-CPU内存同步,内部走的是内存零拷贝映射机制,效率比你手动在业务层做转换高很多。
  • 这套方案落地后,端到端的帧处理延迟通常能降低30%~50%,高分辨率(1080P及以上)场景下的性能提升会更明显。

内容的提问来源于stack exchange,提问作者ksh.max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:33:23