python图片对比相似度_Python实现人脸识别(50行代码包会)

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

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

6c3c11bf3e57b41445c18c68bb8b8808.png

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

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

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

b37957173bc21b5284fe23e174c7db10.png

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

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

3e1d38986236f440423c1d03850c2e15.png

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

6dc68e14ef11d00178495f5376a37dca.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)

完整代码

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)

官网:http://www.sykjwh.cn

qq技术交流群:855531299

项目地址:https://gitee.com/shangyakejiwenhua/sykj

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值