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

推荐阅读
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • 捕获并处理用户输入数字时的异常,提供详细的错误提示与指导
    在用户输入数字时,程序能够有效捕获并处理各种异常情况,如非法字符或格式错误,并提供详尽的错误提示和操作指导,确保用户能够准确输入有效的数字数据。通过这种方式,不仅提高了程序的健壮性和用户体验,还减少了因输入错误导致的系统故障。具体实现中,使用了Java的异常处理机制,结合Scanner类进行输入读取和验证,确保了输入的合法性和准确性。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 如何在Spark数据排序过程中有效避免内存溢出(OOM)问题
    本文深入探讨了在使用Spark进行数据排序时如何有效预防内存溢出(OOM)问题。通过具体的代码示例,详细阐述了优化策略和技术手段,为读者在实际工作中遇到类似问题提供了宝贵的参考和指导。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 本章节在上一章的基础上,深入探讨了如何通过引入机器人实现自动聊天、表情包回应以及Adidas官方账号的自动抽签功能。具体介绍了使用wxpy库进行微信机器人的开发,优化了智能回复系统的性能和用户体验。通过详细的代码示例和实践操作,展示了如何实现这些高级功能,进一步提升了机器人的智能化水平。 ... [详细]
  • 本文深入解析了Python在处理HTML过滤时的实现方法及其应用场景。通过具体实例,详细介绍了如何利用Python代码去除HTML字符串中的标签和其他无关信息,确保内容的纯净与安全。此外,文章还探讨了该技术在网页抓取、数据清洗等领域的实际应用,为开发者提供了宝贵的参考。 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • 在Python中,是否可以通过使用Tkinter或ttk库创建一个具有自动换行功能的多行标签,并使其宽度能够随着父容器的变化而动态调整?例如,在调整NotePad窗口宽度时,实现类似记事本的自动换行效果。这种功能在设计需要显示长文本的对话框时非常有用,确保文本内容能够完整且美观地展示。 ... [详细]
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社区 版权所有