最近做LoRA模型训练时需要对一批图片进行人脸识别,并进行裁剪,然后设置特定的分辨率。
首先要导入cv库import cv2
如果没有opencv库的话要用pip先安装一个pip install opencv-python
1、识别出图片面部,并截取原图片靠近面部的最大正方形部位,同时将截取的图片分辨率改为512*512
import numpy as np
import cv2
import os
def crop_face(input_folder_path, output_folder_path):
# 加载面部识别模型
face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
images = os.listdir(input_folder_path)
for image in images:
image_path = os.path.join(input_folder_path, image)
img = cv2.imread(image_path)
height, width, channels = img.shape
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测面部
faces = face_detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))
# 无法识别面部的图片
if len(faces)==0:
print(f"No face found in {
image_path}")
return
if len(faces) > 0:
# 取第一个脸部位置,这里假设一张图片只有一个脸部特征
# x、y 为人脸的像素位置,w、h 为人脸的宽度和高度。
x, y, w, h = faces[0]
# 确定最大正方形的位置
# 原图片竖方向长,截取正方形长度为原图横方向长,square_size截取正方形的长度
if height>width:
square_size = width
x1=0
x2