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

如何在调用DeepFace.find前检查文件扩展名并限定处理格式?

解决方案:限定文件格式并保留原文件夹结构

你可以通过过滤文件扩展名来跳过CR2、视频等DeepFace不支持的文件,同时完全保留原文件夹结构,无需额外整理图片。具体实现如下:

1. 定义支持的图像格式集合

先明确DeepFace兼容的图像格式(常见的JPG、PNG、BMP等都支持):

ALLOWED_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp'}

2. 添加扩展名检查与递归遍历逻辑

通过递归遍历源目录保留文件结构,处理前先校验扩展名,仅处理合法图像文件。修改后的完整代码:

import os
from deepface import DeepFace

ALLOWED_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp'}
source_path = "你的源图片根路径"
db_path = "你的人脸数据库路径"
matches_path = "匹配结果保存根路径"

def process_image(img_rel_path):
    img_full_path = os.path.join(source_path, img_rel_path)
    # 提取文件扩展名并转为小写,避免大小写兼容问题
    ext = os.path.splitext(img_full_path)[1].lower()
    
    # 跳过非支持格式的文件
    if ext not in ALLOWED_EXTENSIONS:
        print(f"跳过非图像文件: {img_rel_path}")
        return
    
    try:
        dfs = DeepFace.find(img_path=img_full_path,
                            db_path=db_path,
                            enforce_detection=False,
                            detector_backend="retinaface",
                            model_name="ArcFace"
                           )
        if len(dfs) > 0:
            print("找到匹配文件:", img_rel_path)
            # 构建结果文件路径,保留原文件夹结构
            result_txt_path = os.path.join(matches_path, img_rel_path.replace(ext, ".txt"))
            # 自动创建结果目录(如果不存在)
            os.makedirs(os.path.dirname(result_txt_path), exist_ok=True)
            with open(result_txt_path, "w") as f:
                f.write(str(dfs))
    except Exception as e:
        print(f"处理文件出错 {img_rel_path}: {str(e)}")

# 递归遍历源目录下所有文件
for root, dirs, files in os.walk(source_path):
    for file in files:
        # 获取文件相对于源目录的路径,用于保留结构
        rel_path = os.path.relpath(os.path.join(root, file), source_path)
        process_image(rel_path)

关键细节说明

  • 用os.walk递归遍历源目录,通过相对路径保证结果目录和原目录结构完全一致
  • 扩展名转小写处理,避免.JPG、.Png等大小写差异导致的漏判
  • 处理前直接跳过无效格式文件,无需额外整理图片文件夹
  • 自动创建结果子目录,确保保存路径结构匹配原文件位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:12