手把手教你实现人脸识别,有手就行

举报
川川菜鸟 发表于 2022/04/14 03:00:06 2022/04/14
【摘要】 应用领域 金融领域。人脸识别当前在金融领域的应用最为广泛,当前国内金融领域监管要求严格,金融相关产品都需要实名认证,并且具有较高的安全性要求,活体识别,银行卡ocr识别,身份证ocr识别,人证对比等在各...

应用领域

  • 金融领域。人脸识别当前在金融领域的应用最为广泛,当前国内金融领域监管要求严格,金融相关产品都需要实名认证,并且具有较高的安全性要求,活体识别,银行卡ocr识别,身份证ocr识别,人证对比等在各大手机银行,金融app,保险app等都已经成为不可或缺的一个环节
  • 安保领域。目前大量的企业,住宅,社区,学校等安全管理越来越普及,人脸门禁系统已经成为非常普及的一种安保方式。
  • 通行领域。很多城市的火车站已经安装了人脸识别通行设备,进行人证对比过检,有些城市的地铁站也可以通过人脸识别的方式进行地铁进出站通行。
  • 泛娱乐领域。现在市场上火爆的美颜相机,网络直播,短视频等都是建立在人脸识别的基础上对人脸进行美颜和特效处理。
  • 公安,司法领域。公安系统在追捕逃犯时也会利用人脸识别系统对逃犯进行定位,监狱系统目前也会对服刑人员通过人脸识别系统进行报警和安防
  • 自助服务设备。如银行的自动提款机,无人超市等。
  • 考勤及会务。如工作考勤,会议出席人脸墙等。目前人脸识别市场上的巨头主要有商场,也有很多领域内巨头公司投资的小公司。

第一步:导入模块

dlib模块安装其实是比较繁琐的,要认真耐心点,可以参考:dlib安装,如果不行再看看别的教程。

import sys
import cv2
import face_recognition #dlib 人脸识别库

  
 
  • 1
  • 2
  • 3

第二步:加载图片并数值化

测试图片为我的偶像:
在这里插入图片描述

face_img=face_recognition.load_image_file('1.png')
print(face_img)

  
 
  • 1
  • 2

打印结果:
在这里插入图片描述
输出为三维图像矩阵,把图像转为矩阵。

第三步:获取图片中的人脸数据

提取人脸特征编码,并获取到人脸五官的位置:

face_encodings=face_recognition.face_encodings(face_img)#进行特征提取向量化,获取人脸的编码
face_locations=face_recognition.face_locations(face_img)#五官对应的位置
print(face_encodings)

  
 
  • 1
  • 2
  • 3

图片中有几个人脸就有几个数组:
在这里插入图片描述

第四步:人数计算

这里只做判断两个人是否为一个人,超出两个就退出了

n=len(face_encodings)
print(n)
#这里只做判断两个人是否为一个人,超出两个就退出了
if n>2:
    print('超过两个人')
    sys.exit()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

打印可以分出是两个人:
在这里插入图片描述

第五步:人脸比较

#获取两个人的数据
face1=face_encodings[0]
face2=face_encodings[1]

result=face_recognition.compare_faces([face1],face2,tolerance=0.6)#人脸比较,,误差不超过0.6则可以,默认值也为0.6
print(result)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

返回:
在这里插入图片描述
判断出为不是同一个人。
再稍微修改一下,让表达更清楚:

if result==[True]:
    name='same'
    print('两个人为同一个人')
else:
    print('两者不是同一个人')
    name='different'

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

返回:
在这里插入图片描述

第六步:框出人脸写上文字

获取两个人脸位置坐标:

for i in range(len(face_encodings)):
    face_encoding=face_encodings[(i-1)] #倒序获取
    face_location = face_locations[(i - 1)]
    print(face_location)#获取人脸位置

  
 
  • 1
  • 2
  • 3
  • 4

返回:
在这里插入图片描述
元祖四个数值分别表示框人脸矩形框的四个点坐标。

获取到坐标后开始画框框并写上文字:

top,right,bottom,left=face_location#确定出坐标
    #画框框
    cv2.rectangle(face_img,(left,top),(right,bottom),(255,0,0))#传参分别为:图片,坐标,RGB颜色,框粗细
    #写字上去
    cv2.putText(face_img,name,(left-10,top-10),cv2.FONT_HERSHEY_DUPLEX,0.8,(255,255,0),2)#传参数分别为:图片,文字,坐标,字体,字体大小,颜色,粗细

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

第七步:显示处理好的图像

face_img_rgb=cv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)#确保颜色不要混乱
#展示图像
cv2.imshow('compare',face_img_rgb)
#设置等待关闭
cv2.waitKey(0)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

效果:
在这里插入图片描述
你只需要按步骤敲代码即可为全部代码,当然为了便于大家直接cv,代码展示如下:

# coding=gbk
"""
作者:川川
公众号:玩转大数据
@时间  : 2022/2/5 14:36
群:428335755
"""
import sys
import cv2
import face_recognition #dlib 人脸识别库


face_img=face_recognition.load_image_file('1.png')
# print(face_img)

face_encodings=face_recognition.face_encodings(face_img)#进行特征提取向量化,获取人脸的编码
face_locations=face_recognition.face_locations(face_img)#五官对应的位置
# print(face_encodings)

n=len(face_encodings)
print(n)
#这里只做判断两个人是否为一个人,超出两个就退出了
if n>2:
    print('超过两个人')
    sys.exit()

#获取两个人的数据
face1=face_encodings[0]
face2=face_encodings[1]

result=face_recognition.compare_faces([face1],face2,tolerance=0.6)#人脸比较,,误差不超过0.6则可以,默认值也为0.6
# print(result)
if result==[True]:
    name='same'
    print('两个人为同一个人')
else:
    print('两者不是同一个人')
    name='different'


for i in range(len(face_encodings)):
    face_encoding=face_encodings[(i-1)] #倒序获取
    face_location = face_locations[(i - 1)]
    # print(face_location)#获取人脸位置

    top,right,bottom,left=face_location#确定出坐标
    #画框框
    cv2.rectangle(face_img,(left,top),(right,bottom),(255,0,0))#传参分别为:图片,坐标,RGB颜色,框粗细
    #写字上去
    cv2.putText(face_img,name,(left-10,top-10),cv2.FONT_HERSHEY_DUPLEX,0.8,(255,255,0),2)#传参数分别为:图片,文字,坐标,字体,字体大小,颜色,粗细

face_img_rgb=cv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)#确保颜色不要混乱
#展示图像
cv2.imshow('compare',face_img_rgb)
#设置等待关闭
cv2.waitKey(0)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

标出了两个人脸并写上为different,就是不同的意思,当然本篇文章为了给大家简单介绍实现人脸识别,并没有做过多的复杂实现,近段时间我研究人脸识别也做了一些复杂的功能实现,感兴趣也可以一起聊聊。

更高阶的人脸识别项目

毕业设计: 人脸识别

文章来源: chuanchuan.blog.csdn.net,作者:川川菜鸟,版权归原作者所有,如需转载,请联系作者。

原文链接:chuanchuan.blog.csdn.net/article/details/122790313

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。