热门标签 | 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()

推荐阅读
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • OpenCV4.5.0+contrib编译流程及解决错误方法
    本文介绍了OpenCV4.5.0+contrib的编译流程,并提供了解决常见错误的方法,包括下载失败和路径修改等。同时提供了相关参考链接。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • PatchODAX8: ... [详细]
  • ElasticSearch成功安装完毕。 测试数据添加出现{  error:{    root_cause ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
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社区 版权所有