欢迎光临UUpython
最大、最新、最全的Python代码收集站

中小学学籍照片自动批量剪裁

'''
学籍照片自动裁剪工具:
1.自动将整个文件夹的照片用人脸识别的方式,以人脸为中心向周边延伸2倍来裁剪头像。
2.生成的图片大小为260*320像素,符合中小学学籍照片规格。一般容量都是20-30KB左右。
3.经测试,人脸识别还是很准确的,放个狗头上去就识别不了
# 在终端运行这个命令 python -m pip install dlib-19.22.99-cp38-cp38-win_amd64.whl
by xinixu 2023.7.21
'''
import cv2
import dlib
import os
 
def detect_face_and_half_body(input_image_path, output_image_path, target_size=(260, 320), extend_ratio=1.0):
    # 使用OpenCV加载图像
    image = cv2.imread(input_image_path)
 
    # 将图像转换为灰度图像,以加快人脸检测速度
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
    # 从Dlib加载人脸检测器模型
    face_detector = dlib.get_frontal_face_detector()
 
    # 在图像中检测人脸
    faces = face_detector(gray_image)
 
    if len(faces) > 0:
        # 假设图像中只有一个人脸(你可以修改代码来处理多个人脸)
        face = faces[0]
 
        # 获取人脸的边界框坐标
        x, y, w, h = face.left(), face.top(), face.width(), face.height()
 
        # 计算人脸的中心点
        center_x = x + w // 2
        center_y = y + h // 2
 
        # 计算半身图像的裁剪区域的坐标
        crop_width = int(w * (1 + extend_ratio))
        crop_height = int(h * (1 + extend_ratio))
        crop_x1 = max(0, center_x - crop_width // 2)
        crop_y1 = max(0, center_y - crop_height // 2)
        crop_x2 = min(center_x + crop_width // 2, image.shape[1])
        crop_y2 = min(center_y + crop_height // 2, image.shape[0])
 
        # 裁剪图像以获取半身图像
        half_body_image = image[crop_y1:crop_y2, crop_x1:crop_x2]
 
        # 将半身图像调整到目标尺寸
        resized_image = cv2.resize(half_body_image, target_size, interpolation=cv2.INTER_AREA)
 
        # 保存调整后的图像
        cv2.imwrite(output_image_path, resized_image)
 
        print(f"检测到人脸,半身图像已保存:{output_image_path}")
    else:
        print(f"未在图像中检测到人脸:{input_image_path}")
 
def batch_detect_face_and_half_body(input_folder, output_folder, target_size=(260, 320), extend_ratio=1.0):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
 
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
            input_image_path = os.path.join(input_folder, filename)
            output_image_path = os.path.join(output_folder, filename)
            detect_face_and_half_body(input_image_path, output_image_path, target_size, extend_ratio)
 
if __name__ == "__main__":
    input_folder = "G:\\201901"  # 替换为你的输入文件夹路径
    output_folder = "G:\\20190101"  # 替换为你的输出文件夹路径
    target_size = (260, 320)
    extend_ratio = 2.0  # 增大extend_ratio以获得更大范围的半身图像
 
    batch_detect_face_and_half_body(input_folder, output_folder, target_size, extend_ratio)
赞(0) 打赏
未经允许不得转载:UUpython » 中小学学籍照片自动批量剪裁
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!