-
安装库
-
pip install opencv-python pillow face-recognition numpy
-
windows系统需要安装cmake和dilc
-
从官网下载:CMake官网 https://cmake.org/download/
-
下载完成,点击无脑安装即可
-
安装 dlib
-
推荐 conda安装
-
conda install -c conda-forge dlib
-
批量识别人脸裁剪小图脚本如下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