In [ ]:
#detect faces from image files and save faces to disk
#2017.8.1
In [11]:
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import os
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
In [2]:
def detectFaces(image_name):
img = cv2.imread(image_name)
face_cascade = cv2.CascadeClassifier('C:/Users/Max/Anaconda3/pkgs/opencv3-3.1.0-py35_0/Library/etc/haarcascades/haarcascade_frontalface_default.xml')
if img.ndim == 3:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
else:
gray = img
faces = face_cascade.detectMultiScale(gray,1.2,5)#检测窗口的大小
result = []
for (x,y,width,height) in faces:
result.append((x,y,x+width,y+height))
return result
In [3]:
def saveFacles(image):
faces = detectFaces(image)
if faces:
#save_dir = 'image.split('.')[0]+"_faces"'
save_dir = 'D:/faces'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
count = 0
for (x1, y1, x2, y2) in faces:
file_name = os.path.join(save_dir,str(count)+".jpg")
Image.open(image).crop((x1,y1,x2,y2)).save(file_name)
count += 1
In [48]:
def drawFaces(image):
faces = detectFaces(image)
if faces:
img = Image.open(image)
draw_instance = ImageDraw.Draw(img)
for(x1,y1,x2,y2) in faces:
draw_instance.rectangle((x1,y1,x2,y2), outline=(255,0,0))
#img = mpimg.imread(image)
plt.imshow(img)
plt.axis('off')#是否显示坐标
plt.show()
In [52]:
#code here enable process many images
image = 'C:/Users/Max/Pictures/timg.jpg'
In [53]:
drawFaces(image)
In [54]:
saveFacles(image)
In [55]:
#result
img = mpimg.imread(image)
plt.imshow(img)
plt.axis('off')#是否显示坐标
plt.show()
imagename = 'D:/faces/0.jpg'
im = mpimg.imread(imagename)
plt.imshow(im)
plt.axis('off')#是否显示坐标
plt.show()