Python实现人脸识别(50行代码包会)

一、安装windows c++,cmake,dlib,face_recognition

1. 安装visualStudio, visualStudio 结果不对的,至少要选上C++开发环境;

image.png

 

 

3. pip安装的下载地址超级慢会出现报错的情况,换成国内阿里镜像(可换为国内其他镜像),下载就很快,命令:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

 

 

4. 安装 pip install cmake ----->安装完成

image.png

 

5. 接下来,我们安装dlib库,运行命令 Pip installed  dlib,结果不带顺利,报错了,需要我们把pip升级到19.2.1的版本才能继续安装 (pip 19.2.1以下版本可能存在安装不成功的可能性)

升级pip,运行cmd命令,打开控制台,输入python -m pip install --upgrade pip

image.png

安装 dlib  命令: pip install dlib 该安装比较慢且占用cpu 较高

 

 image.png

6.安装face_recognition, 命令:pip install face_recognition  安装提示安装完成 则表示已成功安装face_recognition,安装过程曲折,终于大功告成。

 

二、人脸识别代码

原理很简单,人脸特征在计算机是用数字来存储,叫人脸特征向量,这些数据记录人脸的长,高,肤色等等,根据这些特征通过face_recognition库从图片中获取,通过矩阵二范数运行计算出相似度,由我们自定义个阈值,相似度在这个阈值内,两张图片判定为同一个一个人

1.获取人脸特征向量

#获取人脸库特征向量

def getFaceEncoding(src):
    image = face_recognition.load_image_file(src)
    face_locations = face_recognition.face_locations(image)
    face_encoding = face_recognition.face_encodings(image, face_locations)[0]
return face_encoding
 

2.计算相似度

xl1=getFaceEncoding(imgSrc1)
xl2=getFaceEncoding(imgSrc7)
#人脸对比,tolerance相似度阈值
match_results = face_recognition.compare_faces([xl1], xl2, tolerance=0.7)

完整代码

 face.py

import cv2
import face_recognition
import numpy as np
 
imgSrc1="C:/1.jpg"
imgSrc2="C:/2.jpg"
imgSrc3="C:/3.jpg"
imgSrc4="C:/4.jpg"
imgSrc5="C:/5.jpg"
imgSrc6="C:/6.jpg"
imgSrc7="C:/7.jpg"
 
#打开图片检测人脸
def openImg(src):
    image = face_recognition.load_image_file(src)
    face_locations = face_recognition.face_locations(image)
    #print(face_locations)
    image1=image*1
    image1[:,:,0]=image[:,:,2]
    image1[:,:,2]=image[:,:,0]
    for (A,B,C,D) in face_locations:
        cv2.rectangle(image1,(D,A),(B,C),(0,255,0),2)
    cv2.imshow('image',image1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
 
    face_encoding = face_recognition.face_encodings(image, face_locations)[0]
    print(face_encoding)
 
#获取人脸库特征向量
def getFaceEncoding(src):
    image = face_recognition.load_image_file(src)
    face_locations = face_recognition.face_locations(image)
    face_encoding = face_recognition.face_encodings(image, face_locations)[0]
    return face_encoding
 
#计算两张图片的相似度,范围:[0,1]
def simcos(A,B):
A=np.array(A)
B=np.array(B)
dist = np.linalg.norm(A - B) # 二范数
sim = 1.0 / (1.0 + dist) #
return sim
 
if __name__ == '__main__':
    xl1=getFaceEncoding(imgSrc1)
    xl2=getFaceEncoding(imgSrc7)
 
    #人脸对比,tolerance相似度阈值
    match_results = face_recognition.compare_faces([xl1], xl2, tolerance=0.7)
 
    # 测试两张图像中人脸比对的差值(不相似度)
    face_distances = face_recognition.face_distance([xl1], xl2)
 
    i=simcos(xl1,xl2)
    if i>0.7:
        print(True)
    else:
        print(False)
 
    #openImg(imgSrc3)

五、以上就是全部内容,如有疑问或发现bug请移步QQ群:855531299共同讨论学习;

源码地址:https://gitee.com/shangyakejiwenhua/sykj   

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值