Chaquopy安卓项目中DeepFace库运行报错排查求助
Chaquopy中DeepFace人脸比对问题解决方案
一、修复TypeError: list indices must be integers or slices, not str错误
该错误源于Chaquopy环境下DeepFace加载Facenet512模型时,数据结构或路径解析逻辑与本地Python环境不一致,可通过以下方式解决:
- 显式指定模型权重路径:将Facenet512预训练权重提前放入安卓项目
assets目录,调用verify时手动指定路径,避免自动下载的路径解析问题:from deepface import DeepFace # 替换为你的权重实际存储路径 model_weight_path = "/data/user/0/你的应用包名/files/facenet512_weights.h5" verification_result = DeepFace.verify( img1_path="/sdcard/face1.jpg", img2_path="/sdcard/face2.jpg", model_name="Facenet512", model_path=model_weight_path ) - 统一图像输入格式:Chaquopy中OpenCV图像读取返回格式可能存在差异,提前用OpenCV读取为numpy数组后传入:
import cv2 from deepface import DeepFace img1 = cv2.imread("/sdcard/face1.jpg") img2 = cv2.imread("/sdcard/face2.jpg") verification_result = DeepFace.verify(img1, img2, model_name="Facenet512")
二、解决Chaquopy依赖环境匹配问题
Chaquopy对带原生扩展的Python包(如opencv-python)有特定兼容要求,按以下方式配置:
- 指定兼容版本的依赖:在安卓项目
build.gradle的Chaquopy配置中,明确指定适配的包版本,避免版本冲突:chaquopy { pip { install "deepface==0.0.79" install "opencv-python-headless==4.5.5.62" # 无头版更适配安卓无GUI环境 install "tensorflow==2.12.0" # 匹配DeepFace依赖的TensorFlow版本 install "numpy==1.23.5" } } - 配置可靠的包源:若出现包找不到的情况,添加国内镜像源确保包可正常下载:
chaquopy { pip { options "--index-url", "https://pypi.tuna.tsinghua.edu.cn/simple" install "deepface==0.0.79" install "opencv-python-headless==4.5.5.62" } } - 手动添加原生依赖:对于无法通过pip安装的原生库,将编译好的安卓版本库放入
src/main/jniLibs目录,再通过Python代码调用。
三、调试技巧
- 打印关键变量:在模型加载、图像预处理步骤前后,打印模型配置、路径、图像形状等变量,对比本地与Chaquopy环境的差异,定位异常点。
- 简化测试代码:先编写最小可复现代码,仅完成模型加载与简单特征提取,排除其他业务逻辑干扰。
内容的提问来源于stack exchange,提问作者Ashutosh Gandhi
相关产品推荐
相关产品推荐

