Android Kotlin集成TensorFlow Lite时无法加载detect.tflite文件的问题求助
解决ML Kit自定义目标检测中.tflite模型文件找不到的问题
别着急,你的问题根源在于加载assets目录下模型的方法用错了,咱们一步步来解决:
1. 修正模型加载代码
你当前用的setAbsoluteFilePath("detect.tflite")是用来指定设备本地文件系统的绝对路径,但你的模型是打包在APK的assets目录里的,应该改用setAssetFilePath方法:
val localModel = LocalModel.Builder() .setAssetFilePath("detect.tflite") // 替换原来的setAbsoluteFilePath .build()
2. 为什么之前的方法无效?
setAbsoluteFilePath要求传入的是类似/storage/emulated/0/your_folder/detect.tflite这种设备存储中的完整路径,而assets目录下的文件是嵌入在APK内部的,不属于设备的外部存储,所以ML Kit会抛出FileNotFoundException找不到文件。
而setAssetFilePath是ML Kit专门提供的、用于加载APK中assets目录模型的方法,它会自动处理assets文件的读取逻辑,不需要你手动处理文件路径。
3. 额外的验证步骤
为了确保万无一失,你可以再检查以下几点:
- 确认
detect.tflite文件确实放在src/main/assets目录下,文件名完全一致(Android系统是区分大小写的,注意不要写成Detect.tflite或者detect.TFLITE) - 检查Module级别的
build.gradle文件,确保assets目录被正确配置(默认情况下Android Studio会自动识别,但若有自定义配置需确认):android { sourceSets { main { assets.srcDirs = ['src/main/assets'] } } } - 可以尝试清理项目缓存并重新构建:点击Android Studio菜单栏的
Build→Clean Project,然后Rebuild Project
4. 清理不必要的配置
你之前添加的外部存储权限和requestLegacyExternalStorage配置其实是不需要的,因为模型是从APK内部的assets加载,不需要访问设备外部存储,建议把这些配置从AndroidManifest.xml中移除,避免后续混淆:
<!-- 可以删除以下权限和配置 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:requestLegacyExternalStorage="true">
修改完这些之后,重新运行项目,应该就能正常加载模型了!
内容的提问来源于stack exchange,提问作者Padala Kavya
相关产品推荐
相关产品推荐

