MTCNN 人脸识别:从不同场景照片中获取登记照(2)优化

​ 对MTCNN 人脸识别:从不同场景照片中获取登记照(1)进行了优化:

优化修改说明

  1. 保持原始文件名处理

    • 删除了所有与重命名文件相关的代码,直接使用原始文件名进行处理和保存,确保支持中文文件名。
  2. 并行处理

    • 继续使用 ProcessPoolExecutor 进行多进程并行处理,提高处理效率。
    • 确保每个进程独立初始化 MTCNN,以避免进程间共享问题。
  3. 错误处理

    • 继续保留了对图像读取、关键点检测和裁剪过程中的错误处理,确保单个图像处理失败不会中断整个流程。

效果
在这里插入图片描述
说明:以上原始图片来至于互联网,若有侵权,联系删除!!!

环境创建请参考 MTCNN 人脸识别:从不同场景照片中获取登记照(1)

完整代码

"""
@File    : facial_recognition.py
@Author  : Bobo
@Blog    : https://blog.csdn.net/chinagaobo
@Note    : This code is for learning and communication purposes only
"""


import os
import cv2
from PIL import Image
from mtcnn import MTCNN
import numpy as np
from concurrent.futures import ProcessPoolExecutor, as_completed


def read_image_pil(img_path):
    """
    使用 PIL 读取图像,并转换为 RGB 格式的 NumPy 数组。
    """
    try:
        with Image.open(img_path) as pil_img:
            pil_img = pil_img.convert('RGB')  # 确保图像为 RGB 模式
            img_rgb = np.array(pil_img)
            return img_rgb
    except Exception as e:
        print(f"无法使用 PIL 读取文件 {
     
     img_path},错误: {
     
     e}")
        return None


def process_image(img_path, output_dir, target_ratio=4 / 3, target_size=(460, 345)):
    """
    处理单张图像:检测人脸、对齐、裁剪、调整尺寸,并保存结果。
    """
    try:
        detector = MTCNN()

        # 读取图像(支持中文路径)
        img_rgb = read_image_pil(img_path)
        if img_rgb is None:
            return False

        # 在图像中检测人脸
        faces = detector.detect_faces(img_rgb)
        if not faces:
            print(f"未检测到人脸:{
     
     img_path}")
            return False

        # 处理检测到的第一个人脸
        face = faces[0]
        x, y, width, height = face['box']
        keypoints = face['keypoints']

        # 确保关键点存在
        if 'left_eye' not in keypoints or 'right_eye' not in keypoints:
            print(f"未检测到关键点(眼睛):{
     
     img_path}")
            return False

        # 对齐:使用两眼的位置计算旋转角度
        left_eye = keypoints['left_eye']
        right_eye = keypoints['right_eye']
        dx = right_eye[0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值