批量图片帧进行切脸

批量图片帧进行切脸,第1张

搞清楚路径,创建图片帧对应的文件夹。
对应上一个代码视频切割图片。
单张图片进行人脸切割很简单,用dlib识别到那个矩形框,就有了矩形的位置信息,然后在原图上进行切割。
保姆级教程。

import dlib # 人脸识别的库dlib
import numpy as np # 数据处理的库numpy
import cv2 # 图像处理的库OpenCv
import os
from PIL import Image
import multiprocessing as mp
from joblib import Parallel, delayed
# dlib预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 读取图像
path = "./full_images/"
video_fullname = os.listdir(path)#full_images文件里的所有文件夹名字
output_pic_data_path = "output_pic_data/"

for i in video_fullname:
    url = output_pic_data_path + i
    os.makedirs(url,exist_ok=True)

def extract_faces(j):
    name = str(j.split('.')[-2])
    # if int(name)%1==0:#间隔切脸
    path_pic_full = pathdir + '/' + j

    img = cv2.imread(path_pic_full)
    #grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    imgss = Image.open(path_pic_full)

    dets = detector(img, 1)     #返回值是,即一个矩形,表示为能够唯一表示这个人脸矩形框两个点坐标:左上角(x1,y1)、右下角(x2,y2)

    # print("人脸数:", len(dets))
    for k, d in enumerate(dets):
        now_box = (d.left(), d.top(), d.right(), d.bottom())
        now_img = imgss.crop(now_box)
        s = output_pic_data_path + i + '/' + name + '_' + str(k) + '.png'
        now_img.save(s)

#video_fullname是full_images文件里的所有视频文件夹名字
#video_pic_fullname是视频文件夹里的所有图片名字
#pathdir是视频文件夹的路径
for i in video_fullname:
     video_pic_fullname = os.listdir( path + i)        #['0000.png','0001.png'...]
     pathdir = path  + i        #./full_images/id0_0000
     Parallel(n_jobs=mp.cpu_count()-2)(delayed(extract_faces)(j) for j in video_pic_fullname)#多线程

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/942662.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-18
下一篇2022-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存