此次介绍的基于电脑摄像头的人脸识别,在Ubuntu16.04环境下,还没有测试成功,主要是环境的搭建的问题,还没有解决!

文章目录

  • 1、实现背景
  • 2、实现设计
    • 2.1、需求设计
    • 2.2、代码设计
  • 3、实现的效果

1、实现背景

人脸识别技术是基于人的脸部特征,对输入的人脸图像或者视频流 . 首先判断其是否存在人脸 , 如果存在人脸,则进一步的给出每个脸的位置、大小和各个主要面部器官的位置信息。并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比,从而识别每个人脸的身份。
广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。
但在本次实验中,可以采用多人的多张图片来进行训练,在用训练结果来进行验证;也可以采用已经写好的人脸库来进行实验。在人脸识别工具这一方面,百度AI的人脸识别,是目前的一大流行热点,但是问题在于,这是在线测试,需要注册账号等,对于百度AI的测试,个人感受是太麻烦了,就放弃了。选择了另外的一个face_recognition,这是基于dlib开发出来的,在查阅的资料中,说识别度高达99.38%,但是在一开始测试的时候,却发现效果不佳,几经周折,发现,这个是外国写的,对我们来说,需要修改相关的参数,才能提高识别的精度。
对于face_recognition这个工具,查找了一下,介绍就只有寥寥几字,但是查找相关的技术文档,还是有许多说明的。

2、实现设计

2.1、需求设计

首先明确的是,通过摄像头,与已知的人脸进行验证,识别成功,语音提示;识别失败,语音也会提醒。
在Windows平台下测试,通过与已知的人脸对比,一旦不符合,就显示unknown。
运行环境是Windows下的python3,安装需要的库,重点是face_recognition。期间由于网络的原因,导致安装失败了许多次,最后还是成功的安装。
至于环境的搭建,请参考以前的博客。

2.2、代码设计

import face_recognition
import cv2
import numpy as np
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
# # 打开本机的摄像头
video_capture = cv2.VideoCapture(0)
#加载示例图片并学习如何识别它
pz_image = face_recognition.load_image_file("G:\\2018and2019two\\internetofthingsshijian\\faceku\\panzhou.jpg")
pz_face_encoding = face_recognition.face_encodings(pz_image)[0]
#加载第二个示例图片并学习如何识别它。
bjm_image = face_recognition.load_image_file("G:\\2018and2019two\\internetofthingsshijian\\faceku\\bjm.jpg")
bjm_face_encoding = face_recognition.face_encodings(bjm_image)[0]
test_image = face_recognition.load_image_file("G:\\2018and2019two\\internetofthingsshijian\\faceku\\testone.jpg")
test_face_encoding = face_recognition.face_encodings(test_image)[0]
zhengpan_image = face_recognition.load_image_file("G:\\2018and2019two\\internetofthingsshijian\\faceku\\zhengpan.jpg")
zhengpan_face_encoding = face_recognition.face_encodings(zhengpan_image)[0]
#创建已知人脸编码
known_face_encodings = [pz_face_encoding,bjm_face_encoding,test_face_encoding,zhengpan_face_encoding
]
#创建其名称的数组
known_face_names = ["panzhou","baojinming","testone","zhengpan"
]
# 初始化变量
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:#抓取一帧视频ret, frame = video_capture.read()# /4,以便更快地进行人脸识别处理small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)# 将图像从bgr颜色(opencv使用)转换为rgb颜色(人脸识别使用)rgb_small_frame = small_frame[:, :, ::-1]# 只处理其他每帧视频以节省时间if process_this_frame:# 查找当前视频帧中的所有面和面编码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(known_face_encodings, face_encoding,tolerance=0.46)name = "Unknown"      #或者,使用与新面距离最小的已知面face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)best_match_index = np.argmin(face_distances)if matches[best_match_index]:name = known_face_names[best_match_index]speak.Speak("识别成功")else :name = "Unknown"speak.Speak("存在闲杂人等")face_names.append(name)process_this_frame = not process_this_frame# 显示结果for (top, right, bottom, left), name in zip(face_locations, face_names):# 自我们检测到的帧被缩放到1/4大小后,将备份面位置缩放top *= 4right *= 4bottom *= 4left *= 4# 在脸上画一个方框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_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)# 显示结果图像cv2.imshow('wuluo', frame)# 点击键盘上的“Q”退出!if cv2.waitKey(1) & 0xFF == ord('q'):break
# 释放摄像头
video_capture.release()
cv2.destroyAllWindows()

3、实现的效果

理论上,通过增加人脸的数目,可以实现无数人的识别。
参考链接:https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py

python学习之recognition的多人人脸识别相关推荐

  1. python学习--第三天 粗略介绍人脸识别

    首先安装opencv 在安装opencv过程中遇到一些错误(百度解决) 直接贴代码吧,讲师略讲了一下,体会不深,以后有机会深入学习,再详细介绍解释吧 人脸识别训练集应该可以网上下载吧,都是开源的 im ...

  2. Face Recognition,不只是人脸识别

    目录: 一.face_recognition是什么 二.如何安装 三.原理 四.演示 五.手写简单的神经网络 一.face_recognition是什么 1. face_recognition是一个强 ...

  3. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统...

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

  4. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统 - 人工智能遇见磐创...

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

  5. 单样本学习:使用孪生神经网络进行人脸识别

    这篇文章简要介绍单样本学习,以孪生神经网络(Siamese neural network)进行人脸识别的例子,分享了作者从论文 FaceNet 以及 deeplearning.ai 中学到的内容. 图 ...

  6. 用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

  7. Python+OpenCV 调用手机摄像头并实现人脸识别

    文章内容: 1.windows 环境下安装 OpenCV 机器视觉环境搭建: 2.基于通过 Python+OpenCV调用手机摄像头并实现人脸检测识别. 目录 1 实验环境 2 实验准备 2.1 下载 ...

  8. opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统

    已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...

  9. 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

最新文章

  1. C语言hk,C语言再学习
  2. sklearn基于make_scorer函数构建自定义损失函数或者评估指标
  3. Could not obtain transaction-synchronized Session
  4. winrar皮肤的更换
  5. 2019(dotNet全栈开发)公众号回顾
  6. petalinux 配置_澧县高压管道工厂化配置专业销售
  7. 前端学习(496):noscript元素
  8. 由浅入深CAS,小白也能与BAT面试官对线
  9. 关于Viual Studio 改变编辑器背景背景及背景图片(转)
  10. 小程序中曾经遇到的坑(1)----canvas画布
  11. matlab弗洛伊德算法,MATLAB弗洛伊德算法结果有疑惑,求大神解答
  12. Python Selenium Webdriver常用方法总结
  13. 神秘的 shadow-dom 浅析
  14. 《罗兰小语》最全UMD+TXT版(来自EXE版的反编译)
  15. 搭建 Harbor v2.2.0 docker私库
  16. 【等保小知识】等保二级是否需要做密评?什么是密评?
  17. php 泛型编程,泛型是什么,C++泛型编程又是什么?
  18. lisp医院化验系统_医院管理系统(his)电子病历 体检系统 l is pacs
  19. 只有mdf文件恢复数据库
  20. element 保存 点击链接_element ui 中 el-menu 如何添加链接router-link标签

热门文章

  1. 癌症专家推荐:揭秘抗癌果蔬排行18强(组图)
  2. 【现代控制理论】传递函数建立状态空间表达式
  3. 一个悄然成为世界最流行的操作系统!
  4. 现代浏览器观察者 Observer API 指南
  5. 自媒体必看:这3个领域别做,起步慢、收益低
  6. C#使用EmguCV库介绍(一)
  7. php 策略模式 理解
  8. LZW编码与解码的那点事
  9. python 3.X 没有cPickle
  10. 2017.06.15-2016.06.18回顾 loc/iloc/ix dataframe相关 oracle无自增去重 correl