当前位置:首页>python>用Python打造批量人脸图片筛选系统

用Python打造批量人脸图片筛选系统

  • 2026-10-21 13:29:34
用Python打造批量人脸图片筛选系统

字数 1767,阅读大约需 9 分钟

用Python打造批量人脸图片筛选系统

一、需求背景

在处理大量图片数据集时,我们经常需要从成百上千张图片中筛选出包含人脸的图片。例如:

  • • 整理个人照片库,提取人物合影
  • • 数据集预处理,构建人脸训练数据集
  • • 内容审核,识别包含人脸的敏感图片

手动筛选效率极低,而普通的图片管理工具又缺乏精准的人脸识别能力。今天,我将分享一套基于Python的批量人脸图片筛选系统,结合了YOLOv8人脸检测和感知哈希去重两大核心技术,轻松解决这个痛点。

二、技术栈选择

1. 人脸检测引擎:YOLOv8

  • • 为什么选择YOLOv8:
    • • 实时性强,适合批量处理
    • • 检测精度高,支持小目标人脸
    • • 预训练模型丰富,开箱即用
    • • 代码简洁,易于集成

2. 图片去重算法:感知哈希(pHash)

  • • 为什么选择pHash:
    • • 对图片缩放、旋转、亮度变化不敏感
    • • 计算速度快,适合大规模图片处理
    • • 哈希值长度固定,便于存储和比较

三、系统架构设计

整个系统分为两个核心模块,形成完整的处理流水线:

📁 原始图片库 → [模块1:人脸检测] → [模块2:图片去重] → 📁 人脸图片库

模块1:人脸检测与筛选

  • • 功能:从原始图片中检测包含人脸的图片
  • • 技术点:YOLOv8预训练模型、置信度阈值过滤
  • • 输出:包含有效人脸的图片集合

模块2:图片去重与迁移

  • • 功能:去除重复图片,优化存储
  • • 技术点:感知哈希算法、文件系统性能优化
  • • 输出:去重后的人脸图片库

四、核心代码解析

1. YOLOv8人脸检测实现

import os
import
 shutil
from
 ultralytics import YOLO

# 核心参数配置

SOURCE_IMG_DIR = r"D:\img_todo\all_img_result"
HAVE_FACE_DIR = r"D:\img_todo\good"
NO_FACE_DIR = r"D:\img_todo\bad"
CONF_THRESHOLD = 0.9  # 90%置信度阈值

# 加载人脸检测专用预训练模型(公众号回复face.pt获取下载链接)

model = YOLO('yolov8x_person_face.pt')

# 遍历处理所有图片

for
 file_name in os.listdir(SOURCE_IMG_DIR):
    file_path = os.path.join(SOURCE_IMG_DIR, file_name)

    # 执行人脸检测

    results = model(file_path, conf=CONF_THRESHOLD, verbose=False)
    det_boxes = results[0].boxes

    # 根据检测结果分类图片

    if
 len(det_boxes) > 0:
        shutil.move(file_path, os.path.join(HAVE_FACE_DIR, file_name))
        print
(f"✅ 检测到人脸 → 已移动至人脸文件夹")
    else
:
        shutil.move(file_path, os.path.join(NO_FACE_DIR, file_name))
        print
(f"❌ 无有效人脸 → 已移动至非人脸文件夹")

技术亮点:

  • • 使用90%的高置信度阈值,确保检测结果的准确性
  • • 批量处理时的异常捕获机制,保证程序稳定性
  • • 清晰的分类结果输出,便于用户监控处理进度

2. 图片去重与性能优化

import os
import
 imagehash
from
 PIL import Image
import
 ctypes

# 配置参数

HASH_SIZE = 8  # 哈希计算尺寸

# 释放文件缓存,解决Windows系统性能问题

def
 release_file_cache():
    try
:
        if
 os.name == "nt":
            ctypes.windll.kernel32.SetErrorMode(0x0001)
            ctypes.windll.psapi.EmptyWorkingSet(ctypes.windll.kernel32.GetCurrentProcess())
    except
:
        pass


# 获取图片哈希值与尺寸

def
 get_img_hash_and_size(img_path):
    img = None
    try
:
        img = Image.open(img_path)
        phash = str(imagehash.phash(img.convert('L'), hash_size=HASH_SIZE))
        size = img.size
        return
 phash, size
    except
 Exception as e:
        return
 None, None
    finally
:
        if
 img:
            img.close()
            del
 img
        release_file_cache()

技术亮点:

  • • 感知哈希算法实现图片内容的唯一标识
  • • 针对Windows系统的文件缓存优化,避免句柄泄漏
  • • 资源及时释放机制,提高内存使用效率

五、系统整合与使用方法

1. 完整工作流程

  1. 1. 步骤1:图片去重预处理
    • • 运行drop_duplicates.py脚本,对原始图片库进行去重
    • • 输出:去重后的图片集合
  2. 2. 步骤2:人脸检测与筛选
    • • 运行face_detect.py脚本,对去重后的图片进行人脸检测
    • • 输出:包含人脸的图片集合

2. 参数配置说明

# 图片去重配置
SOURCE_FOLDER = r"D:\img_todo\all_img"       # 原始图片文件夹路径
TARGET_FOLDER = r"D:\img_todo\all_img_result" # 去重后图片的输出路径
HASH_SIZE = 8                   # 哈希计算精度(8-16之间选择)


# 人脸检测配置

SOURCE_IMG_DIR = r"D:\img_todo\all_img_result"  # 去重后的图片目录
HAVE_FACE_DIR = r"D:\img_todo\good"            # 有人脸图片输出目录
NO_FACE_DIR = r"D:\img_todo\bad"              # 无有效人脸图片输出目录
CONF_THRESHOLD = 0.9                           # 人脸检测置信度阈值(≥90%才判定为人脸)
MODEL_PATH = 'yolov8x_person_face.pt'          # YOLOv8人脸检测模型路径              

3. 运行命令说明

# 1. 运行图片去重脚本
python drop_duplicates.py

# 2. 运行人脸检测脚本(需先安装依赖)

pip install ultralytics pillow
python face_detect.py

4. 模型依赖说明

  • • YOLOv8人脸检测模型:需要下载face.pt模型文件到脚本同一目录(公众号回复face.pt获取下载链接)

六、性能与效率分析

1. 检测速度

  • • 单张图片检测:约0.1-0.3秒(取决于硬件配置)
  • • 批量处理能力:1000张图片约15-30分钟

2. 准确率保障

  • • 采用90%置信度阈值

3. 系统稳定性

  • • 完善的异常处理机制,单张图片错误不影响整体流程
  • • Windows系统文件缓存优化,避免程序崩溃

七、实际应用场景

  1. 1. 个人照片库整理:从 thousands 张生活照片中提取包含人脸的合影
  2. 2. 数据集构建:为机器学习项目快速筛选人脸训练数据
  3. 3. 内容审核:批量识别包含人脸的敏感图片
  4. 4. 电商图片优化:从产品图片中筛选出包含模特的展示图

八、代码优化建议

功能扩展

  • • 支持GPU加速,大幅提升检测速度
  • • 增加人脸数量统计功能
  • • 添加图片质量评估模块

九、总结

这套批量人脸图片筛选系统结合了当前最先进的YOLOv8目标检测技术和感知哈希算法,能够高效、准确地从海量图片中筛选出包含人脸的图片。系统具备以下技术亮点:

  1. 1. 智能设备适配:自动检测并选择最佳运行设备(CUDA GPU、Mac MPS或CPU),充分利用硬件性能
  2. 2. 精准人脸检测:采用90%置信度阈值,确保筛选结果的准确性
  3. 3. 高效批量处理:支持海量图片并行处理,大幅提升工作效率
  4. 4. 完善的异常处理:单张图片处理失败不影响整体流程,确保系统稳定性

系统设计简洁,代码结构清晰,适合技术人员快速部署和二次开发。

无论是个人照片整理,还是专业的数据集构建,这套系统都能大大提高工作效率,是图片处理领域的实用工具。


yolo官方文档: https://docs.ultralytics.com/zh/

获取完整代码:关注「木子打杂spider」公众号,回复「人脸筛选」即可获取完整代码包。 

最新文章

随机文章