如何在Android CameraX中使用USB摄像头替代内置前后摄像头
CameraX接入USB摄像头操作方案
前置依赖确认
- 首先确认你的Android设备系统原生支持UVC协议,绝大多数Android 10及以上的官方系统都默认支持,无需额外安装驱动
- 确保项目引入的CameraX核心依赖版本不低于1.1.0,示例依赖配置如下:
dependencies { implementation "androidx.camera:camera-core:1.3.0" implementation "androidx.camera:camera-camera2:1.3.0" // 其他CameraX相关依赖保持原有配置即可 }
核心实现步骤
默认的CameraSelector.LENS_FACING_BACK/FRONT仅适配内置摄像头,你可以通过自定义CameraFilter筛选外接USB摄像头:
- 自定义筛选规则过滤出外接UVC摄像头
Android 9及以上系统外接的UVC摄像头,其摄像头属性LENS_FACING会被标记为LENS_FACING_EXTERNAL,可以通过这个特征筛选:
val usbCameraFilter = CameraFilter { availableCameraInfos -> availableCameraInfos.filter { cameraInfo -> val camera2Info = cameraInfo as Camera2CameraInfo val lensFacing = camera2Info.getCameraCharacteristic(CameraCharacteristics.LENS_FACING) lensFacing == CameraCharacteristics.LENS_FACING_EXTERNAL } }
如果你使用的定制ROM没有正确标记外接摄像头属性,可以额外通过摄像头设备名称包含
UVC/usb等关键词做二次筛选
- 构建USB摄像头专用的CameraSelector
val usbCameraSelector = CameraSelector.Builder() .addCameraFilter(usbCameraFilter) .build()
- 绑定用例
后续绑定Preview、ImageAnalysis等用例的逻辑完全不变,直接替换原来的前后置CameraSelector为上面构建的usbCameraSelector即可,原有ML-kit人脸检测逻辑不需要做任何修改。
注意事项
- 除了常规的CAMERA权限外,部分设备需要额外动态申请USB设备访问权限,否则无法读取USB摄像头数据
- 如果你的设备系统不支持原生UVC协议,可以引入第三方libuvc库读取USB摄像头帧数据,转换成ImageProxy后直接传入ImageAnalysis的分析管道即可。
内容的提问来源于stack exchange,提问作者Sejpalsinh Jadeja
相关产品推荐
相关产品推荐

