人脸识别项目之预处理检测人脸

1.前期抓取了部分人脸图片(5万多张,当然并非都是人脸图,所以今天要做的就是剔除不可用的图)备用,爬虫,请看爬虫篇章。 image.png

2.预处理代码

0.1,加载以下xml 来识别检测,可用的,分别存起来路径。

haarcascade_frontalface_default.xml haarcascade_eye.xml

0.2 使用OpenCV,numpy来进行预处理

# -*- coding: utf-8 -*- # 1 load xml 2 load jpg 3 haar gray 4 detect 5 draw import os import cv2 import numpy as np # 检测是否 def check_face(dirname, name):     # load xml 1 file name 加载处理模型     face_xml = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')     eye_xml = cv2.CascadeClassifier('./model/haarcascade_eye.xml')     # load jpg 加载人像图片     img = cv2.imread(dirname)     # haar gray 检测     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)     # detect faces 1 data 2 scale 3 5     faces = face_xml.detectMultiScale(gray, 1.3, 5)     # draw     index = 0     eyes = ''     for (x, y, w, h) in faces:         cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)         roi_face = gray[y:y + h, x:x + w]         roi_color = img[y:y + h, x:x + w]         # 1 gray         eyes = eye_xml.detectMultiScale(roi_face)         if (len(eyes) == 2):             fileName = './face/' + name + str(index) + '.jpg'             cv2.imwrite(fileName, roi_color)             index = index + 1     return {'face': len(faces), 'eye': len(eyes)};      def file_name(file_dir):     ft = open("./data/success.csv", "w")     fe = open("./data/error.csv", "w")     for root, dirs, files in os.walk(file_dir):         # print(root) #当前目录路径         # print(dirs) #当前路径下所有子目录         # print(files) #当前路径下所有非目录子文件         for i in files:             entry = root + '/' + i             if os.path.exists(entry):                 try:                     # ft.write(entry + '\n')                     name = i.split(".")[0]                     check = check_face(entry, name)                     if ((check['face'] == 1) & (check['eye'] == 2)):                         ft.write(entry + '\n')                     else:                         fe.write(entry + '\n')                 except OSError:                     pass                 continue             else:                 continue         # print("Error: 没有找到文件或读取文件失败")         ft.close()  # 在内容写完后再关闭文件 file_name('./feng')

3.预期结果,密集恐惧症要犯了!

image.png


本文链接:https://itarvin.com/detail-19.aspx

登录或者注册以便发表评论

登录

注册