对MTCNN 人脸识别:从不同场景照片中获取登记照(1)进行了优化:
优化修改说明
-
保持原始文件名处理:
- 删除了所有与重命名文件相关的代码,直接使用原始文件名进行处理和保存,确保支持中文文件名。
-
并行处理:
- 继续使用
ProcessPoolExecutor进行多进程并行处理,提高处理效率。 - 确保每个进程独立初始化
MTCNN,以避免进程间共享问题。
- 继续使用
-
错误处理:
- 继续保留了对图像读取、关键点检测和裁剪过程中的错误处理,确保单个图像处理失败不会中断整个流程。
效果

说明:以上原始图片来至于互联网,若有侵权,联系删除!!!
环境创建请参考 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

最低0.47元/天 解锁文章
1323

被折叠的 条评论
为什么被折叠?



