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

Flask调用DeepFace人脸检索接口报OSError [Errno 22]无效参数错误

问题原因

报错核心是DeepFace.find()的参数传错:
DeepFace生成人脸特征嵌入pkl文件时,会直接将model_name参数的取值转为字符串拼接到文件名中。你在代码中提前通过DeepFace.build_model()加载了Keras模型实例,却把这个实例对象传给了要求传入模型名称字符串的model_name参数,模型实例转字符串后会得到带内存地址、包含</>等Windows文件名非法字符的内容,最终触发路径无效错误。
另外你的代码中同时传入了model_name和model两个功能重叠的参数,且参数值传反了:model参数才是用来接收预构建模型实例的入口,model_name必须传入官方定义的模型名字符串。

修复方法

二选一即可:

  • 方案1(最简实现,官方默认用法):删除提前构建模型的代码,直接给model_name传模型名字符串,移除冗余的model传参:
# 删掉这行:face_req_model = DeepFace.build_model(models[1])

df = DeepFace.find(
    img_path=detected_list,
    db_path=db_path,
    model_name=models[1],  # 直接传字符串"Facenet",不要传模型对象
    enforce_detection=False,
    detector_backend=backends[3],
    distance_metric=metrics[0]
)
  • 方案2(适合需要复用模型、减少重复加载开销的场景):保留提前加载模型的逻辑,注意参数对应关系,model_name传字符串,model传预构建的实例:
face_req_model = DeepFace.build_model(models[1])

df = DeepFace.find(
    img_path=detected_list,
    db_path=db_path,
    model_name=models[1],  # 必须传字符串,用于生成合法的pkl文件名
    model=face_req_model,  # 这里传提前加载好的模型实例
    enforce_detection=False,
    detector_backend=backends[3],
    distance_metric=metrics[0]
)

补充注意:Windows环境下拼接路径建议全程使用os.path.join(),不要手动混合拼接/和\\,你当前代码中路径拼接混用了两种斜杠,虽然不是本次报错的核心原因,但后续很容易触发其他路径兼容问题。

内容的提问来源于stack exchange,提问作者Ubong Essien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:45:39