Android使用TensorFlow Lite出现ro.hardware.chipname访问拒绝报错如何解决
报错原因说明
这个E/libc: Access denied finding property "ro.hardware.chipname"日志和业务权限无关,也不是你的代码逻辑错误导致的,底层触发逻辑如下:
- TensorFlow Lite运行时默认会尝试启用NNAPI(安卓原生神经网络API)做硬件加速,加速前会读取
ro.hardware.chipname系统属性判断当前设备的芯片型号,匹配对应的优化策略。 - 该属性是厂商私有系统属性,普通第三方应用默认没有读取权限,所以会触发底层libc的拒绝访问日志。
注意:这个日志绝大多数情况下只是底层的冗余报错打印,不会直接阻塞TFLite推理,也不会导致应用崩溃,如果你推理功能运行正常,直接忽略该日志即可。
解决方案
如果这个日志伴随推理失败、应用崩溃的问题,可以按以下步骤排查:
- 验证是否为NNAPI加速导致的问题
初始化TFLite模型时强制关闭NNAPI,使用CPU执行推理,观察日志是否消失:
// 替换为你自己的模型初始化代码,添加CPU运行配置 val modelOptions = TensorFlowLiteModel.Options.Builder() .setDevice(Device.CPU) .build() val model = YourTFLiteModelClass.newInstance(context, modelOptions)
如果关闭NNAPI后报错消失,说明只是加速模块的冗余日志,无需额外处理,如果你需要硬件加速,可以在AndroidManifest.xml中添加如下权限声明,部分厂商系统会开放权限给第三方应用:
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
- 核对模型输入格式
如果关闭NNAPI后仍然推理失败,说明和该libc日志无关,是输入张量和模型要求不匹配导致的,需要核对以下参数:
- 模型要求的输入数据类型是UINT8还是FLOAT32,你当前用的是UINT8类型的TensorImage
- 模型要求的输入尺寸是否和你imageProcessor处理后的tensor尺寸一致
- 输入图像的通道顺序是RGB还是BGR,是否需要做通道转换
内容的提问来源于stack exchange,提问作者PunnyBunny
相关产品推荐
相关产品推荐

