第16课 火眼金睛——人脸识别
| **学科:**人工智能 | 年级: 七年级上 |
|---|---|
| **课题:**第16课时 火眼金睛——人脸识别 | 课时数:1 |
教学目标:
理解人脸识别的原理;
能够读懂人脸识别代码;
掌握级联分类器CascadeClassifier的使用方法;
会使用training.py程序建立人脸模型;
会使用test.py程序进行人脸识别;
教学重点:
理解人脸识别的原理。
教学难点:
级联分类器CascadeClassifier的使用方法。
教学准备:
示例图片,程序代码文件(!!所有的图片、代码必须以英文命名)
教 学 过 程
一、开放导入
1.展示一张本班级同学的照片,再展示一张班级合照,让大家从班级合照中找到这位同学。
2.展示一张其他学校其他班级学生的照片,再展示一张班级合照,让大家从班级合照中找到这位同学。
3.展示一张双胞胎的个人照,再展示一张双胞胎的合照,让大家从合照中找到这个人。
4.展示一张本班级同学的照片(遮住面部其它部分,只露出嘴巴),让大家从合照中找到这位同学。
结论:
活动1熟悉的人,识别时间短,准确率高
活动2陌生的人,脸部特征明显,识别时间较长,准确率较高
活动3陌生的人,脸部特征不明显,识别时间长,准确率低
活动4熟悉的人,脸部特征不明显,识别时间长,准确率低
为什么看到一个人的脸部照片你能认出他是谁?
1). 观察他的长相模样(五官特征);
2).与记忆中的模样(五官特征)进行比较;
3).根据相似程度认他是谁;

在人工智能领域现在也能做到人脸识别,并且比人做的还要好。
播放人工智能视频。
看图识人的关键点在于找到跟其他人长相不一样的地方(面部特征)
二、核心过程推进
1.人脸识别
人脸识别技术是基于人的脸部特征进行身份识别的一种生物识别技术。人眼的识别准确率识别率还是97.5%,在2014年电脑的准确率达到了98.5%,而到了2017年,电脑的已经达到一亿分之一的误识率。
2.电脑进行人脸识别的过程
电脑进行人脸识别的过程与人眼的识别过程很像。
0).对电脑进行训练,让他记住人的模样,在电脑的大脑中形成记忆。
(face_training.py)
'''
程序:训练人脸识别器,生成人脸特征数据
'''
import cv2, numpy, os
#创建人脸检测器和识别器
labels, faces = [], []
file = 'lbpcascade_frontalface_improved.xml'
face_cascade = cv2.CascadeClassifier(file)
recognizer = cv2.face.LBPHFaceRecognizer_create()
def detect_face(image):
'''检测人脸区域'''
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.2, 5, minSize=(20, 20))
if (len(faces) == 0):
return None
(x, y, w, h) = faces[0]
return gray[y:y+w, x:x+h]
def read_face(label, images_path):
'''读取人脸图像'''
print('trainning:', label, images_path)
files = os.listdir(images_path)
for file in files:
if file.startswith('.'):
continue
#从文件中读取图像
image = cv2.imread(images_path + '/' + file)
#检测图像中的人脸区域
face = detect_face(image)
if face is not None:
face = cv2.resize(face, (256, 256))
faces.append(face)
labels.append(label)
if __name__ == '__main__':
#读取人脸图像
read_face(1, 'training/spider_man/')
read_face(2, 'training/iron_man/')
read_face(3, 'training/gdg/')
#训练人脸识别器
recognizer.train(faces, numpy.array(labels))
#保存人脸特征数据
recognizer.save('trainner.yml')
1).电脑对输入的人脸图像或者视频,首先判断其是否存在人脸,如果存在人脸,则进一步检测人脸的位置、大小和各个主要面部器官的位置信息。
2).并依据这些信息,进一步提取人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比。
3).识别出人脸的身份。
(face_check.py)
import cv2
import os
import time
start = time.time()
#创建人脸检测器和识别器,第二个是人脸训练文件夹
names = ('None', 'Spider Man', 'Iron Man','gdg')
file = 'lbpcascade_frontalface_improved.xml'
face_cascade = cv2.CascadeClassifier(file)
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainner.yml')
test_img = cv2.imread('testing/test03.jpg') # 读取要识别的图像
gray_img = cv2.cvtColor(test_img,cv2.COLOR_BGR2GRAY) # 将读取的图像转换为灰度图
faces = face_cascade.detectMultiScale(gray_img,1.2,5) # 从读取的图像中将人脸截取出来
#对检测出的每一个人脸图像进行测试
for (x, y, w, h) in faces:
face = gray_img[y:y+w, x:x+h]
face = cv2.resize(face, (256, 256))
#使用人脸识别器预测图像
label, confidence = recognizer.predict(face) #lable表示训练目标的序号,参看face_training.py
confidence = 100 - confidence #相似值,值越大,表明是目标图像的可能越大
if label > 0 and confidence >50: # 检测人脸,如果与训练目标一致,且相似度超过50%
cv2.rectangle(test_img,(x,y),(x+w,y+h),(255,0,0),2) # 在照片人脸区域画矩形表示识别出人脸
text = '%s:%d' %(names[label], confidence)
print(text)
font = cv2.FONT_HERSHEY_PLAIN
cv2.putText(test_img,text,(x,y),font,2.5,(0,255,0),2) # 在矩形左上角显示识别信息
# 显示图像并等待
cv2.imshow('image',test_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
先运行face_training.py对电脑进行训练,经过训练的电脑可以识别郭德纲、钢铁侠和蜘蛛侠。
然后运行face_check.py进行人脸识别。
三、开放延伸
通过本节课的学习,你有哪些收获呢?
更多推荐




所有评论(0)