1.安装包依赖

pip install opencv-python
pip install face-recognition

如果安装face_recognition过程中报错,提示:“CMake must be installed to build the following extensions: dlib”,则需要安装CMake

pip install cmake

cmake安装成功后再安装face_recognition

可以使用国内镜像安装,否则可能比较耗时,国内镜像如下:

  • 清华:https://pypi.tuna.tsinghua.edu.cn/simple/
  • 阿里云:https://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple/
  • 华中理工大学:https://pypi.hustunique.com/
  • 山东理工大学:https://pypi.sdutlinux.org/
  • 豆瓣:https://pypi.douban.com/simple/

执行脚本的时候后面加上对应的镜像地址:

pip install xxxxx -i https://pypi.tuna.tsinghua.edu.cn/simple/

如果使用的是Microsoft Visual Studio ,则可以直接在项目目录下的Python环境上右键,选择Install Python Package... 安装对应的开发包

在输入框里输入对应的开发包名即可,如果使用国内镜像,则在包名后面加上 -i https://xxxx即可

例如我使用阿里云镜像安装face-recognition

点击OK后,会给一个提示框,点击“确定”继续即可

然后就可以在VS下面的输出中看到安装进度了

2.代码示例

import os
import cv2
import numpy as np
import face_recognition
import time#对人脸集合进行编码进行处理
def findEncodeings(images):encodeList=[]for img in images:#灰度处理img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2RGB)#face_encodings对图片对象a_images进行编码并返回数组0位置编码结果encode=face_recognition.face_encodings(img)[0]encodeList.append(encode)return encodeList#获取当前存储的人脸编码集合
def findExistsEncodeingList(img_path):images=[]#现有的人脸编码集合existsEncodeingList=[]#列出已经上传的所有图片imgList=os.listdir(img_path)#处理存储的图片得到其人脸编码for pic in imgList:img=cv2.imread('{}/{}'.format(img_path,pic))images.append(img)classNames.append(os.path.splitext(pic)[0])#计算findEncodeings的耗时start =time.clock()existsEncodeingList=findEncodeings(images)end = time.clock()print('Running time: %s Seconds'%(end-start))return existsEncodeingList#保存文件名,也就是图像中人物的名称
classNames=[]
img_path='Picture'
cap=cv2.VideoCapture(0)
existsEncodeingList=findExistsEncodeingList(img_path)
while cap.isOpened():#读取当前摄像头的画面ret,frame=cap.read()#给摄像头画面一个尺寸大小frame=cv2.resize(src=frame,dsize=(1078,760))frameRGB=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2RGB)#对摄像头读取的检测人脸facesLocate=face_recognition.face_locations(frameRGB)#进行特征编码faceEncoded=face_recognition.face_encodings(frameRGB,facesLocate)#遍历检测的人脸和库中读取的图片进行对比,计算其相似度for (top,right, bottom,left),face_encoding in zip(facesLocate,faceEncoded):#进行匹配matchs=face_recognition.compare_faces(existsEncodeingList,face_encoding)#计算相似度distance=face_recognition.face_distance(existsEncodeingList,face_encoding)#判断是否匹配name='unknow'for index, item in enumerate(distance):if item<0.38:if matchs[index]:#得到匹配到的图片名称与相似度值name='Similar photos exist: {}; similarity value:{}'.format(classNames[index],item)break#初始化面部捕捉框显示绿色color1 =(0,255,0)if name =='unknow':#未能识别的时候显示蓝色color1 =(255,0,0)#画面部捕捉框cv2.rectangle(img=frame,pt1=(left,top),pt2=(right,bottom),color=color1,thickness=2)#在捕捉框上添加匹配到的图片信息cv2.putText(frame, name, (left,top-8),cv2.FONT_HERSHEY_SIMPLEX, 0.35, color1, 1)cv2.imshow('frame',frame)#按下回车键结束if cv2.waitKey(1)&0xFF==13:break
cap.release()
cv2.destroyAllWindows()

代码里面每行基本上都有注释,所以这里不做过多解释,其中发现在启动的时候比较慢,加上了对方法执行时间的打印,最终定位到了这行代码:

#face_encodings对图片对象a_images进行编码并返回数组0位置编码结果
encode=face_recognition.face_encodings(img)[0]

原因应该与图片的分辨率、大小有关。另外还发现在调用摄像头进行检测的时候,视频画面存在严重的卡顿,因为我外接的是一个工业级高清摄像头在电脑上,应该也是因为分辨率与图片的大小设置的太大导致的。

这里的0.38是相似度,值越小代表越相似,一般设置在0.4左右即可,如果是同一个摄像头采集的人脸然后进行识别相似度在0.3左右。

Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别相关推荐

  1. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  2. 基于OpenCV的刷脸考勤&人脸校验&用户管理系统(源码&教程)

    1.研究背景 随着人工智能时代的来临,深度学习赋予了以人脸图像为中心的计算机视觉任务更多的可能.人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多个人脸,是人脸识别 ...

  3. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  4. Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)

    1.双视频拼接效果展示 2.视频演示 [项目分享]Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)_哔哩哔哩_bilibili 3.背景 随着汽车电子和 ...

  5. Python 基于OpenCV 在一张图片上叠加点

    Python 基于OpenCV 在一张图片上叠加点 1.安装 OpenCV pip install opencv-python 2.cv2.circle 用法 cv2.circle(img, cent ...

  6. Python基于OpenCV的指针式表盘检测系统(附带源码&技术文档)

    1.背景 指针式机械表盘具有安装维护方便.结构简单.防电磁干扰等诸多优点, 目前广泛应用于工矿企业.能源及计量等部门.随着仪表数量的增加及精密仪表技术的发展,人工判读已经不能满足实际应用需求.随着计算 ...

  7. Python基于OpenCV的图像去雾算法[完整源码&部署教程]

    1.图片识别 2.视频展示 [项目分享]Python基于OpenCV的图像去雾算法[完整源码&部署教程]_哔哩哔哩_bilibili 3.算法原理 图像增强算法常见于对图像的亮度.对比度.饱和 ...

  8. Python基于Opencv的鱼群密度速度检测系统(源码&教程)

    1.研究背景 智慧渔业是大数据.物联网与人工智能等现代信息技术驱动下的渔业发展新模式,是水产养殖业供给侧结构性改革的重要方式,涉及养殖环境监测.生物环境监测与生物状态监测这几大方面的应用与需求.本文从 ...

  9. Python基于OpenCV的异常行为检测系统[源码&部署教程]

    1.项目背景 智能视频监控(Intelligent Video Surveillance , IVS)[1.2·3.4是计算机视觉技术5l在安防领域的应用,实现了由"被动监控"到& ...

最新文章

  1. Magento如何使用和设置CookieSession
  2. Angular5学习笔记 - 虚拟RestfulApi配置与使用(六)
  3. android动态设置冷启动图片拉伸变形,Android冷启动时间优化
  4. 项目经理的个人体会、经验总结
  5. oracle的视图表,oracle 常用视图和表
  6. 程序员是一盏省油的灯
  7. [能力提升][费曼学习法]学习方法
  8. 手写bind_一次搞定前端“四大手写”
  9. matlab2c使用c++实现matlab函数系列教程-exp函数
  10. cmd命令跳舞代码_Golang语言元编程之代码生成
  11. 微信支付全流程对接文档
  12. python面向对象练习——飞机大战
  13. TravelFlan携小猴问问亮相ITB,看人工智能如何化解旅游痛点
  14. 图的基本操作(C语言)
  15. LATEX 排版问题记录
  16. 从野蛮生长到元年爆发,细数RPA的百年风雨
  17. python压力测试模块_Python编写服务器压力测试小工具(仅供测试)
  18. 交换机vlan配置实训心得_交换机基本配置及VLAN配置实验报告
  19. ARM Rootkit
  20. 大家的人工智能——决策树

热门文章

  1. JavaScript常用正则,验证手机号(含港澳台)、邮箱、身份证(含港澳台)、用户名、密码、搜索关键字、网站域名等
  2. Bugku ez_misc WriteUp
  3. 【Spring Boot】条件化自动装配
  4. 安卓开发不得不会!腾讯,字节等大厂面试真题汇总,全套教学资料
  5. h3c无线管理 dns服务器,10-DNS配置指导
  6. linux testlink 安装,在ubuntu上安装TestLink指南
  7. JPA查询单个字段和多个字段返回类型总结
  8. 微信小程序没有后台切换如何解决
  9. 蓝桥杯真题31日冲刺国一 | 每日题解报告 第二十二天
  10. 经验教训 软件开发_软件可靠性的教训