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

Expo Camera 13.9.0搭配TensorFlow.js的cameraWithTensors时,Camera.Constants.Type.back无法正常工作

Expo Camera 13.9.0搭配TensorFlow.js的cameraWithTensors时,Camera.Constants.Type.back无法正常工作

兄弟,我之前也踩过Expo Camera搭配TensorFlow.js的cameraWithTensors的坑,尤其是你说的这个13.9.0版本后置摄像头指定无效的问题,给你分享几个我当时排查和解决的思路:

  • 先检查Expo Camera的常量命名变化
    Expo Camera在13.x版本后对常量做了简化导出,原来的Camera.Constants.Type.back可能已经被废弃了,现在官方推荐直接用CameraType.back。你需要先从expo-camera里导入CameraType,然后替换掉原来的写法:

    import { Camera, CameraType } from 'expo-camera';
    
    // 组件里的type属性替换成这个
    type={CameraType.back}
    

    我当时就是因为没注意到这个API变更,折腾了好久才发现问题。

  • 确认摄像头权限是否完全获取
    有时候看似是摄像头类型设置的问题,实则是权限没到位。你要确保两点:

    1. 在app.json里已经配置了摄像头的权限声明;
    2. 代码里主动请求了摄像头权限,比如:
    const [hasPermission, setHasPermission] = useState(null);
    
    useEffect(() => {
      (async () => {
        const { status } = await Camera.requestCameraPermissionsAsync();
        setHasPermission(status === 'granted');
      })();
    }, []);
    

    如果权限没获取到,App会默认使用前置摄像头或者直接无法启动摄像头,看起来就像是type设置无效。

  • 排查版本兼容性问题
    TensorFlow.js的cameraWithTensors可能对Expo Camera的新版本适配有延迟。你可以试试两个方向:

    • 暂时把Expo Camera降级到13.8.0这类之前的稳定版本,看后置摄像头能不能正常工作;
    • 直接写一个极简的原生Expo Camera Demo(不用cameraWithTensors),设置type={CameraType.back},如果原生组件都无法正常启动后置摄像头,那就是Expo Camera本身的版本问题,反之则是cameraWithTensors的适配问题。
  • 临时修复:手动切换摄像头
    如果上面的方法都没用,你可以试试绕开直接设置type的方式,通过ref手动切换摄像头:

    import React, { useRef, useEffect } from 'react';
    import { cameraWithTensors } from '@tensorflow/tfjs-react-native';
    import { Camera, CameraType } from 'expo-camera';
    
    const TensorCamera = cameraWithTensors(Camera);
    
    export default function App() {
      const cameraRef = useRef(null);
    
      useEffect(() => {
        // 组件挂载后手动切换到后置摄像头
        if (cameraRef.current) {
          cameraRef.current.switchCamera();
        }
      }, []);
    
      return (
        <TensorCamera
          ref={cameraRef}
          type={CameraType.front} // 先默认前置,再手动切换
          className="w-full h-full"
          cameraTextureHeight={texturedims.height}
          cameraTextureWidth={texturedims.width}
          resizeHeight={200}
          resizeWidth={152}
          resizeDepth={3}
          // 其他必要的props...
        />
      );
    }
    

    我当时就是用这个临时方案先解决了问题,后来等tfjs更新适配后就正常了。

备注:内容来源于stack exchange,提问作者Samir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:48:12