iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何用Python写个简单但强大的人脸识别系统
  • 366
分享到

如何用Python写个简单但强大的人脸识别系统

2023-06-16 07:06:38 366人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

如何用python写个简单但强大的人脸识别系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。face_recognition是一个强大、简单、易上手的人脸识别开

如何用python写个简单但强大的人脸识别系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

face_recognition是一个强大、简单、易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,特别是兼容树莓派系统。 face_recognition一经开源发布就得到的广泛的热捧,使用简单,功能强大成为其非常显著的标签。face_recognition对于公司或者是一些工程实践性的应用场景来说是非常好用好上手的利器,不需要你有太多的理论基础就可以比较轻松地去完成一个识别项目,所以今天我们专门来讲解一下。

首先,face_recognition项目开源地址在这里:

https://GitHub.com/ageitgey/face_recognition

如何用Python写个简单但强大的人脸识别系统

网上有比较完整的api说明以及实例应用,我这里就不多去说明了。首先,使用face_recognition需要安装,可以通过 pip 完成。如果安装遇到报错可参考:

Https://yishuihancheng.blog.csdn.net/article/details/102679177

安装完成后就可以使用了,在编码前可以通过简单的测试来检验是否安装成功,如下所示:

如何用Python写个简单但强大的人脸识别系统

成功安装后,就可以进入使用了。

1、定位图像中的人脸

def demoFunc():      '''      在一张包含人脸的图片中圈出来人脸      '''      image = face_recognition.load_image_file("test.jpg")      face_locations = face_recognition.face_locations(image)      for one in face_locations:             y0, x1, y1, x0=one          cv2.rectangle(image, pt1=(x0, y0), pt2=(x1, y1), color=(0, 0, 255), thickness=3)      cv2.imshow('aaa', image)      if cv2.waiTKEy(0) & 0xFF == ord('q'):          cv2.destroyAllwindows()

从网上随便找了一张图片,如下所示:

如何用Python写个简单但强大的人脸识别系统

定位结果如下所示:

如何用Python写个简单但强大的人脸识别系统

感觉还是很强大的,当然了,在我实践的过程中也发现了部分图像识别检测人脸失败的问题,这个毕竟不是一个百分之百的问题,face_recognition更像是一个基础框架,帮助我们更加高效地去构建自己的人脸识别的相关应用。

2、切割图像中的每个人脸保存本地

def demoFunc():      '''      图片中人脸截图保存      '''      img = cv2.imread("test.jpg")      image = face_recognition.load_image_file("test.jpg")      face_locations = face_recognition.face_locations(image)  #(top, right, bottom, left)      for i in range(len(face_locations)):          y0, x1, y1, x0 = face_locations[i]          cropped = img.crop((x0,y0,x1,y1))  # (left, upper, right, lower)  左上角  右下角          cropped.save(str(i)+"_.jpg")         cropped.show()

使用的原始图像同上,结果如下所示:

如何用Python写个简单但强大的人脸识别系统

五张人脸都检测成功,并且保存成功,这里主要是要注意一些face_locations这个函数的返回结果,返回的子列表中每个子列表包含4个元素,分别是单张人脸图像的左上顶点和右下顶点坐标,主要需要注意的是这四个参数的顺序,我给出来的结果中(x0,y0)表示左上顶点的坐标,(x1,y1)表示右下顶点的坐标。

3、将图像中的每个人脸编码成一个128维的向量

def demoFunc():      '''      将图片中的每张人脸编码成一个128维长度的向量      '''      image = face_recognition.load_image_file("cl.jpg")      face_locations = face_recognition.face_locations(image)  #(top, right, bottom, left)       face_encodings = face_recognition.face_encodings(image, face_locations)  #将单个人脸数据转化为一个128维的向量      for one in face_encodings:          print('one: ',one)

进行到这里就不得不去讲一下face_recognition的一些应用原理,下面是我的一些总结,如有不当欢迎指教。

face_recognition模块人脸识别应用实现的原理:

(1) 给定想要识别的人脸的图片并对其进行编码(每个人只需要一张),并将这些不同的人脸编码构建成一个列表。编码其实就是将人脸图片映射成一个128维的特征向量。

(2) 计算图像向量之间的相似度根据阈值或者是容错度来决定是否是同一个人

(3) 输出识别结果标签。

毫不夸张地说,face_recognition整个的核心就在于这一块的向量化处理中,输入的每一张人脸图像都会被转化为一个128维的特征向量进行存储,128维特征向量的生成也是一个算法在里面的感兴趣的话可以去查一下深入了解一下,我这里就不展开了,之后的人脸识别就转化为了两个人脸图像之间向量相似度的问题了。

这里使用一张成龙大哥的图像来进行测试,原始图像如下所示:

如何用Python写个简单但强大的人脸识别系统

向量化结果如下:

如何用Python写个简单但强大的人脸识别系统

如果自己想要构建自己的个性化应用的话一般会选择在这里进行改造,首先就是需要保存这里的特征向量。

4、输入两张人脸图像,判断是否是同一个人

def demoFunc(one_pic='c1.jpg',two_pic='c2.jpg'):      '''      给定两张图片,判断是否是同一个人      '''      chenglong = face_recognition.load_image_file(one_pic)      unknown_image = face_recognition.load_image_file(two_pic)      biden_encoding = face_recognition.face_encodings(chenglong)[0]      unknown_encoding = face_recognition.face_encodings(unknown_image)[0]      results = face_recognition.compare_faces([biden_encoding], unknown_encoding)      print('results: ',results)      return results[0]

这里其实跟上面第三部分的有点相似,这部分是建立在第三部分基础上的只不过是自带了compare_faces这个相似度计算接口,这里其实可以自己去实现替换的。

同样,使用了两张成龙大哥的图像来进行测试,原始图像如下所示:

如何用Python写个简单但强大的人脸识别系统

如何用Python写个简单但强大的人脸识别系统

测试结果如下:

如何用Python写个简单但强大的人脸识别系统

5、脸部关键点识别和标注

def demoFunc(pic_path='cl.jpg'):      '''      脸部关键点识别、标注      '''      image = face_recognition.load_image_file(pic_path)      face_landmarks_list = face_recognition.face_landmarks(image)      print("I found {} face(s) in this photograph.".fORMat(len(face_landmarks_list)))      pil_image = Image.fromarray(image)      d = ImageDraw.Draw(pil_image)      for face_landmarks in face_landmarks_list:          for facial_feature in face_landmarks.keys():              print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature]))          for facial_feature in face_landmarks.keys():              d.line(face_landmarks[facial_feature], width=5)      pil_image.show()

脸部的关键点包括:鼻子、嘴巴、眼睛、眉毛等,这里还是用的上面成龙大哥的图片,下面的结果输出:

如何用Python写个简单但强大的人脸识别系统

如何用Python写个简单但强大的人脸识别系统

6、化妆

这部分是建立在第五部分基础上的,得到的面部的特征以后就可以进行自动化妆了,下面是具体的实现:

def demoFunc(pic_path="haiwang.jpg"):      '''      化妆      '''      image = face_recognition.load_image_file(pic_path)      face_landmarks_list = face_recognition.face_landmarks(image)      pil_image = Image.fromarray(image)      for face_landmarks in face_landmarks_list:          demo = ImageDraw.Draw(pil_image, 'RGBA')          demo.polyGon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128))          demo.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128))         demo.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=2)          demo.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=2)          demo.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128))          demo.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128))          demo.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=2)          demo.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=2)          demo.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30))          demo.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30))          demo.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=2)          demo.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0, 110), width=2)          pil_image.show()

这里使用海王的一张图片来进行测试,原始图像如下所示:

如何用Python写个简单但强大的人脸识别系统

处理后结果如下:

如何用Python写个简单但强大的人脸识别系统

还可以是这样的:

如何用Python写个简单但强大的人脸识别系统

7、基于face_recognition构建自己的简单人脸识别应用

上面介绍了很多face_recognition的应用,这里才是最重要的内容我觉得是这样的,基于已有的功能来实现我们自己的个性化应用,我这里只是简单的抛砖引玉,给出来自己的最最简单的实现:

def faceRecognitionDemo(picDir='data/', test_pic='test.png'):      '''      基于 face_recognition 构建人脸识别模块      '''      pic_list=os.listdir(picDir)      for one_pic in pic_list:          one_pic_path=picDir+one_pic          one_res=demo6(one_pic=one_pic_path,two_pic=test_pic)          one_name=one_pic.split('.')[0].strip()          if one_res:              print('This Person is: ', one_name)              break          else:              print('This Person is not: ', one_name)

data文件夹数据截图如下:

如何用Python写个简单但强大的人脸识别系统

test.png内容如下:

如何用Python写个简单但强大的人脸识别系统

结果输出如下:

如何用Python写个简单但强大的人脸识别系统

当然了,实时计算肯定当前的计算方式不能满足的,这个只是一个最简单的应用而已,只想在这里抛砖引玉,这里是通过调用了face_recognition接口的形式来完成相似判定的工作的,还有一种非常常见的办法就是在得到人脸图像的128维特征向量之后就可以将人脸识别问题转化为基于机器学习模型的一个简单分类问题了,比如:SVM、RF、GBDT等都可以非常出色地完成上面的任务。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网Python频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何用Python写个简单但强大的人脸识别系统

本文链接: https://www.lsjlt.com/news/282692.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用Python写个简单但强大的人脸识别系统
    如何用Python写个简单但强大的人脸识别系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。face_recognition是一个强大、简单、易上手的人脸识别开...
    99+
    2023-06-16
  • 基于Python实现简单的人脸识别系统
    目录前言基本原理代码实现创建虚拟环境安装必要的库前言 最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完...
    99+
    2022-11-12
  • 如何使用MongoDB开发一个简单的人脸识别系统
    如何使用MongoDB开发一个简单的人脸识别系统人脸识别技术在当今社会中被广泛应用,它可以用于安全控制、人脸支付、人脸门禁等场景。利用MongoDB数据库与人脸识别算法结合,可以开发出一个简单而高效的人脸识别系统。本文将介绍如何使用Mong...
    99+
    2023-10-22
    人脸识别 MongoDB 简单
  • 教你如何用Python做人脸识别,简单易学!
    Python是一种计算机编程语言以及配套的软件工具和库。Python简单易学,代码十分简洁,它使用强制空白符作为缩进,这大大提高了Python的开发效率,使用Python能够在更短的时间内完成更多的工作。Python是一门开源的语言,并且P...
    99+
    2023-09-05
    python 开发语言
  • 如何使用Python实现简单的人脸识别功能
    小编给大家分享一下如何使用Python实现简单的人脸识别功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、首先梳理一下实现人脸识别需要进行的步骤:流程大致如此...
    99+
    2023-06-14
  • Python中如何实现简单人脸识别的示例
    这篇文章给大家分享的是有关Python中如何实现简单人脸识别的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、库介绍opencv,face_recognition,numpy,以及dlib注意:安装open...
    99+
    2023-06-14
  • 如何利用MySQL和C++开发一个简单的人脸识别功能
    要利用MySQL和C++开发一个简单的人脸识别功能,你可以按照以下步骤进行:1. 使用C++编写人脸识别程序的主要逻辑。你可以使用开...
    99+
    2023-10-20
    MySQL
  • 如何使用C++编写一个简单的人事管理系统?
    如何使用C++编写一个简单的人事管理系统?人事管理系统是一个用于管理和维护组织内人力资源相关信息的软件。它可以帮助组织进行员工管理、薪资核算、考勤统计、福利发放等工作。本文将介绍如何使用C++编写一个简单的人事管理系统,帮助读者理解人事管理...
    99+
    2023-11-02
    C++编程 简单 人事管理系统
  • 如何使用C++编写一个简单的图像识别程序?
    如何使用C++编写一个简单的图像识别程序?在现代科技的发展中,图像识别技术扮演了越来越重要的角色。无论是人脸识别、物体检测还是自动驾驶,图像识别都发挥着关键作用。本文将介绍如何使用C++编写一个简单的图像识别程序,帮助读者了解图像识别的基本...
    99+
    2023-11-03
    简单程序 图像识别 C++编程
  • 如何使用C++编写一个简单的网上商城系统?
    如何使用C++编写一个简单的网上商城系统?随着互联网的发展,电子商务已经成为人们购物的主要方式之一。为了满足用户的购物需求,开发一个简单实用的网上商城系统是非常有必要的。本文将介绍如何使用C++编写一个简单的网上商城系统。一、需求分析在开始...
    99+
    2023-11-02
    网上商城 C++编程 简单系统
  • 如何使用C++编写一个简单的酒店预订系统?
    酒店预订系统是一种重要的信息管理系统,它可以帮助酒店实现更高效的管理和更良好的服务。如果你想学习如何使用C++来编写一个简单的酒店预订系统,那么本文将为您提供一个基本的框架和详细的实现步骤。酒店预订系统的功能需求在开发酒店预订系统之前,我们...
    99+
    2023-11-03
    C++ 编写 酒店预订系统
  • 如何使用C++编写一个简单的物流管理系统?
    如何使用C++编写一个简单的物流管理系统?简介:物流管理系统是现代物流业中非常重要的一环,它能够帮助企业高效地管理运输、仓储、配送等物流环节。本文将介绍如何使用C++编写一个简单的物流管理系统,帮助读者了解C++的基本语法和面向对象的编程思...
    99+
    2023-11-04
    C++编写 简单系统。
  • 如何使用C++编写一个简单的医院挂号系统?
    如何使用C++编写一个简单的医院挂号系统?随着社会的进步和人们生活水平的提高,医疗服务的需求也变得越来越迫切。为了提高医疗服务的效率和便利性,许多医院开始采用电子化挂号系统。这篇文章将向您介绍如何使用C++编写一个简单的医院挂号系统。首先,...
    99+
    2023-11-03
    医院 C++ 挂号系统
  • 如何使用C++编写一个简单的学生选课系统?
    如何使用C++编写一个简单的学生选课系统?随着科技的不断发展,计算机编程已经成为了一种必备的技能。而在学习编程的过程中,一个简单的学生选课系统可以帮助我们更好地理解和应用编程语言。在本文中,我们将介绍如何使用C++编写一个简单的学生选课系统...
    99+
    2023-11-02
    C++ 编写 学生选课系统
  • 如何使用C++编写一个简单的餐厅预订系统?
    如何使用C++编写一个简单的餐厅预订系统?餐饮行业是一个快节奏的行业,餐厅经常需要面对繁忙的预订情况。为了有效管理预订,提高服务质量,很多餐厅都会使用电子预订系统。本文将介绍如何使用C++编写一个简单的餐厅预订系统。首先,我们需要定义餐厅预...
    99+
    2023-11-02
    C++ 简单 C++编程关键词: 餐厅预订系统
  • 如何利用MySQL和Java开发一个简单的人事管理系统
    要利用MySQL和Java开发一个简单的人事管理系统,你可以按照以下步骤进行:1. 创建数据库表:使用MySQL创建相关的数据库表,...
    99+
    2023-10-20
    MySQL
  • 如何使用C++编写一个简单的学生信息管理系统?
    如何使用C++编写一个简单的学生信息管理系统?学生信息管理系统是一款非常常见且实用的软件,用于管理和记录学生的基本信息、课程成绩等。本文将指导您如何使用C++编写一个简单的学生信息管理系统。首先,您需要确定学生信息管理系统的基本功能模块。常...
    99+
    2023-11-04
    C++ 编写 学生信息管理
  • 如何使用C++编写一个简单的汽车租赁管理系统?
    如何使用C++编写一个简单的汽车租赁管理系统?汽车租赁业务越来越受欢迎,这也导致了汽车租赁管理系统的需求增加。本文将介绍如何使用C++编写一个简单的汽车租赁管理系统。系统需求:我们需要一个能够管理租赁车辆的系统,包括以下功能:添加车辆信息:...
    99+
    2023-11-04
    C++ 汽车租赁 管理系统
  • 如何使用C++编写一个简单的学生宿舍管理系统?
    如何使用C++编写一个简单的学生宿舍管理系统?学生宿舍管理系统是一个可以方便管理学生宿舍信息的软件系统。使用C++编写一个简单的学生宿舍管理系统不仅可以锻炼编程技能,还可以提高对学生宿舍管理流程的理解和把握。本文将介绍如何使用C++编写一个...
    99+
    2023-11-03
    C++ 管理系统 学生宿舍
  • 如何使用C++编写一个简单的员工考勤管理系统?
    如何使用C++编写一个简单的员工考勤管理系统?概述:员工考勤管理是企业管理中非常重要的一环,它能够帮助企业实时记录和统计员工的考勤情况,提高工作效率和管理水平。本文将介绍如何使用C++语言编写一个简单的员工考勤管理系统,帮助读者了解基本的编...
    99+
    2023-11-02
    C++ 员工 考勤
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作