美文网首页822思享实验室
制作人脸数据集python+opencv

制作人脸数据集python+opencv

作者: HellyCla | 来源:发表于2018-03-10 16:50 被阅读410次

在网上爬取了成吨的图像之后,要想对人脸进行特征提取或者转换等一系列后续操作,还需要将人脸部分截取出来。
使用github上一个基于opencv的工具:nagadomi/lbpcascade_animeface

虽然他给了一个例子,但还是需要自己调整编写一下使用代码。

import cv2,random
from PIL import Image
from PIL import ImageFile
import imghdr
import sys
import os.path
from glob import glob


def detect(filename, cascade_file="../lbpcascade_animeface.xml"):
    if not os.path.isfile(cascade_file):
        raise RuntimeError("%s: not found" % cascade_file)

    cascade = cv2.CascadeClassifier(cascade_file)
# 这一段是为了防止数据集中有非jpg的图像,如果有,即转换一下格式
    ImageFile.LOAD_TRUNCATED_IMAGES = True
    if imghdr.what(filename) == "png":
        Image.open(filename).convert("RGB").save(filename)
######
    image = cv2.imread(filename)
#    print(image.shape)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.equalizeHist(gray)

    faces = cascade.detectMultiScale(gray,
                                     # detector options
                                     scaleFactor=1.1,
                                     minNeighbors=5,
                                     minSize=(48, 48))
    for i, (x, y, w, h) in enumerate(faces):
        face = image[y:y + h, x:x + w, :]
        face = cv2.resize(face, (96, 96))
        save_filename = '%s-%d.jpg' % (os.path.basename(filename).split('.')[0], i)
        cv2.imwrite("faces/" + save_filename, face)

if __name__ == '__main__':
    if os.path.exists('faces') is False:
        os.makedirs('faces')
    file_list = glob('C:\\Users\changjianhui\Pictures\imgs\FStar\*.jpg')
    for filename in file_list:
#        print(filename)
        detect(filename)

由于我们在网上下的图像的实际类型比较杂,经常混有许多实际类型不是.jpg,或者图像类型不明的图,此时就会持续报一个错:

cv2.error: C:\ci\opencv_1512688052760\work\modules\imgproc\src\color.cpp:11048: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor

我在调试时,读取图像之后,使之输出:

print(image.shape)

即可获得每一张图像的通道数,当nonType的图像出现,我们可以判定这张图是非法图像,去除即可。出现其他错误优先检查路径和类型是否正确。

效果图如下:


处理之前
处理之后

相关文章

网友评论

    本文标题:制作人脸数据集python+opencv

    本文链接:https://www.haomeiwen.com/subject/qokbfftx.html