Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别(照片对比)

9 篇文章 18 订阅
订阅专栏

1.安装包依赖

与上篇通过摄像头动态识别人脸一样,先下载好opencv-python、face-recognition,这里因为使用的是照片对比的方式,特意使用tkinter画了一个简单的GUI方便操作。

在python 3以上版本tkinter是环境自带的,所以这里不需要安装

2.代码示例

import os
import cv2
import numpy as np
import face_recognition
import tkinter as tk  
import tkinter.filedialog
from PIL import Image,ImageTk 

classNames=[]
img_path='Picture'
img_recognition_path='Recognition'
existsEncodeingList=[]
#对人脸集合进行编码进行处理
def findEncodeings(images):
    for img in images:
        #灰度处理
        img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2RGB)
        #face_encodings对图片对象a_images进行编码并返回数组0位置编码结果
        encode=face_recognition.face_encodings(img)[0]
        existsEncodeingList.append(encode)

#获取当前存储的人脸编码集合
def findExistsEncodeingList(img_path):
    images=[]
    #列出已经上传的所有图片
    imgList=os.listdir(img_path)
    #处理存储的图片得到其人脸编码
    for pic in imgList:
        img=cv2.imread('{}/{}'.format(img_path,pic))
        images.append(img)
        classNames.append(os.path.splitext(pic)[0])
    findEncodeings(images)

#选择并对比图片
def choosepic():
    choosepath = tkinter.filedialog.askopenfilename()
    path.set(choosepath)
    img_open = Image.open(entry.get()).resize((530,750))
    img = ImageTk.PhotoImage(img_open)
    lableShowImage.config(image=img)
    lableShowImage.image = img
    lableShowImage.place(x=30, y=70, width=530, height=750)
    faceRecognition(choosepath)

def faceRecognition(choosepath):
    frame=cv2.imread(choosepath)
    frameRGB=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2RGB)
    #对摄像头读取的检测人脸
    facesLocate=face_recognition.face_locations(frameRGB)
    #进行特征编码
    faceEncoded=face_recognition.face_encodings(frameRGB,facesLocate)
	#遍历检测的人脸和库中读取的图片进行对比,计算其相似度
    name='unknow'
    for (top,right, bottom,left),face_encoding in zip(facesLocate,faceEncoded):
        #进行匹配
        matchs=face_recognition.compare_faces(existsEncodeingList,face_encoding)
        #计算相似度
        distance=face_recognition.face_distance(existsEncodeingList,face_encoding)
        lab='unknow'
        for index, item in enumerate(distance):
           if item<0.5:
                if matchs[index]:
                    #得到匹配到的图片名称与相似度值
                    lab='name:{}; Similarity:{}'.format(classNames[index],item)
                    name=classNames[index]
                    break
        #初始化面部捕捉框显示绿色
        color1 =(0,255,0)
        if name =='unknow':
            #未能识别的时候显示蓝色
            color1 =(255,0,0)
        #画面部捕捉框
        cv2.rectangle(img=frame,pt1=(left,top),pt2=(right,bottom),color=color1,thickness=3)
        #在捕捉框上添加匹配到的图片信息
        cv2.putText(frame, lab, (left,top-8),cv2.FONT_HERSHEY_SIMPLEX, 0.7, color1, 2)
        cv2.imwrite('{}/{}.png'.format(img_recognition_path,name),frame)
    img_Recognition = Image.open('{}/{}.png'.format(img_recognition_path,name)).resize((530,750))
    img = ImageTk.PhotoImage(img_Recognition)
    lableShowImage2.config(image=img)
    lableShowImage2.image = img
    lableShowImage2.place(x=630, y=70, width=530, height=750)

if __name__ == '__main__':
    findExistsEncodeingList(img_path)
    #生成tk界面 app即主窗口
    app = tk.Tk()  
    #修改窗口titile
    app.title("show pictue")  
    #设置主窗口的大小和位置
    app.geometry("1200x900+200+50")
    #Entry widget which allows displaying simple text.
    path = tk.StringVar()
    entry = tk.Entry(app, state='readonly', text=path,width = 100)
    entry.pack()
    #使用Label显示图片
    lableShowImage = tk.Label(app)
    lableShowImage.pack()
     #使用Label2显示处理后的图片
    lableShowImage2 = tk.Label(app)
    lableShowImage2.pack()
    #选择图片的按钮
    buttonSelImage = tk.Button(app, text='choose picture', command=choosepic)
    buttonSelImage.pack()
    app.mainloop()

3.说明

首先我将需要被识别的人脸的照片预设到项目目录的Picture文件夹下,然后创建一个Recognition目录存放识别过的图片,这样方便在一个界面上展示对比结果照片。

 其实对比结果也可以不用存,直接将处理后的图片缓存直接展示在界面上,这里需要改一下此处的代码,将上述代码注释掉,然后换成下面的那行,通过数组直接转成图片

 但是效果会存在色彩的失真,效果如下:

也尝试了PIL的九种不同图片模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F,最终效果也没达到,大概与我resize((530,750))这个有关,也没继续纠结,有兴趣的同学可以尝试一下。

这里简单提下PIL的九种不同图片模式:

modes描述
11位像素,黑和白,存成8位的像素
L8位像素,黑白
P8位像素,使用调色板映射到任何其他模式
RGB3× 8位像素,真彩
RGBA4×8位像素,真彩+透明通道
CMYK4×8位像素,颜色隔离
YCbCr3×8位像素,彩色视频格式
I32位整型像素
F32位浮点型像素

4.实现效果

 

 

 可以实现简单的人脸对比,Similarity代表相似度值,值越小代表人脸与预设的图片越相似。

Python-3.1使用OpenCV人脸对比
wcuu的博客
12-07 1585
随着人工智能的不断发展,机器视觉越来越重要,如下介绍Opencv人脸对比应用,采用自训练模型方式,对期望人脸获取置信度
Python+OpenCV实现人脸识别签到考勤系统.zip
05-08
Python+OpenCV实现人脸识别签到考勤系统,系统实现的功能: 1.人员人脸识别并完成签到/签退 2.考勤时间计算 3.保存考勤数据为CSV格式(Excel表格)
基于Python+OpenCV+Django+人脸识别实现人脸识别系统源码+项目说明(课程设计).zip
01-03
基于Python+OpenCV+Django+人脸识别实现人脸识别系统源码+项目说明(课程设计).zip 基于Python+OpenCV+Django+人脸识别实现人脸识别系统源码+项目说明(课程设计).zip 基于Python+OpenCV+Django+人脸识别实现人脸识别系统源码+项目说明(课程设计).zip 【项目介绍】 本项目后端采用Python作为开发语言,Django作为WEB后端框架,用到的库有face_recognition人脸识别库,keras深度学习库,tensorflow,opencv计算机视觉库,Image等图片处理相关的第三方库。 【备注】主要针对正在做毕设的同学和需要项目实战的深度学习、cv图像识别模式识别方向学习者。 也可作为课程设计、期末大作业。包含:项目源码和项目操作说明等,该项目可直接作为毕设使用。 也可以用来学习、参考、借鉴。
探索未来的人脸识别技术:FaceRecognitionDotNet深度解析与应用
最新发布
gitblog_01007的博客
08-08 927
探索未来的人脸识别技术:FaceRecognitionDotNet深度解析与应用 FaceRecognitionDotNetThe world's simplest facial recognition api for .NET on Windows, MacOS and Linux项目地址:https://gitcode.com/gh_mirrors/fa/FaceRecognitionDot...
OpenCV识别出两张图片的人脸,并比较出两张人脸的相似度,并给出相似值(包含完整的工程!!)
03-28
OpenCV识别出两张图片的人脸,并比较出两张人脸的相似度,并给出相似值。 包含完整的工程文件,可立即运行!!! 用facedetect功能将两张图片中的人脸检测出来 将人脸部分的图片剪切出来,存到两张只有人脸的图片里。 将这两张人脸图片转换成单通道的图像 使用直方图比较这两张单通道的人脸图像,得出相似度。
使用python3.7和opencv4.1来实现人脸识别人脸特征比对以及模型训练
刘悦的技术博客
04-08 4160
第二步,就是为模型训练收集训练数据,还是通过摄像头逐帧来收集,在脚本运行过程中,会提示输入用户id,请从0开始输入,即第一个人的脸的数据id为0,第二个人的脸的数据id为1,运行一次可收集一张人脸的数据。第三步,对收集下来的人脸数据进行模型训练,提取特征,训练后,会将特征数据保存在项目目录中的face_trainer文件夹下面。一开始,我们可以简单的在摄像头中识别人的脸部和眼镜,原来就是用opencv内置的分类器,对直播影像中的每一帧进行扫描。这样就可以用国内的源来下载安装包。首先安装一些依赖的库。
Python人脸相似度对比
11-08
Python直接使用模型,实现一个简易版的人脸对比,非常有趣!
python人脸识别算法_python实现人脸识别经典算法(一) 特征脸法
weixin_39761422的博客
11-20 529
近来想要做一做人脸识别相关的内容,主要是想集成一个系统,看到opencv已经集成了三种性能较好的算法,但是还是想自己动手试一下,毕竟算法都比较初级。操作环境:python2.7第三方库:opencv for python、numpy第一种比较经典的算法就是特征脸法,本质上其实就是PCA降维,这种算法的基本思路是,把二维的图像先灰度化,转化为一通道的图像,之后再把它首尾相接转化为一个列向量,假设图像...
python笔记图片_Python学习笔记之图片人脸检测识别实例教程
weixin_39693295的博客
11-24 153
前言随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付、银行身份验证、手机人脸解锁等等。识别废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 haar 特征的 xml 文件,在图片上检测出人脸的坐标,利用这个坐标,我们可以将人脸区域剪切保存,也可以在原图上将人脸框出。代码实现:# -*-coding:utf8-*-#import osimpor...
python人脸识别opencv+face_recognition
07-27
OpenCV(开源计算机视觉库)和face_recognition库是Python实现人脸识别的两大利器。本教程将深入探讨如何结合这两个库进行高效的人脸识别。 首先,OpenCV是一个强大的计算机视觉库,它提供了丰富的图像和视频处理...
人工智能项目资料-基于python+face_recognition+opencv+pyqt5+百度AI实现人脸识别zip
02-04
人工智能项目资料-基于python+face_recognition+opencv+pyqt5+百度AI实现人脸识别、语音播报、语音合成、模拟签到系统 【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,...
opencv 人脸识别人脸对比
09-07
基于opencv开源库 摄像头人脸匹配 并与人脸库对比识别
VS2012 + Opencv2.4.9实现单张人脸检测及人脸比对
11-22
基于VS2012MFC对话框 + Opencv2.4.9 实现单张人脸检测及人脸比对。可运行,加载图片即可测试。
使用opencvface_recognition实现人脸识别和对比
10-12
使用的是opencv3.4.1版本。face_recognition可以使用apt-get install 安装,这也是为什么用ubuntu的原因。有问题欢迎留言讨论。
基于python+Django+keras深度学习+opencv+tensorflow开发的人脸识别系统+源码(毕设课设&项目)
04-09
基于python+Django+keras深度...本项目后端采用Python作为开发语言,Django作为WEB后端框架,用到的库有face_recognition人脸识别库,keras深度学习库,tensorflow,opencv计算机视觉库,Image等图片处理相关的第三方库。
Python实现一个简单的——人脸相似度对比
热门推荐
不脱发的程序猿
11-08 3万+
近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等。 幸庆的是,国内外许多大神都已经给我们造好“轮子”,我们可以直接来使用某些模型。今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣! 整体思路: 1、预先导入...
Python | 人脸识别系统 — 人脸比对
05-04 4260
人脸识别系统 人脸比对 代码部分
深度学习群体行为识别python包_Python学习案例之人脸检测识别
weixin_39610488的博客
12-07 434
前言随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付、银行身份验证、手机人脸解锁等等。识别废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 haar 特征的 xml 文件,在图片上检测出人脸的坐标,利用这个坐标,我们可以将人脸区域剪切保存,也可以在原图上将人脸框出。代码实现:# -*-coding:utf8-*-# import os imp...
Python | Opencv人脸检测和人脸识别
qingfengxd1的博客
05-27 2170
一、OpenCV简单介绍 安装OpenCV,使用pip安装,推荐使用清华源,速度快: pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 另外还需要另外一个模块: pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple 接下来就可以学习OpenCV了。 1.1、OpenCv显示图像 简单读取一个图像,
基于PythonOpenCVface_recognition库的人脸识别代码
06-02
下面是一个基于PythonOpenCVface_recognition库的简单人脸识别代码示例: ```python import cv2 import face_recognition # 加载已知的人脸图像和对应的名字 obama_image = face_recognition.load_image_file("obama.jpg") obama_face_encoding = face_recognition.face_encodings(obama_image)[0] biden_image = face_recognition.load_image_file("biden.jpg") biden_face_encoding = face_recognition.face_encodings(biden_image)[0] known_face_encodings = [ obama_face_encoding, biden_face_encoding ] known_face_names = [ "Barack Obama", "Joe Biden" ] # 打开摄像头 cap = cv2.VideoCapture(0) while True: # 读取一帧图像 ret, frame = cap.read() # 转换为RGB图像 rgb_frame = frame[:, :, ::-1] # 检测人脸 face_locations = face_recognition.face_locations(rgb_frame) face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) # 遍历每个检测到的人脸 for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): # 判断是否和已知人脸匹配 matches = face_recognition.compare_faces(known_face_encodings, face_encoding) name = "Unknown" # 如果匹配到了已知人脸,则获取对应的名字 if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index] # 在图像上绘制人脸矩形和名字 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1) # 显示图像 cv2.imshow('Video', frame) # 按下q键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头和窗口资源 cap.release() cv2.destroyAllWindows() ``` 注意,这个代码示例需要在已经安装了face_recognition库和OpenCV库的Python环境中运行,还需要把`obama.jpg`和`biden.jpg`两个已知人脸图像放在代码所在目录下。
写文章

热门文章

  • 物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等 35351
  • Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建 20367
  • OSM学习之路(一):OSM介绍 15125
  • Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别(照片对比) 15115
  • Python开发Windows桌面应用程序(二)简单应用程序实现 12355

分类专栏

  • IOT套件笔记 25篇
  • 部标 13篇
  • Java 39篇
  • 物联网 40篇
  • 运维 19篇
  • 笔记 8篇
  • Spring Boot 20篇
  • MongoDB 3篇
  • Python 9篇
  • 前端 1篇
  • MQTT 3篇
  • Redis 1篇
  • GIS 2篇
  • MySQL 5篇
  • C# 34篇
  • Setup Factory 1篇
  • 网络协议 5篇
  • 随笔 3篇
  • SQL Server 3篇
  • OpenStreetMap 9篇

最新评论

  • Java实现音频转码,WAV、MP3、AMR互转

    qq914359471: ffmpeg下载地址:http://www.ffmpeg.org/download.html (需要提前安装)拿到bin目录里的ffmpeg.exe改名字然后移动到指定目录。 导入慢的jar下载到本地导入 maven地址: http://mvnrepository.com/search?q=jave

  • 网关测试报告—以部标JT808为例

    途径的你: 能给个下载链接吗?

  • Java实现坐标系转换(WGS84、GCJ02、BD-09)

    PineYao..: 牛掰,基本没误差,肉眼不可见,强表情包

  • Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建

    加价不加量: designer最新版本位置已经变了,参考:D:\Program Files\Python37\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

  • C# 实现国密SM3加解密封装

    jideofyang: 我后来处理SM3没用到HMac杂凑算法。这个误导人。

最新文章

  • 部标(JT/T1078)流媒体对接说明
  • Java通过JFreeChart实现(饼图、柱状图、层叠柱状图、折线图、散点图、雷达图、环形图、仪表盘图、XY图)生成图片和下载
  • Teltonika FMXXX系列定位器解析说明
2024年14篇
2023年20篇
2022年13篇
2021年53篇
2020年18篇
2019年15篇
2018年7篇
2017年5篇
2016年6篇

目录

目录

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢香蕉雕塑怎么选青浦区玻璃钢雕塑价格行情室内玻璃钢雕塑加工厂济南玻璃钢雕塑生产重庆玻璃钢雕塑大全61商场美陈方案玻璃钢人物雕塑特点北京市玻璃钢仿真雕塑廊坊玻璃钢卡通雕塑价格大型玻璃钢人物雕塑报价商场美陈布置的目的重庆玻璃钢动物牛雕塑松原玻璃钢雕塑联系方式山东周年庆典商场美陈深圳节庆商场美陈批发价玻璃钢雕塑戏曲山东玻璃钢雕塑生产有限公司河南园林玻璃钢雕塑承诺守信河南沁阳玻璃钢花盆济宁玻璃钢花盆汉沽玻璃钢花盆温县玻璃钢雕塑厂家深圳红色玻璃钢卡通雕塑白城玻璃钢雕塑工程施工标准玻璃钢卡通雕塑收费标准大兴玻璃钢人物雕塑菏泽玻璃钢仿铜雕塑生产厂家玻璃钢花盆白色特色玻璃钢花盆销售企业国外一家用马做美陈的商场香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化