吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6274|回复: 60
收起左侧

[Python 原创] 中小学学籍照片自动批量剪裁脚本

  [复制链接]
xinxiu 发表于 2023-7-21 12:09
[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)

测试只适合1寸人头照片,不要拿集体照片测试,集体照片只能认出一个人。

免费评分

参与人数 39吾爱币 +38 热心值 +30 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
caoyisheng + 2 + 1 谢谢@Thanks!
DaiTian + 1 + 1 谢谢 @Thanks!
傻瓜炒蛋 + 1 热心回复!
Tulinzero + 1 + 1 谢谢@Thanks!
showgoodday + 1 我很赞同!
ptjmzcr + 1 谢谢@Thanks!
Crazy_kang + 1 + 1 我很赞同!
onegodman + 1 + 1 热心回复!
mcq1998 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
cao666888 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Drownedfish123 + 1 + 1 热心回复!
義薄云天 + 1 我很赞同!
wuming4 + 1 热心回复!
tom2665 + 1 我很赞同!
zwhale + 1 + 1 我很赞同!
swl2001 + 1 我很赞同!
HBQHDQLZXW + 1 我很赞同!
18815336805 + 1 + 1 谢谢@Thanks!
nimbus + 1 + 1 我很赞同!
LiuKaixin + 1 牛牛牛
Hangcust + 1 热心回复!
woaini122 + 1 + 1 我很赞同!
xiaoshan208 + 1 我很赞同!
13486171725 + 1 + 1 谢谢@Thanks!
zpcjl + 1 谢谢@Thanks!
TequilaZem + 1 + 1 谢谢@Thanks!
lzx0209 + 1 + 1 谢谢@Thanks!
Sillj + 1 我很赞同!
laolizaici + 1 谢谢@Thanks!
kkisme + 1 + 1 谢谢@Thanks!
xiaojieqaz + 1 热心回复!
CometBit + 1 + 1 用心讨论,共获提升!
XY1993 + 1 + 1 谢谢@Thanks!
wub88 + 1 + 1 用心讨论,共获提升!
Wwp6145 + 1 + 1 谢谢@Thanks!
stellarMC + 1 + 1 热心回复!
yann666 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

逆劫古修 发表于 2023-7-21 12:59
我是一楼吗?哈哈哈,谢谢分享
lobemi 发表于 2023-7-25 16:12
SyntaxError: unterminated triple-quoted string literal (detected at line 67)
SyntaxError:未终止的三引号字符串文字(在第 67 行检测到)

我的TXT  67行是下面这个代码
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
按照楼主的代码  我复制到TXT,改成.PY  运行的,结果反馈这个,怎么解决啊?纯小白
鹿鸣 发表于 2023-7-21 13:02
Noangler 发表于 2023-7-21 13:10
新鲜的,谢谢分享。
L__ 发表于 2023-7-21 13:12
谢谢分享
jeriho 发表于 2023-7-21 13:20
批量处理不错
江河宁夏 发表于 2023-7-21 13:22
好,极好,谢谢
sailor0712 发表于 2023-7-21 13:23
学习一下
wantongkeji 发表于 2023-7-21 13:24
谢谢分享。
hbe 发表于 2023-7-21 13:35
感谢楼主了,收藏了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表