1.安装

首先,必须提前安装cmake、numpy、dlib,其中,由于博主所用的python版本是3.6.4(为了防止不兼容,所以用之前的版本),只能安装19.7.0及之前版本的dlib,所以直接pip install dlib会报错,需要pip install dlib==19.7.0

安装完预备库之后就可以直接pip install face_recognition

2.应用

(1)提取人脸

import face_recognition
from PIL import Image
image = face_recognition.load_image_file("1.jpg")
face_locations = face_recognition.face_locations(image) # top, right, bottom, left
#以下展示提取的人脸
for face_location in face_locations:
# Print the location of each face in this image
top, right, bottom, left = face_location
# You can access the actual face itself like this:
face_image = image[top:bottom, left:right]
pil_image = Image.fromarray(face_image)
pil_image.show()

(2)查找面部特征轮廓线

import face_recognition
from PIL import Image,ImageDraw
image = face_recognition.load_image_file("1.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
#以下为展示轮廓线
pil_image = Image.fromarray(image)
d = ImageDraw.Draw(pil_image)
for face_landmarks in face_landmarks_list:
facial_features = [
'chin',
'left_eyebrow',
'right_eyebrow',
'nose_bridge',
'nose_tip',
'left_eye',
'right_eye',
'top_lip',
'bottom_lip'
]
for facial_feature in facial_features:
d.line(face_landmarks[facial_feature], width=5)
del d
pil_image.show()

(3)比较人脸

import face_recognition
known_image = face_recognition.load_image_file("known_person.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg") biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0] results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

(4)同时识别多张人脸

①使用pillow库

#使用pillow库
import face_recognition
from PIL import Image, ImageDraw # Load a second sample picture and learn how to recognize it.
first_image = face_recognition.load_image_file("3.jpg")
first_face_encoding = face_recognition.face_encodings(first_image)[0] second_image = face_recognition.load_image_file("5.jpg")
second_face_encoding = face_recognition.face_encodings(second_image)[0] # Create arrays of known face encodings and their names
known_face_encodings = [
first_face_encoding,
second_face_encoding
]
known_face_names = [
"first",
"second"
] # Load an image with an unknown face
unknown_image = face_recognition.load_image_file("1.jpg") # Find all the faces and face encodings in the unknown image
unknown_face_locations = face_recognition.face_locations(unknown_image)
unknown_face_encodings = face_recognition.face_encodings(unknown_image, unknown_face_locations)
pil_image = Image.fromarray(unknown_image)
# Create a Pillow ImageDraw Draw instance to draw with
draw = ImageDraw.Draw(pil_image) # Loop through each face found in the unknown image
for (top, right, bottom, left), unknown_face_encoding in zip(unknown_face_locations, unknown_face_encodings):
# See if the face is a match for the known face(s)
matches = face_recognition.compare_faces(known_face_encodings, unknown_face_encoding, tolerance=0.5)
name = "Unknown"
# If a match was found in known_face_encodings, just use the first one.
if True in matches:
first_match_index = matches.index(True)
name = known_face_names[first_match_index] # Draw a box around the face using the Pillow module
draw.rectangle(((left, top), (right, bottom)), outline=(0, 0, 255)) # Draw a label with a name below the face
text_width, text_height = draw.textsize(name)
draw.rectangle(((left, bottom-text_height-10), (right, bottom)), fill=(0, 0, 255), outline=(0, 0, 255))
draw.text((left+6, bottom-text_height-3), name, fill=(255, 255, 255, 255)) # Remove the drawing library from memory as per the Pillow docs
del draw
# Display the resulting image
pil_image.show()
②使用opencv库 #使用opencv库
import face_recognition
import cv2 # 人物名称的集合
known_face_names = ["first","second"]
face_locations = []
face_encodings = []
demo_names = []
process_this_demo = True # 本地图像一
first_image = face_recognition.load_image_file("1.jpg")
first_encoding = face_recognition.face_encodings(first_image)[0]
# 本地图像二
second_image = face_recognition.load_image_file("5.jpg")
second_encoding = face_recognition.face_encodings(second_image)[0] known_face_encodings = [first_encoding,second_encoding] # demo
path = "7.jpg"
demo = cv2.imread(path)
demo_image = face_recognition.load_image_file(path)
demo_encodings = face_recognition.face_encodings(demo_image)
rgb_demo = demo[:, :, ::-1]
demo_face_locations = face_recognition.face_locations(rgb_demo) for demo_encoding in demo_encodings:
# 默认为unknown
matches = face_recognition.compare_faces(known_face_encodings, demo_encoding,tolerance=0.5)
name = "unknown"
if True in matches:
first_match_index = matches.index(True)
name = known_face_names[first_match_index]
demo_names.append(name) # 将捕捉到的人脸显示出来
for (top, right, bottom, left), name in zip(demo_face_locations, demo_names):
# Scale back up face locations since the demo we detected in was scaled to 1/4 size
# 矩形框
cv2.rectangle(demo, (left, top), (right, bottom), (0, 0, 255), thickness=1)
#加上标签
cv2.rectangle(demo, (left, bottom-15), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(demo, name, (left+5,bottom-3), font, 0.5, (255, 255, 255), 1 )
# Display
cv2.imshow("CJK's practice", demo)
cv2.waitKey(0)
cv2.destroyAllWindows()

(5)摄像头实时辨别人脸

import face_recognition
import cv2,time video_capture = cv2.VideoCapture(0)
# 本地图像一
first_image = face_recognition.load_image_file("1.jpg")
first_face_encoding = face_recognition.face_encodings(first_image)[0] # 本地图像二
second_image = face_recognition.load_image_file("3.jpg")
second_face_encoding = face_recognition.face_encodings(second_image)[0] # 本地图片三
third_image = face_recognition.load_image_file("5.jpg")
third_face_encoding = face_recognition.face_encodings(third_image)[0] # Create arrays of known face encodings and their names
# 脸部特征数据的集合
known_face_encodings = [
first_face_encoding,
second_face_encoding,
third_face_encoding
]
# 人物名称的集合
known_face_names = [
"first",
"second",
"third"
]
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:
# 读取摄像头画面
ret, frame = video_capture.read()
# 改变摄像头图像的大小,图像小,所做的计算就少
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
# opencv的图像是BGR格式的,而我们需要是的RGB格式的,因此需要进行一个转换。
rgb_small_frame = small_frame[:, :, ::-1]
# Only process every other frame of video to save time
if process_this_frame:
# 根据encoding来判断是不是同一个人,是就输出true,不是为flase
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:
# 默认为unknown
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Unknown"
if True in matches:
first_match_index = matches.index(True)
name = known_face_names[first_match_index]
face_names.append(name)
process_this_frame = not process_this_frame
# 将捕捉到的人脸显示出来
for (top, right, bottom, left), name in zip(face_locations, face_names):
# Scale back up face locations since the frame we detected in was scaled to 1/4 size
top *= 4
right *= 4
bottom *= 4
left *= 4
# 矩形框
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
#加上标签
cv2.rectangle(frame, (left, bottom-15), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left+5, bottom-3), font, 1.0, (255, 255, 255), 1)
# Display
cv2.imshow('monitor', frame)
# 按Q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()

python face_recognition安装及各种应用的更多相关文章

  1. 手把手教你用1行代码实现人脸识别 --Python Face_recognition

    环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. 安装 Python2.7.14 (Ubuntu17.10 ...

  2. Python的安装和详细配置

    Python是一种面向对象.解释型计算机程序设计语言.被认为是比较好的胶水语言.至于其他的,你可以去百度一下.本文仅介绍python的安装和配置,供刚入门的朋友快速搭建自己的学习和开发环境.本人欢迎大 ...

  3. python requests 安装

    在 windows 系统下,只需要输入命令 pip install requests ,即可安装. 在 linux 系统下,只需要输入命令 sudo  pip install requests ,即可 ...

  4. Python 的安装与配置(Windows)

    Python2.7安装配置 python的官网地址:https://www.python.org/ 我这里下载的是python2.7.12版本的 下载后点击安装文件,直接点击下一步知道finally完 ...

  5. 初学python之安装Jupyter notebook

    一开始安装python的时候,安装的是最新版的python3.6的最新版.而且怕出问题,选择的都是默认安装路径.以为这样总不会出什么问题.一开始确实这样,安装modgodb等一切顺利.然而在安装jup ...

  6. 转: python如何安装pip和easy_installer工具

    原文地址: http://blog.chinaunix.net/uid-12014716-id-3859827.html 1.在以下地址下载最新的PIP安装文件:http://pypi.python. ...

  7. CentOS 6.5升级Python和安装IPython

    <转自:http://www.noanylove.com/2014/10/centos-6-5-sheng-ji-python-he-an-zhuang-ipython/>自己常用.以做备 ...

  8. python Scrapy安装和介绍

    python Scrapy安装和介绍 Windows7下安装1.执行easy_install Scrapy Centos6.5下安装 1.库文件安装yum install libxslt-devel ...

  9. window下从python开始安装科学计算环境

    Numpy等Python科学计算包的安装与配置 参考: 1.下载并安装 http://www.jb51.net/article/61810.htm 1.安装easy_install,就是为了我们安装第 ...

随机推荐

  1. 基于Apache Hudi构建分析型数据湖

    为了有机地发展业务,每个组织都在迅速采用分析. 在分析过程的帮助下,产品团队正在接收来自用户的反馈,并能够以更快的速度交付新功能. 通过分析提供的对用户的更深入了解,营销团队能够调整他们的活动以针对特 ...

  2. 【java】学习路径27-HashSet、TreeSet,HashMap

    学习路径20-27的所有源代码都可以在此下载 https://www.aliyundrive.com/s/cg8jTRbg6vy HashSet.TreeSet中,Set表示集合,特性在于:无序的.不 ...

  3. 【java】学习路线1-类型转换、隐式转换、强制转换

    /**文档注释,这里是一段文章一般放在类的外面*/public class HelloWorld{    //这个是注释的文本    public static void main(String[] ...

  4. 流媒体协议扫盲(rtp/rtcp/rtsp/rtmp/mms/hls)

    RTP           参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...

  5. Order Siblings by 排序

    在层次查询中,如果想让"亲兄弟"按规矩进行升序排序就需要使用ORDER SIBLINGS BY 这个特定的排序语句,若要降序输出可以在其后添加DESC关键字. 通过这个实验给大家展 ...

  6. Java开发学习(三十一)----Maven属性与版本管理

    一.属性 1.1 问题分析 如下图所示 你会发现,如果现在想更新Spring的版本,你会发现依然需要更新多个jar包的版本,这样的话还是有可能出现漏改导致程序出问题,而且改起来也是比较麻烦. 问题清楚 ...

  7. Linux 压缩、解压缩命令

    Linux 压缩.解压缩命令 tar 语法命令 tar [options-] [files] options: 选择 描述 -A 追加tar文件至归档 -c 创建一个新文档 -d 找出归档和文件系统的 ...

  8. C#winform中使用Cef的ChromiumWebBrowser内嵌谷歌内核,调用前端js方法

    1.在winform中调用js方法: --调js中的方法无 入参形式 webBrowser1.ExecuteJavascript("logout()"); --调js中的方法给js ...

  9. [Python]-pandas模块-CSV文件读写

    Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...

  10. 永恒之蓝(MS17-010)漏洞复现

    1. 漏洞介绍 永恒之蓝: 恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含"永恒之蓝"工具,"永恒之 ...