利用梯度下降实现机器学习面部识别技术

版权申诉
0 下载量 22 浏览量 更新于2024-10-21 收藏 15KB ZIP 举报
资源摘要信息: "ML.zip_Machine Learning ML_facial recognition_machine learning" 该压缩包文件标题提示了里面包含的内容主要涉及机器学习和面部识别技术。具体来说,资源将围绕使用梯度下降算法在机器学习领域中进行面部识别的研究和应用。机器学习(ML)是人工智能的一个分支,它让计算机能够通过从数据中学习来提高性能,而面部识别是一种常见的生物识别技术,用于通过分析人脸图像来识别或验证个人身份。 描述部分提到"Machine Learning for facial recognition with gradient descent",这意味着文件中的内容很可能涉及使用梯度下降算法来优化面部识别模型。梯度下降是一种在机器学习中用于最小化成本函数的优化算法,它通过迭代来调整模型参数,从而使得模型在训练数据上的性能越来越好。 标签"machine_learning_ml"、"facial_recognition"和"machine_learning"进一步确认了资源内容的范围,涉及机器学习技术和面部识别应用。 文件名称列表中的文件可能包含了实际的代码实现、数据处理流程和相关的工具或库,这些名称暗示了它们各自的功能: - Overfit.py: 此文件可能与防止过拟合相关,过拟合是机器学习中一个常见的问题,指的是模型对训练数据学习得太好,以至于失去了泛化能力。 - Gradient.py: 这个文件很可能是用于实现梯度下降算法的代码。 - Multiple.py: 可能包含处理多个数据集或多个机器学习任务的代码。 - faces_nodownload.py: 可能是用于处理面部数据集但不涉及下载的代码。 - faces.py: 包含用于处理面部识别任务的核心代码。 - Random.py: 可能包含随机数生成或随机过程相关的内容,例如随机初始化权重或使用随机梯度下降算法。 - Downloader.py: 可能是一个用于从网上自动下载面部图片数据集的工具。 - Cropping.py: 包含用于从图片中裁剪面部区域的代码。 - Resize.py: 包含用于调整图片大小的代码,这对于准备输入数据以适应特定的模型或数据格式是非常重要的。 综合以上信息,可以推测出这个压缩包是一个关于机器学习在面部识别领域的应用教程或项目集,涉及了梯度下降优化、数据预处理(裁剪和调整图片大小)、防止过拟合等关键技术点。对于学习者来说,这可能是一个很好的资源,可以从中学习如何使用机器学习技术解决实际问题,特别是面部识别这一热门领域。此外,它可能还包括一些自动化工具来处理数据集,提高了学习和研究的效率。 通过阅读和研究这些代码文件,可以更深入地理解机器学习模型的工作原理,特别是在面部识别任务中的应用,以及如何使用梯度下降算法来训练和优化模型。此外,学习者将能够了解如何处理和准备面部识别相关的数据集,包括数据下载、裁剪和大小调整等预处理步骤。这不仅有助于提升理论知识,也能提高解决实际问题的能力。

import face_recognition import cv2 import os unknow_people_list = [i for i in os.listdir('unknow_people') if (i.endswith('.jpg')) or (i.endswith('.png')) or (i.endswith('.jpeg'))] know_people_list = [i for i in os.listdir('know_people') if (i.endswith('.jpg')) or (i.endswith('.png')) or (i.endswith('.jpeg'))] def face_select(): for unknow_people in unknow_people_list: # 读取待识别图片 unknow = face_recognition.load_image_file('unknow_people/' + unknow_people) # 将待识别图片转化为特征向量 unknow_encode = face_recognition.face_encodings(unknow)[0] flag = False for know_people in know_people_list: # 读取计算机已经认识的图片 know = face_recognition.load_image_file('know_people/' + know_people) # 获得面部位置 face_location1 = face_recognition.face_locations(know) face_location2 = face_recognition.face_locations(unknow) # 提取面部关键点 face_landmarks_list1 = face_recognition.face_landmarks(know) face_landmarks_list2 = face_recognition.face_landmarks(unknow) # 图片转化为特征向量 know_encode = face_recognition.face_encodings(know)[0] # 两张图片进行比较的结果 res = face_recognition.compare_faces([know_encode], unknow_encode, tolerance=0.5) if res[0]: flag = True name = know_people.split(".")[0] break if flag: print(f'{name}匹配成功!') else: print(f'匹配失败') name = "UNKNOWN" # 绘制人脸特征点和矩形框 for (x1, y1, w1, h1) in face_location1: cv2.rectangle(know, (y1, x1), (h1, w1), (255, 0, 0), 2) cv2.putText(know, name, (y1 - 10, x1 - 10), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 2) for face_landmarks in face_landmarks_list1: for facial_feature in face_landmarks.keys(): for pt_pos in face_landmarks[facial_feature]: cv2.circle(know, pt_pos, 1, (192, 192, 192), 2) for (x1, y1, w1, h1) in face_location2: cv2.rectangle(unknow, (y1, x1), (h1, w1), (255, 0, 0), 2) cv2.putText(unknow, name, (y1 - 10, x1 - 10), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 2) for face_landmarks in face_landmarks_list2: for facial_feature in face_landmarks.keys(): for pt_pos in face_landmarks[facial_feature]: cv2.circle(unknow, pt_pos, 1, (192, 192, 192), 2) # 显示图片 cv2.imshow("known", know) cv2.imshow("unknown", unknow) cv2.waitKey(0) if __name__ == '__main__': face_select()

2023-06-02 上传