热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

人脸识别系统实现

#1,导入库importcv2importnumpyasnpimportface_recognition#2,加载图片liucv2.imrea

#1,导入库
import cv2
import numpy as np
import face_recognition
#2,加载图片
liu=cv2.imread('liu.jpg')
wang=cv2.imread('wang.jpg')#3,BGR转为RGB
liu_RGB=liu[:,:,::-1]
wang_RGB=wang[:,:,::-1]#4,检测人脸
liu_face=face_recognition.face_locations(liu_RGB)
wang_face=face_recognition.face_locations(wang_RGB)#5,人脸特征编码
liu_encoding=face_recognition.face_encodings(liu_RGB,liu_face)[0]
wang_encoding=face_recognition.face_encodings(wang_RGB,wang_face)[0]#6,把所有脸放在一起,当作数据库
encodings=[liu_encoding,wang_encoding]
names=['liu','wang']#7,打开摄像头,读取视频流
cap=cv2.VideoCapture(0)
if not cap.isOpened():raise IOError("Camera Error!")
while True:ret,frame=cap.read()frame=cv2.resize(frame,(0,0),fx=0.5,fy=0.5)#8,BGR转为RGBframe_RGB=frame[:,:,::-1]#9,人脸检测face_locations=face_recognition.face_locations(frame_RGB)#10,人脸特征编码face_encodings=face_recognition.face_encodings(frame_RGB,face_locations)#11,与数据库中的人脸进行匹配for (top,right,bottom,left),face_encoding in zip(face_locations,face_encodings):#12,进行匹配matches=face_recognition.compare_faces(encodings,face_encoding)#13,计算距离distances=face_recognition.face_distance(encodings,face_encoding)min_distance_index=np.argmin(distances)#14,判断:如果匹配,获取名字name="unknown"if matches[min_distance_index]:name=names[min_distance_index]#15,绘制人脸矩形框cv2.rectangle(frame,(left,top),(right,bottom),(0,255,0),3) #16,绘制,显示对应人脸的名字cv2.rectangle(frame,(left,bottom-30),(right,bottom),(0,0,255),3)#17,显示名字cv2.putText(frame,name,(left+10,bottom-10),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1)#18,显示整个效果cv2.imshow('face recognition',frame)#19,判断Q,退出if cv2.waitKey(1)&0xFF==ord('q'):break
#20,关闭资源
cap.release()
cv2.destroyAllWindows()

import face_recognition
import os
import cv2
from PIL import Image,ImageDraw,ImageFont
import numpy as np#解析已有人员的所有照片名和人物面部编码信息
def load_img(path):print('正在加载已知人员的图片。。。。')for dirpath,dirnames,filenames in os.walk(path):print(dirpath,dirnames,filenames)facelib=[]for filename in filenames:filepath=os.sep.join([dirpath,filename])#把对应每张图像加载进来face_image=face_recognition.load_image_file(filepath)face_encoding=face_recognition.face_encodings(face_image)[0]facelib.append(face_encoding)return facelib,filenames
facelib,facenames=load_img(r'D:\temp\faces')#调用摄像头
video_capture=cv2.VideoCapture(0)
while True:ret,frame=video_capture.read()#通过缩小图片(缩小为1/4),提高对比效率)if frame is not None:small_frame=cv2.resize(frame,(0,0),fx=0.25,fy=0.25)rgb_small_frame=small_frame[:,:,::-1] #将opencv的BGR格式转化为RGB格式face_locations=face_recognition.face_locations(rgb_small_frame)face_encodings=face_recognition.face_encodings(rgb_small_frame,face_locations)face_names=[]#循环多张脸for face_encoding in face_encodings:matches=face_recognition.compare_faces(facelib,face_encoding,tolerance=0.39)name='未知头像'if True in matches:#如果摄像头里面的头像匹配了已知人物头像,则取出第一个True的位置first_match_index=matches.index(True)name=facenames[first_match_index][:-4] #取出文件上对应的人名face_names.append(name)for (top,right,bottom,left),name in zip(face_locations,face_names):#还原图片大小top *=4right *=4bottom *=4left *=4cv2.rectangle(frame,(left,top),(right,bottom),(0,0,225),2) #标注人脸信息img_PIL=Image.fromarray(cv2.cvtColor(frame,cv2.COLOR_BGR2RGB))font=ImageFont.truetype('simhei.ttf',40)draw=ImageDraw.Draw(img_PIL)draw.text((left+6,bottom-6),name,font=font,fill=(255,255,255))frame=cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)cv2.imshow('Video',frame)if cv2.waitKey(1)&0xFF==ord('q'):breakvideo_capture.release()

推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
Hyukjae333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有