基于Python的face_recognition库实现人脸识别
一、face_recognition库简介

face_recognition是Python的一个开源人脸识别库,支持Python 3.3+和Python 2.7。引用官网介绍:
Recognize and manipulate faces from Python or from the command line with the world's simplest face recognition library.
之所以选用这个库,是因为
1、用这个库来实现一个人脸识别程序非常简单,环境配置也很容易;
2、可以直接使用已经训练好的模型,不需要在本地重新训练。一般普通的电脑都可以直接运行识别程序,硬件环境要求不高。
PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
二、环境安装
我自己的环境如下:
硬件:08年的笔记本电脑,奔腾双核,算是比较低端的笔记本了
系统:win7x64
python:3.6 (注意:建议用3.6版本配置环境。我自己用3.7配置环境失败了,dlib安装总是失败。)
用3.6安装的过程比较简单,可以参考https://www.jianshu.com/p/8296f2aac1aa
用pip安装之前,注意首先修改pip为阿里的源,这样速度就快多了。
三、代码实现
import face_recognition
import cv2
import os
import numpy as np
from PIL import Image,ImageDraw,ImageFont
#路径参数配置
basefacefilespath = "0s" # faces文件夹中放待识别任务正面图,文件名为人名,将显示于结果中
destfacefilepath = "0d" #用于识别的目标图片目录
#写入中文字符支持
def paint_chinese_opencv(im, chinese, pos, color):
img_PIL = Image.fromarray(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))
font = ImageFont.truetype('simsun.ttc', 14)
fillColor = color # (255,0,0)
position = pos # (100,100)
#chinese = chinese.decode('utf-8')
draw = ImageDraw.Draw(img_PIL)
draw.text(position, chinese, font=font, fill=fillColor)
img = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)
return img
# 加载待识别人脸图像并识别。
baseface_titles = [] # 图片名字列表
baseface_face_encodings = [] # 识别所需人脸编码结构集
#读取人脸资源
for fn in os.listdir(basefacefilespath): #fn 人脸文件名
baseface_face_encodings.append(
face_recognition.face_encodings(face_recognition.load_image_file(basefacefilespath+"/"+fn))[0])
#fn = fn.split("_")[1]
fn = fn[:(len(fn) - 4)]
baseface_titles.append(fn)
print(fn)
#从识别库中读取一张图片并识别
for fd in os.listdir(destfacefilepath):
# 获取一张图片
faceData = face_recognition.load_image_file(destfacefilepath + "/" + fd)
print(fd)
# 人脸检测,并获取帧中所有人脸编码
face_locations = face_recognition.face_locations(faceData)
face_encodings = face_recognition.face_encodings(faceData, face_locations)
# 遍历图片中所有人脸编码
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# 与baseface_face_encodings匹配否?
name = "?"
for i,v in enumerate(baseface_face_encodings):
match = face_recognition.compare_faces([v], face_encoding,tolerance=0.5)
name = "?"
if match[0]:
name = baseface_titles[i]
print("识别出:" + name)
break
#如果遇到没有识别出的人脸,则跳过
if name == "?":
continue
# 围绕脸的框
cv2.rectangle(faceData, (left, top), (right, bottom), (0, 0, 255), 2)
# 框下的名字(即,匹配的图片文件名)
cv2.rectangle(faceData, (left, bottom), (right, bottom+25), (0, 0, 255), cv2.FILLED)
#faceData = cv2.putText(faceData, name,(left + 2, bottom + 12), cv2.FONT_HERSHEY_SIMPLEX,0.5, (255, 255, 255),1)
faceData = paint_chinese_opencv(faceData, name, (left + 2, bottom + 4), (255, 255, 255))
# frame = ft.draw_text(frame, (left + 2, bottom + 12), name, 16, (255, 255, 255))
# show结果图像
cv2.imshow(fd, cv2.cvtColor(faceData, cv2.COLOR_BGR2RGB))
cv2.waitKey()
cv2.destroyAllWindows()
图片分为两个文件夹:0s和0d
0s中存放的是基础人脸数据
0d文件夹中存放的是接下来要进行识别的图片,我这里放了3张:
四、运行效果
运行结果:
五、问题总结
1、cv2.imshow,这个最开始显示的图片颜色不对,后来修改如下:
cv2.imshow(fd, cv2.cvtColor(faceData, cv2.COLOR_BGR2RGB))
将图片的颜色模式调整为RGB,然后色彩就正常了。
2、中文字符支持,最开始用 cv2.putText,但是这个函数只支持英文字符,中文字符会显示问号乱码。
后加入中文字符支持函数,用 PIL 库中的 ImageDraw 来写入中文字符。
总结:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
基于Python的face_recognition库实现人脸识别的更多相关文章
- python中使用Opencv进行人脸识别
上一节讲到人脸检测,现在讲一下人脸识别.具体是通过程序采集图像并进行训练,并且基于这些训练的图像对人脸进行动态识别. 人脸识别前所需要的人脸库可以通过两种方式获得:1.自己从视频获取图像 2.从人 ...
- python face_recognition模块实现人脸识别
import face_recognition #人脸识别库 pip cmake dlib import cv2 #读取图像 face_image1 = face_recognition.load_i ...
- facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...
- 基于百度AI开放平台的人脸识别及语音合成
基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...
- 基于Python3.7和opencv的人脸识别(含数据收集,模型训练)
前言 第一次写博客,有点紧张和兴奋.废话不多说,直接进入正题.如果你渴望使你的电脑能够进行人脸识别:如果你不想了解什么c++.底层算法:如果你也不想买什么树莓派,安装什么几个G的opencv:如果你和 ...
- 基于虹软sdk,java实现人脸识别(demo)
## 开发环境准备:###开发使用到的软件和工具:* Jdk8.mysql5.7.libarcsoft_face.dll(so).libarcsoft_face_engine.dll(so).liba ...
- python 调用百度接口 做人脸识别
操作步骤差不多,记得要在百度AIPI中的控制台中创建对应的工单 创建工单成功后 会生成两个key 这个两个key是要生成tokn 用 这里大家可以用 def函数 将token返回 供下面的接口使用 ...
- 吴裕雄--天生自然python学习笔记:python 用 Open CV通过人脸识别进行登录
人脸识别登录功能的基本原理是通过对比两张图片的差异度来判断两张图片是 否是同 一人的面部 . 对比图片 差异度 的算法有很多种,本例中使用“颜色直方图” 算法来实现对人脸图像的识别. 下面为比较 im ...
- 吴裕雄--天生自然python学习笔记:python 用 Open CV 进行人脸识别
要对特定图像进行识别,最关键的是要有识别对象的特征文件, OpenCV 己内置 了人脸识别特征文件,我们只需使用 OpenCV 的 CascadeClassifier 类即可进行识别 . 创建 Cas ...
随机推荐
- Nginx-4.Nginx如何处理请求
原文 基于server_name 的虚拟站点 Nginx首先需要确定使用哪个server来处理请求.举个简单的例子,有下面几个server 第一个,监听80端口,为org站点 server { lis ...
- 如何利用dokcer提交我的比赛代码
运气很好进入了天池的一个复赛,但是复赛评测时需要提交docker镜像,捣鼓了一个晚上,终于搞清了整套的流程.由于晚上已经下定决心要早点睡觉,害怕明早就会忘记的我还是先把步骤记录下来. 1. 安装doc ...
- sql的一般查询语句(增删改查中的查)
/*例子 判断规则 http://xxx.xxx/new.php?id=57 and 1=1 正确 http://xxx.xxx/new.php?id=57 and 1=2 错误 http://xxx ...
- VUE中集成echarts时 getAttribute of null错误
错误 错误场景一: 错误提示: 在运行Vue项目时出现了上述错误,出现该错误的原因是Echarts的图形容器还未生成就对其进行了初始化所造成的,代码如下: // 基于准备好的dom,初始化echart ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- node post 大数据无响应超时
使用 express 框架,post 较大数据量(富文本,里面包含了图片base64数据,大约300k)时,node 无响应,把数据内容减少后能顺利提交. 是因为数据量大过body post 的限制导 ...
- 剑指offer-面试题32-从上到下打印二叉树-二叉树遍历
/* 题目: 按层自上向下打印二叉树. */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空. */ #include<iostream> #inc ...
- maven的核心概念——聚合
第十六章聚合 16.1 为什么要使用聚合 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效.修改源码后也需要逐个手动进行clean操作.而使用了聚合之后就可以批量进行Maven工程的安装 ...
- ADB之安装APK
一.下载安装adb工具 下载安装,cmd测试是否成功 二.连接设备 1.手机打开USB测试 2.测试连接 三.安装应用 adb -s [设备编号] install [apk的完整路径]
- 【巨杉数据库SequoiaDB】巨杉数据库无人值守智能自动化测试实践
刚刚过去的春节,新型冠状病毒疫情突如其来地横扫大江南北.为了响应国家号召,许多软件公司和互联网公司也将在较长一段时间内建议员工采取远程办公的方式,同时也存在骨干工程师无法及时返岗的问题,使得生产力大受 ...