
搞清楚路径,创建图片帧对应的文件夹。
对应上一个代码视频切割图片。
单张图片进行人脸切割很简单,用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)#多线程
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)