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

MediaPipe安卓App横屏模式下相机旋转90度问题解决方案咨询

MediaPipe 安卓横屏模式相机朝向错误解决方案

1. 校准相机旋转角度计算逻辑

  • 首先通过CameraManager获取当前启用摄像头的传感器原生朝向:调用getCameraCharacteristics(cameraId)方法,读取SENSOR_ORIENTATION参数,常规后置摄像头默认值为90°,前置摄像头默认值为270°。
  • 结合当前屏幕朝向动态计算需要补偿的旋转值,参考计算逻辑如下:
int getCameraCompensationRotation(boolean isFrontCamera) {
    int displayRotation = getWindowManager().getDefaultDisplay().getRotation();
    int sensorOrientation = cameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
    int rotationOffset;
    if (isFrontCamera) {
        rotationOffset = (sensorOrientation + displayRotation * 90) % 360;
        rotationOffset = (360 - rotationOffset) % 360;
    } else {
        rotationOffset = (sensorOrientation - displayRotation * 90 + 360) % 360;
    }
    return rotationOffset;
}

2. 预处理MediaPipe输入帧

  • 若使用自定义相机实现,在将相机帧传入MediaPipe Graph之前,对Image/Bitmap对象应用上面计算得到的旋转角度,保证传入MediaPipe的帧方向正确。
  • 若使用MediaPipe官方提供的相机集成组件(Camera2/CameraX绑定组件),直接将计算得到的旋转值传入组件的setRotation()方法即可,无需手动处理帧旋转。

3. 调整输出渲染变换矩阵

  • 如果你不需要修改输入帧方向(避免影响 landmark 检测坐标的后续计算),可以仅调整输出渲染阶段的变换矩阵:在GlSurfaceView的渲染回调中,给纹理绘制矩阵设置对应角度的旋转,再渲染到屏幕上。
  • 横屏切换时同步调整渲染控件的宽高比,和相机输出帧的宽高比保持一致,避免画面拉伸变形。

注意事项

  • 横竖屏切换回调触发时,需要重新计算旋转补偿值,同步更新到MediaPipe的输入、渲染模块,不要仅在应用初始化时计算一次。
  • 前置摄像头需要额外添加镜像翻转处理,避免预览画面和用户实际动作方向相反。

内容的提问来源于stack exchange,提问作者christy varghese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:39:04