EduCoder:人脸识别系统——OpenCV人脸检测
第1关:图片基本操作
编程要求:
请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求:
-
导入openCV库(cv2);
-
读取路径 step1/image/girl.jpg下的图片(图片读取模式三种任选一种都可以);
-
将读取到的图片保存到路径 step1/out/girl-new.jpg下。
代码如下:
'''****************BEGIN****************'''
# 导入OpenCV库
import cv2
'''**************** END ****************'''
# 原始图片路径
image_path = 'step1/image/girl.jpg'
# 保存图片路径
save_image_path = 'step1/out/girl-new.jpg'
'''****************BEGIN****************'''
# 读取图片并保存图片
img = cv2.imread(image_path,1)
cv2.imwrite(save_image_path,img)
'''**************** END ****************'''
第2关:色彩空间及其转换
编程要求:
请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求:
-
将图片的色彩空间转换为灰度空间;
-
将处理后的图片保存到路径step2/out/girl-gray.jpg下。
代码如下:
import cv2
# 加载图片
filename = "step2/image/girl.jpg"
img = cv2.imread(filename)
'''****************BEGIN****************'''
# 将图片的色彩空间由BGR转换GRAY
output_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
'''**************** END ****************'''
save_image_path = "step2/out/girl-gray.jpg"
'''****************BEGIN****************'''
# 保存图片
cv2.imwrite(save_image_path,output_img)
'''**************** END ****************'''
第3关:基于Harr特征的人脸检测分类器
编程要求:
请在右侧编辑器中的BEGIN-END之间编写代码,调用Harr完成人脸识别,具体任务如下:
-
读取图片;
-
转化图片为灰度图片;
-
声明人脸检测器;
-
调用人脸检测函数,scaleFactor参数设定为1.3, minNeighbors参数设定为5。
代码如下:
import numpy as np
import cv2
'''****************BEGIN****************'''
# 读取图片
image_path = 'step3/image/face.jpg'
img = cv2.imread(image_path)
# 转换为灰度图片
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测器
modle_path = 'sample/data/haarcascades/haarcascade_frontalface_default.xml'
face_cascade =cv2.CascadeClassifier(modle_path)
# 识别人脸
faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
'''**************** END ****************'''
print(faces)
第4关:绘制人脸与人眼区域
编程要求:
请在右侧编辑器中的BEGIN-END之间编写代码,调用Harr完成人脸识别,具体任务如下:
-
绘制人脸区域;
-
调用眼睛检测模型,识别眼睛区域;
-
绘制眼睛区域。
代码如下:
import cv2
# 读取图片
img = cv2.imread('step4/image/girl.jpg')
# 转换为灰阶图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测器
face_cascade = cv2.CascadeClassifier('sample/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 绘制人脸区域
for (x,y,w,h) in faces:
print(x,y,w,h)
'''****************BEGIN****************'''
# 在人脸区域添加矩形框
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
face_gray = gray[y:y+h, x:x+w]
#原图像的脸部区域
face_area = img[y:y+h, x:x+w]
'''**************** END ****************'''
#绘制眼睛区域
path_of_haarcascade_eye = "sample/data/haarcascades/haarcascade_eye.xml"
eye_cascade = cv2.CascadeClassifier(path_of_haarcascade_eye)
eyes = eye_cascade.detectMultiScale(face_gray)
'''****************BEGIN****************'''
for (ex,ey,ew,eh) in eyes:
print(ex,ey,ew,eh)
# 在眼睛区域添加矩形框
cv2.rectangle(face_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
'''**************** END ****************'''
# 保存图片
save_image_path = "step4/out/girl-drawing.jpg"
cv2.imwrite(save_image_path,img)