资源简介 (共20张PPT)第28课 人脸识别第六单元 AI项目工坊问题情境同学们每天上学进校门时,要刷卡或者登记才能进入。现在,学校打算升级门禁系统,使用更方便快捷的人脸识别技术。只要在摄像头前一站,系统就能自动识别出身份,判断是否可以通行。AI第28课 课堂导入刷脸门禁手机解锁无接触支付......在生活中,你知道的人脸识别技术的应用场景有哪些?你知道这些应用是如何实现的吗?问题情境第28课 课堂导入第28课 学习内容一 人脸识别过程三 训练模型二 准备数据四 调用模型识别人脸学习活动一、人脸识别过程第28课 学习内容你是如何通过人脸识别其他人呢?你在什么情况下会记住一个人的脸?哪些特征让你印象深刻?一、人脸识别过程第28课 学习内容遇见一个不认识的人或者看到一张陌生人的照片时,会不自觉地观察对方的脸、眼睛、鼻子、嘴巴……这是在收集那个人的面部特征。再次遇到或看到照片时,尽管场景、服饰等可能发生了变化,但人的大脑还是会立刻认出这个人来。一、人脸识别过程第28课 学习内容这就是人通过人脸识别他人的过程,具体可以分为三步:1.观察某人的面部,获取相关的特征信息;2.根据这些信息在头脑中建立相应的模型;3.根据建立的模型,识别出特定的人。机器进行人脸识别时,过程也与此相同。第28课 学习内容若要提取某人的面部特征,需要先把这个人的面部找出来。这个任务对人类来说很简单,但对计算机来说较为困难。当然,可以人工从照片中选取人脸区域,不过如果照片数量较多,那么采用人工方式来完成显然就不合适了。实际上可以使用一些编程工具来辅助完成,如专门用于处理计算机视觉问题的OpenCV库。这个库提供了一个现成的模型,可以把照片中的人脸单独选取出来。二、准备数据二、准备数据第28课 学习内容1.要像拍证件照那样让人脸清晰居中,避免美颜滤镜。2.背景尽量干净、单调,避免复杂花纹和装饰物,减少干扰。3.如果程序无法从某些照片中自动选取人脸,可考虑删除这些照片。采集照片时应遵守的原则二、准备数据第28课 学习内容1.把模型文件 haarcascade_frontalface_default.xml保存到程序所在的文件夹中。这个文件通常在 OpenCV 的安装文件夹里。2.建立名为“pics”的文件夹,将每个人的单人照片分别存入不同子文件夹中,如 p01、p02、p03、p04。每人最好准备多张照片,人的面部要正对镜头,背景越淡越好。通常符合要求的照片数量越多,收集到的数据越丰富,训练出来的模型质量就会越高。第27课 学习内容大家可以根据实际情况修改图像文件夹的路径和人物标签。# 引入编程模块,OpenCV 对应cv2 模块import os,cv2# 选取面部的函数,参数imgfile为图像文件def detect_face(classifier,imgfile):img = cv2.imread(imgfile,cv2.IMREAD_GRAYSCALE)faces = classifier.detectMultiScale(img)x,y,w,h=faces[0]return img[y:y+h, x:x+w]data_dir = '../data/faces'# faces 用来存放面部数据,labels用来做标记,区分是哪个人faces,labels=[],[]# 加载选取图像中人脸的模型classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# 把人脸和标签对应起来,p01表示第一个子文件夹for p,m in zip (['p01','p02','p03','p04'],[0,1,2,3]) :for img_file in os.listdir(f'{data_dir}/{p}'):face=detect_face(classifier ,f'{data_dir}/{p}/{img_file}’)faces.append(face); labels.append(m)# 展示选取的人脸for face in faces:cv2.imshow("image",face)# 显示1000毫秒,即1秒后自动关闭cv2.waitKey(1000)cv2.destroyAllWindows()二、准备数据3.根据前面所学,理解配套资源中的step1.py程序。二、准备数据第28课 学习内容4.运行程序选取照片中的人脸,相关的数据会保存到列表变量faces中。二、准备数据第28课 学习内容在检测、识别的过程中,通常需要将图像转换成灰度图的形式。这样做可以避免颜色干扰,同时抓住重点,脸上的皱纹、五官位置等关键特征在黑白对比下更明显。虽然彩色照片色彩丰富,但机器进行人脸识别时,使用黑白照反而更高效。原始图像可能大小不一,为了提高训练质量,可以考虑通过以下代码将图像中的人脸区域转换成相同大小:cv2.resize(img[y:y+h, x:x+w], (128,128))第28课 学习内容三、训练模型1.参考配套资源中的step2.py程序,编写训练人脸识别模型的函数。2.在主程序适当位置插入调用函数的代码,完成训练程序的编写工作。3.运行程序,待图像展示完毕,文件夹中会出现名为face_mod.xml的文件,这个文件就是训练得到的模型。# 训练人脸识别模型def gen_recognizer(faces,labels):# 调用OpenCV提供的人脸识别训练器recognizer = cv2.face.LBPHFaceRecognizer_create()# 利用面部数据和标记,训练模型recognizer.train(faces, np.array(labels))recognizer.save('face_mod.xml')# 放到主程序的合适位置gen_recognizer(faces,labels)第28课 学习内容三、训练模型计算机通过学习多张人脸图像及其对应的身份标签,建立起人脸特征与身份之间的对应关系,并将这些信息保存在模型文件中。这个模型就像是一个“数字大脑”,在后续的人脸识别任务中可以用来判断新输入的人脸属于哪一个人。训练模型就是让计算机记住这些人的脸。第28课 学习内容四、调用模型识别人脸 对照片进行人脸识别,其实包括两个步骤:1.找出照片中的人脸区域;2.利用模型对人脸进行识别。整体流程:读取图像→选取人脸区域→调用模型进行识别→显示结果第28课 学习内容四、调用模型识别人脸 # import os,cv2names=['ying zi','xiao xue ','hehe',meng meng'] # 不同标记对应的不同人员# 加载已有模型,用于找出人脸区域classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')recognizer = cv2.face.LBPHFaceRecognizer_create()# 加载生成的模型,用于识别人脸recognizer.read('face_mod.xml')font=cv2.FONT_HERSHEY_PLAINfor file in os.listdir('pics/test'): # 读取图像文件img = cv2.imread(f'pics/test/{file}')gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转化为灰度图faces = classifier.detectMultiScale(gray_img)x,y,w,h=faces[0]# 选取人脸数据face_data=gray_img[y:y + h, x:x + w]# 获取标记和相关数据mark, confidence = recognizer.predict(face_data)# 根据获取的标记,得到照片对应的人员名字name=names[mark]cv2.putText(img,name, (50, 50),font , 2, (255, 0, 255), 2)cv2.imshow("image",img)cv2.waitKey(0)cv2.destroyAllWindows()1.准备一些用来进行识别的照片,并把这些照片杂乱地放在一个文件夹中,如pics的test子文件夹。2.参考配套资源中的step3.py程序,编程调用模型进行人脸识别。第28课 学习内容四、调用模型识别人脸 3.运行程序观察识别效果。可以看到,训练得到的模型将待测照片中的人都识别出来了。如果遇到不认识的人,模型是如何怎么处理的?该如何进行改进?第28课 课堂总结1. 人脸识别过程主要有三个步骤:收集特征、建立模型、识别身份。2. 开发人脸识别系统过程中,主要使用了自动选取人脸、模型和调用模型进行人脸识别的程序。第28课 拓展与提升近年来,儿童和老年人走失的事件时有发生,不仅给家庭带来巨大痛苦,也给社会公共安全提出了新的挑战。随着人工智能技术的发展,人脸识别技术因其高效、非接触、易部署等优势,在公共安全和身份识别领域展现出广阔的应用前景。许多城市已经开始将人脸识别系统应用于重点区域监控、身份核验、异常行为预警等方面。结合所学知识,尝试设计一个基于人脸识别的“防走失及快速寻人”系统。如果能根据走失前的照片,计算出若干年后的照片,再进行人脸识别,那识别的准确度应该会提升很多。 展开更多...... 收起↑ 资源预览 当前文档不提供在线查看服务,请下载使用!