我使用录屏工具获得视频,并命名为.mp4格式
提取帧
ffmpeg -i /Users/hehui/Documents/video.mp4 /Users/hehui/faceswap/src/cage/video-frame-%d.png
从照片中提取人脸:
#-*-coding:utf8-*-
import os
import cv2
import time
import shutildef getAllPath(dirpath, *suffix):PathArray = []for r, ds, fs in os.walk(dirpath):for fn in fs:if os.path.splitext(fn)[1] in suffix:fname = os.path.join(r, fn)PathArray.append(fname)return PathArraydef readPicSaveFace_1(sourcePath,targetPath,invalidPath,*suffix):try:ImagePaths=getAllPath(sourcePath, *suffix)#对list中图片逐一进行检查,找出其中的人脸然后写到目标文件夹下count = 1# haarcascade_frontalface_alt.xml为库训练好的分类器文件,下载opencv,安装目录中可找到face_cascade = cv2.CascadeClassifier("/Users/hehui/Downloads/opencv-3.4.6/data/haarcascades/haarcascade_frontalface_alt.xml")for imagePath in ImagePaths:try:img = cv2.imread(imagePath)if type(img) != str:faces = face_cascade.detectMultiScale(img, 1.1, 5)if len(faces):for (x, y, w, h) in faces:# 设置人脸宽度大于16像素,去除较小的人脸if w>=1 and h>=1:# 以时间戳和读取的排序作为文件名称listStr = [str(int(time.time())), str(count)]fileName = ''.join(listStr)# 扩大图片,可根据坐标调整X = int(x)W = min(int(x + w),img.shape[1])Y = int(y)H = min(int(y + h),img.shape[0])f = cv2.resize(img[Y:H, X:W], (W-X,H-Y))cv2.imwrite(targetPath+os.sep+'%s.jpg' % fileName, f)count += 1print (imagePath + "have face")#else:# shutil.move(imagePath, invalidPath)except:continueexcept IOError:print ("Error")else:print ('Find '+str(count-1)+' faces to Destination '+targetPath)if __name__ == '__main__':invalidPath = r'/Users/hehui/faceswap/src'sourcePath = r'/Users/hehui/faceswap/src/deppf' targetPath = r'/Users/hehui/faceswap/src/depp'readPicSaveFace_1(sourcePath,targetPath,invalidPath,'.png','.PNG','jpg','JPG')