face_recognition结合opencv进行多人脸识别

目录

step1:准备好opencv,numpy和face_recognition三个库

step2:准备好人脸图像

 step3:利用opencv读取三张图片

 step4:将图片转为特征向量,并将向量和名字添加到列表中,一一对应

step5:摄像头展示,读取摄像头图片帧

step6:将图片缩放到1/4,进行处理时候更加的迅速

step7: opencv摄像头读取的是BGR格式,这里转为face_recognition需要的RGB形式,同时将图像原图和图像中的所有人脸面部以及对应的所有特征信息放入faces_encodings列表中

step8:一一遍历该图像帧中所有人脸的面部特征,并计算特征向量的比较,compare_faces返回的是一个True和False的列表,同时获取当前人脸面部信息和数据库中的人脸面部信息的特征向量差值,即欧氏距离,姓名默认为unknown,用距离最小的图像的下标去在True和False的列表中去查看是否匹配,最终结果存放于detect_names中

step9:最后进行一个人脸检测框以及姓名标签的绘制,循环遍历一张图像中的所有人脸面部,以及一一对应的检测出的人脸的姓名,利用face_locations对应的人脸的(top, right, bottom, left)信息,进行绘制

step10:最后进行opencv的imshow显示图片,最后按q退出循环

全部代码:

效果图演示:


先来了解下face_recognition的各个函数的作用

开始进行识别:

step1:准备好opencv,numpy和face_recognition三个库

step2:准备好人脸图像

 step3:利用opencv读取三张图片

frame1 = cv2.imread(r'images/liudehua.jpeg')
frame2 = cv2.imread(r'images/shileipeng.png')
frame3 = cv2.imread(r'images/linluocheng.jpg')

 step4:将图片转为特征向量,并将向量和名字添加到列表中,一一对应

    frame1_encoding = face_recognition.face_encodings(frame1)[0]encodings.append(frame1_encoding)names.append('liudehua')frame2_encoding = face_recognition.face_encodings(frame2)[0]encodings.append(frame2_encoding)names.append('shileipeng')frame3_encoding = face_recognition.face_encodings(frame3)[0]encodings.append(frame3_encoding)names.append('linluocheng')

step5:摄像头展示,读取摄像头图片帧

    while True:ret, img = cap.read()

step6:将图片缩放到1/4,进行处理时候更加的迅速

change_img = cv2.resize(img,(0,0),fx=0.25,fy=0.25)

step7: opencv摄像头读取的是BGR格式,这里转为face_recognition需要的RGB形式,同时将图像原图和图像中的所有人脸面部以及对应的所有特征信息放入faces_encodings列表中

frame_RGB = change_img[:, :, ::-1]
faces_locations = face_recognition.face_locations(frame_RGB)
faces_encodings = face_recognition.face_encodings(frame_RGB, faces_locations)

step8:一一遍历该图像帧中所有人脸的面部特征,并计算特征向量的比较,compare_faces返回的是一个True和False的列表,同时获取当前人脸面部信息和数据库中的人脸面部信息的特征向量差值,即欧氏距离,姓名默认为unknown,用距离最小的图像的下标去在True和False的列表中去查看是否匹配,最终结果存放于detect_names中

for face_encoding in faces_encodings:matches = face_recognition.compare_faces(encodings,face_encoding)distances = face_recognition.face_distance(encodings, face_encoding)min_distance_index = np.argmin(distances)name = 'unknown'if matches[min_distance_index]:name = names[min_distance_index]detect_names.append(name)

step9:最后进行一个人脸检测框以及姓名标签的绘制,循环遍历一张图像中的所有人脸面部,以及一一对应的检测出的人脸的姓名,利用face_locations对应的人脸的(top, right, bottom, left)信息,进行绘制

    for (top, right, bottom, left), name in zip(faces_locations, detect_names):top *= 4right *= 4bottom *= 4left *= 4cv2.rectangle(img, (left, top), (right, bottom), (0, 0, 255), 2)cv2.putText(img, name, (left, top - 6), font, 1.0, (255, 255, 255), 1)

step10:最后进行opencv的imshow显示图片,最后按q退出循环

cv2.imshow('test',img)key = cv2.waitKey(1)
if key == ord('q'):break

全部代码:

import face_recognition
import cv2
import numpy as npcap = cv2.VideoCapture(0,cv2.CAP_DSHOW)encodings = []
names = []
font = cv2.FONT_HERSHEY_SIMPLEX
detect_names=[]class init():frame1 = face_recognition.load_image_file(r'images/liudehua.jpeg')frame2 = face_recognition.load_image_file(r'images/shileipeng.png')frame3 = face_recognition.load_image_file(r'images/linluocheng.jpg')frame1_encoding = face_recognition.face_encodings(frame1)[0]encodings.append(frame1_encoding)names.append('liudehua')frame2_encoding = face_recognition.face_encodings(frame2)[0]encodings.append(frame2_encoding)names.append('shileipeng')frame3_encoding = face_recognition.face_encodings(frame3)[0]encodings.append(frame3_encoding)names.append('linluocheng')class show():while True:ret, img = cap.read()change_img = cv2.resize(img,(0,0),fx=0.25,fy=0.25)frame_RGB = change_img[:, :, ::-1]faces_locations = face_recognition.face_locations(frame_RGB)faces_encodings = face_recognition.face_encodings(frame_RGB, faces_locations)for face_encoding in faces_encodings:matches = face_recognition.compare_faces(encodings,face_encoding)distances = face_recognition.face_distance(encodings, face_encoding)min_distance_index = np.argmin(distances)name = 'unknown'if matches[min_distance_index]:name = names[min_distance_index]detect_names.append(name)for (top, right, bottom, left), name in zip(faces_locations, detect_names):top *= 4right *= 4bottom *= 4left *= 4cv2.rectangle(img, (left, top), (right, bottom), (0, 0, 255), 2)cv2.putText(img, name, (left, top - 6), font, 1.0, (255, 255, 255), 1)cv2.imshow('test',img)key = cv2.waitKey(1)if key == ord('q'):breakif __name__ == '__main__':init()show()cap.release()cv2.destroyAllWindows()

效果图演示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12499.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能Python-python人脸识别步骤

简介 Python是一种优秀的编程语言,它广泛应用于人工智能、数据科学、Web应用程序开发等领域。其中,人脸识别是Python应用程序中的重要一环。 本文将介绍Python人脸识别的具体步骤,希望对初学者有所帮助。 Python人脸识别步骤 安装必要的库…

chatgpt赋能Python-python3人脸识别

人脸识别的python3应用:一步步实现高精度的面部识别 Python3作为一种高效的编程语言,具有广泛的应用场景。近年来,人脸识别技术在安防、金融、医疗等领域中逐渐普及,运用Python3进行人脸识别具有巨大的潜力。本文将介绍如何使用P…

万字科普ChatGPT-4为何会颠覆人类社会

来源:图灵人工智能 视频来源:超智能体 视频是关于GPT的底层原理和未来影响。将抛开技术细节,少用专业名词,在整体功能上讲解 ChatGPT 的「工作原理」「制造过程」「涌现的能力」「未来的影响」以及「如何应对」: 1、Ch…

断案三字诀

2019独角兽企业重金招聘Python工程师标准>>> 孟一刀:断案三字诀 2012-11-20 孟黎明,1973年6月生,1992年8月起至今在法院工作,曾任安吉法院调解中心主任、民一庭庭长,现任院党组成员、纪检组长。2010年2月…

科研如断案

最近我又把《神探狄仁杰》第一部看完了,觉得确实很不错。狄仁杰身为一朝宰相,拥有“一人之下,万人之上”的权力。他始终以百姓的安居乐业和天下的兴亡为己任。在电视剧里面,他与坏人斗智斗勇,时时险象环生,…

c语言经典断案程序、杨辉三角程序、跳水概率程序

/* 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后…

蓝桥杯07 java 断案

题目描述 公安人员审问甲、乙、丙、丁四个嫌疑犯,已确知,这四个人当中仅有一人是偷窃者,还知道这四个人的答话,要么完全诚实,要么完全说谎。在回答公安人员的问话中: 甲说:“乙没有偷&#xf…

试题 算法提高 断案

问题描述   公安人员审问甲、乙、丙、丁四个嫌疑犯,已确知,这四个人当中仅有一人是偷窃者,还知道这四个人的答话,要么完全诚实,要么完全说谎。在回答公安人员的问话中:   甲说:“乙没有偷&a…

论文投稿指南——中国(中文EI)期刊推荐(第6期)

🚀 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI!🎄🎈 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中&#xf…

关于网页版chatgpt喂投的一些讲解

ChatGPT云炬学长 喂投的定义及使用场景: 这一部分主要是解决这三个问题:啥是喂投。我们为什么要喂投。以及什么场景下面会用到喂投。 从AI专业名词的角度来说,并不存在“喂投”这么一个行为,这是一个不太专业化的俗称&#xff…

老马闲评数字化(4)做数字化会不会被供应商拿捏住

“老马闲评数字化”系列文章正在“深圳行云创新”公众号连载,感兴趣的朋友请关注我们的公众号,不迷路…… 导语 开年过后业务特别的繁忙,出差也比较多,所以有段时间没更新了,对不住大家! 上一集&#xff08…

被遗忘的技术支持岗位

文/明道云创始人任向晖 我发现一个现象。在我们行业,谈论营销获客、销售增长、产品思维等话题的文章很多,但是谈论技术支持(Technical Support)话题的文章几乎没有。似乎我们行业根本没有这个职能一样。在企业内部,技术…

《软件工程导论》期末复习总结

《软件工程导论》期末复习总结 适用教材:《软件工程与实践(第3版》,贾铁军、李学相、王学军主编,清华大学出版社 提示:与教材内容不完全匹配,有所取舍。 写在前面: 这份复习总结是笔者根据老师…

巴比特 | 元宇宙每日必读:传苹果MR头显敲定年内上线,库克认为此时值得进场,预计第一年的销量仅为100万台左右...

摘要:据财联社报道,苹果的MR头显曾多次跳票,最新消息称,苹果CEO蒂姆•库克下场拍板——2023年推出首款MR产品。库克认为此时值得进场,且并不介意初始销量惨淡。据两位熟悉苹果计划的人士透露,苹果预计所述设…

招标 | 近期隐私计算项目招标中标32(江阴智慧港口、广西壮族自治区公安厅、湛江市政务服务数据管理局、深圳信息职业技术学院等)

开放隐私计算 1 招标 1、江阴智慧港口公共服务平台 项目名称:江阴智慧港口公共服务平台 公告日期:2023-03-11 采购单位:江阴港口发展有限公司 项目编号:QYYC23-031 项目投资:3200万元(人民币) …

2022元宇宙十大 “闪光时刻”

图片来源:由无界版图 AI 绘画工具生成 2022年,“元宇宙”一词从头火到脚,但就像每一次新事物诞生之初,变局与骗局,永远是一枚硬币的两个面。毫无疑问,围绕“元宇宙”出现了太多的骗子和骗局,太多…

Character.AI成为新晋AI聊天应用爆款;谷歌推出 Google Slides AI 图像生成

🦉 AI新闻 🚀 Character.AI:首周下载量超越ChatGPT,成为新晋AI聊天应用爆款 摘要:Character.AI是一款受欢迎的人工智能聊天应用,用户可以自由创建AI角色,并与它们聊天。该应用于2023年5月23日…

【软考系统规划与管理师笔记】第1篇 信息系统综合知识

目录 写在前面 1. 信息的基本概念 2. 信息的定量描述 3. 信息的传输模型 3. 信息系统的主要性能指标 4. 信息化的层次 5. 电子政务和电子商务 6. 信息系统 6.1 系统开发的方法 6.2 信息系统总体规划 6.3 信息系统规划内容 7 IT战略 8 习题收集 写在前面 系统规划与…

《ChatGPT开发应用指南》,Datawhale开源了!

Datawhale发布 开源教程:HuggingLLM,Datawhale团队 随着ChatGPT的爆火,我们相信未来会有越来越多的大模型及类似OpenAI提供的服务出现,AI 正在逐渐平民化,将来每个人都可以利用大模型轻松地做出自己的AI产品。 Huggin…

三分钟读懂核聚变

12月5日,美国能源部宣布,在加州劳伦斯利弗莫尔国家实验室(LLNL)所设立的国家点火装置(NIF)中,首次实现了可控核聚变的“净能量增益”,一石激起千层浪,引起了全球科学界、媒体和大众的广泛关注。到底什么是核聚变?“净能量增益”意味着什么?人类真的从此进入了“无限…