python实现图像识别人脸裁剪

  1. 安装库

  2. pip install opencv-python pillow face-recognition numpy

  3. windows系统需要安装cmake和dilc

  4. 从官网下载:CMake官网 https://cmake.org/download/
    在这里插入图片描述

  5. 下载完成,点击无脑安装即可

  6. 安装 dlib

  7. 推荐 conda安装

  8. conda install -c conda-forge dlib

  9. 批量识别人脸裁剪小图脚本如下face_id.py:

import os
import cv2
import face_recognition
from PIL import Image


def process_images(input_folder, output_folder, face_margin=0.2):
    """
    处理输入文件夹中的所有图像,检测人脸并裁剪保存

    参数:
        input_folder: 输入图像文件夹路径
        output_folder: 输出裁剪后图像文件夹路径
        face_margin: 在人脸周围保留的额外边距比例(0-1)
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 获取输入文件夹中的所有图像文件
    image_files = [f for f in os.listdir(input_folder)
                   if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]

    processed_count = 0

    for image_file in image_files:
        try:
            # 构建完整文件路径
            input_path = os.path.join(input_folder, image_file)

            # 使用face_recognition加载图像
            image = face_recognition.load_image_file(input_path)

            # 查找图像中所有人脸的位置
            face_locations = face_recognition.face_locations(image)

            if not face_locations:
                print(f"未在 {image_file} 中检测到人脸")
                continue

            # 转换为PIL格式以便裁剪
            pil_image = Image.fromarray(image)

            # 处理每张检测到的人脸
            for i, face_location in enumerate(face_locations):
                top, right, bottom, left = face_location

                # 计算人脸宽度和高度
                face_width = right - left
                face_height = bottom - top

                # 添加边距
                margin_width = int(face_width * face_margin)
                margin_height = int(face_height * face_margin)

                # 计算裁剪区域,确保不超出图像边界
                crop_left = max(0, left - margin_width)
                crop_top = max(0, top - margin_height)
                crop_right = min(pil_image.width, right + margin_width)
                crop_bottom = min(pil_image.height, bottom + margin_height)

                # 裁剪图像
                cropped_image = pil_image.crop((crop_left, crop_top, crop_right, crop_bottom))

                # 生成输出文件名
                name, ext = os.path.splitext(image_file)
                output_filename = f"{name}_face_{i}{ext}"
                output_path = os.path.join(output_folder, output_filename)

                # 保存裁剪后的图像
                cropped_image.save(output_path)
                print(f"已保存: {output_path}")
                processed_count += 1

        except Exception as e:
            print(f"处理 {image_file} 时出错: {str(e)}")

    print(f"\n处理完成! 共处理了 {processed_count} 张人脸图像。")


if __name__ == "__main__":
    # 设置输入和输出文件夹路径
    input_folder = r"C:\Users\EDY\Pictures\face"  # 替换为你的输入文件夹路径
    output_folder = r"C:\Users\EDY\Pictures\faceid"  # 替换为你的输出文件夹路径

    # 调用处理函数
    process_images(input_folder, output_folder, face_margin=0.3)

运行

python face_id.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值