Github项目地址:https://github.com/MiChongGET/face_collection

一、环境搭建

1.系统环境
Ubuntu 17.04
Python 2.7.14
pycharm 开发工具
2.开发环境,安装各种系统包
  • 人脸检测基于dlib,dlib依赖Boost和cmake
  • 在windows中如果要使用dlib还是比较麻烦的,如果想省时间可以在anaconda中安装

conda install -c conda-forge dlib=19.4

$ sudo apt-get install build-essential cmake
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libboost-all-dev
  • 其他重要的包
$ pip install numpy
$ pip install scipy
$ pip install opencv-python
$ pip install dlib
  • 安装 face_recognition
# 安装 face_recognition
$ pip install face_recognition
# 安装face_recognition过程中会自动安装 numpy、scipy 等 

二、使用教程

1、facial_features文件夹

此demo主要展示了识别指定图片中人脸的特征数据,下面就是人脸的八个特征,我们就是要获取特征数据

        'chin','left_eyebrow','right_eyebrow','nose_bridge','nose_tip','left_eye','right_eye','top_lip','bottom_lip'
运行结果:
自动识别图片中的人脸,并且识别它的特征
原图:


特征数据,数据就是运行出来的矩阵,也就是一个二维数组

代码:
# -*- coding: utf-8 -*-
# 自动识别人脸特征
# filename : find_facial_features_in_picture.py# 导入pil模块 ,可用命令安装 apt-get install python-Imaging
from PIL import Image, ImageDraw
# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition# 将jpg文件加载到numpy 数组中
image = face_recognition.load_image_file("chenduling.jpg")#查找图像中所有面部的所有面部特征
face_landmarks_list = face_recognition.face_landmarks(image)print("I found {} face(s) in this photograph.".format(len(face_landmarks_list)))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:print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature]))#让我们在图像中描绘出每个人脸特征!pil_image = Image.fromarray(image)d = ImageDraw.Draw(pil_image)for facial_feature in facial_features:d.line(face_landmarks[facial_feature], width=5)pil_image.show() 

2、find_face文件夹

不仅能识别出来所有的人脸,而且可以将其截图挨个显示出来,打印在前台窗口

原始的图片

识别的图片

代码:
# -*- coding: utf-8 -*-
#  识别图片中的所有人脸并显示出来
# filename : find_faces_in_picture.py# 导入pil模块 ,可用命令安装 apt-get install python-Imaging
from PIL import Image
# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition# 将jpg文件加载到numpy 数组中
image = face_recognition.load_image_file("yiqi.jpg")# 使用默认的给予HOG模型查找图像中所有人脸
# 这个方法已经相当准确了,但还是不如CNN模型那么准确,因为没有使用GPU加速
# 另请参见: find_faces_in_picture_cnn.py
face_locations = face_recognition.face_locations(image)# 使用CNN模型
# face_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model="cnn")# 打印:我从图片中找到了 多少 张人脸
print("I found {} face(s) in this photograph.".format(len(face_locations)))# 循环找到的所有人脸
for face_location in face_locations:# 打印每张脸的位置信息top, right, bottom, left = face_locationprint("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))
# 指定人脸的位置信息,然后显示人脸图片face_image = image[top:bottom, left:right]pil_image = Image.fromarray(face_image)pil_image.show() 

 3、know_face文件夹

通过设定的人脸图片识别未知图片中的人脸

# -*- coding: utf-8 -*-
# 识别人脸鉴定是哪个人# 导入face_recogntion模块,可用命令安装 pip install face_recognition
import face_recognition#将jpg文件加载到numpy数组中
chen_image = face_recognition.load_image_file("chenduling.jpg")
#要识别的图片
unknown_image = face_recognition.load_image_file("sunyizheng.jpg")#获取每个图像文件中每个面部的面部编码
#由于每个图像中可能有多个面,所以返回一个编码列表。
#但是由于我知道每个图像只有一个脸,我只关心每个图像中的第一个编码,所以我取索引0。
chen_face_encoding = face_recognition.face_encodings(chen_image)[0]
print("chen_face_encoding:{}".format(chen_face_encoding))
unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]
print("unknown_face_encoding :{}".format(unknown_face_encoding))known_faces = [chen_face_encoding
]
#结果是True/false的数组,未知面孔known_faces阵列中的任何人相匹配的结果
results = face_recognition.compare_faces(known_faces, unknown_face_encoding)print("result :{}".format(results))
print("这个未知面孔是 陈都灵 吗? {}".format(results[0]))
print("这个未知面孔是 我们从未见过的新面孔吗? {}".format(not True in results)) 
4、video文件夹

通过调用电脑摄像头动态获取视频内的人脸,将其和我们指定的图片集进行匹配,可以告知我们视频内的人脸是否是我们设定好的

实现:

代码:
# -*- coding: utf-8 -*-
# 摄像头头像识别
import face_recognition
import cv2video_capture = cv2.VideoCapture(0)# 本地图像
chenduling_image = face_recognition.load_image_file("chenduling.jpg")
chenduling_face_encoding = face_recognition.face_encodings(chenduling_image)[0]# 本地图像二
sunyizheng_image = face_recognition.load_image_file("sunyizheng.jpg")
sunyizheng_face_encoding = face_recognition.face_encodings(sunyizheng_image)[0]# 本地图片三
zhangzetian_image = face_recognition.load_image_file("zhangzetian.jpg")
zhangzetian_face_encoding = face_recognition.face_encodings(zhangzetian_image)[0]# Create arrays of known face encodings and their names
# 脸部特征数据的集合
known_face_encodings = [chenduling_face_encoding,sunyizheng_face_encoding,zhangzetian_face_encoding
]# 人物名称的集合
known_face_names = ["michong","sunyizheng","chenduling"
]face_locations = []
face_encodings = []
face_names = []
process_this_frame = Truewhile 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 timeif process_this_frame:# 根据encoding来判断是不是同一个人,是就输出true,不是为flaseface_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:# 默认为unknownmatches = face_recognition.compare_faces(known_face_encodings, face_encoding)name = "Unknown"# if match[0]:#     name = "michong"# 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]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 sizetop *= 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)# Displaycv2.imshow('monitor', frame)# 按Q退出if cv2.waitKey(1) & 0xFF == ord('q'):breakvideo_capture.release()
cv2.destroyAllWindows()
5、boss文件夹

github开源项目,主要是结合摄像头程序+极光推送,实现识别摄像头中的人脸。并且通过极光推送平台给移动端发送消息!
https://github.com/MiChongGET/face_collection/tree/master/boss

人工智能之Python人脸识别技术--face_recognition模块相关推荐

  1. 图像识别python模块_人工智能之Python人脸识别技术--face_recognition模块

    一.环境搭建1.系统环境Ubuntu 17.04 Python 2.7.14 pycharm 开发工具1 2 32.开发环境,安装各种系统包人脸检测基于dlib,dlib依赖Boost和cmake$ ...

  2. python人工智能图像识别_人工智能之Python人脸识别技术,人人都能做识别!

    原标题:人工智能之Python人脸识别技术,人人都能做识别! 作者丨Python小哥哥 https://www.jianshu.com/p/dce1498ef0ee 一.环境搭建 1.系统环境 Ubu ...

  3. 人脸图像识别(python人脸识别技术)

    python人脸识别 人脸识别的崛起 什么是人脸识别 人脸识别技术的应用和发展 python人脸识别 导入库 实现代码 人脸识别的崛起 什么是人脸识别 人脸识别是将采集到的数据信息,根据人脸特征信息进 ...

  4. 分分钟掌握人脸识别:face_recognition模块

    来源:蝈蝈大数据工作坊[http://www.ggbigdata.cn] Face Recognition 是一个基于 Python 的人脸识别库,该库使用 dlib 顶尖的深度学习人脸识别技术构建, ...

  5. 从零开始学Python人脸识别技术,人工智能不过如此!

    一.环境搭建 1.系统环境 04 Python 2.7.14 pycharm 开发工具 2.开发环境,安装各种系统包 人脸检测基于dlib,dlib依赖Boost和cmake 在windows中如果要 ...

  6. python模块cv2人脸识别_python face_recognition模块实现人脸识别

    import face_recognition #人脸识别库 pip cmake dlib import cv2 #读取图像 face_image1 = face_recognition.load_i ...

  7. 在树莓派上用python实现人脸识别(face_recognition,PIL,opencv)

    小白一路按照领导的要求自己摸索的,若有不对之处,还望各位大佬指正. 一. 环境准备 1.python版本 树莓派4b自带的python版本是2.7的,所以需要我们把这个默认的版本设置改一下,以下的方法 ...

  8. python人脸识别和人脸对比,face_recognition和OpenCV

    前言 先用OpenCV判断图片是否模糊,模糊的话需要重拍: 再用face_recognition检测图片中是否有人脸,有才接着进行下一步: 再用face_recognition计算图片中每张人脸的12 ...

  9. Python人脸识别+手机推送,老板来了你就会收到短信提示

    前言 在你上班的时候刷知乎,看视频,玩手机的时候,老板来了!不用担心,不用着急,基于最新的人脸识别 + 手机推送做出的 BossComing.老板站起来的时候,BossComing 会通过人脸识别发现 ...

最新文章

  1. 关于技术方案与架构宣讲的思考
  2. java 内存模型6_深入理解Java内存模型(六)——final
  3. ros安装过后怎么找不到安装文件_ros配置乐视奥比中光相机
  4. python求最大连续子数组
  5. (计算机组成原理)第五章中央处理器-第四节3:微指令的设计
  6. 【鲲鹏来了】鲲鹏迁移过程案例分享
  7. tinymce移动端使用_关于在移动端避免使用100vh的原因及解决方案
  8. android p preview_细数 Android P 开发者预览版中最不能错过的新特性
  9. kNN(k-nearest-neighbor)算法的Python实现
  10. hdu 1569 1565 (二分图带权最大独立集 - 最小割应用)
  11. 如何证明人的记忆力是无限的
  12. 网络通信协议(互联网协议)
  13. 郝斌c语言视频笔记,郝斌老师C语言专题笔记
  14. Android 面试题(答案最全) 转:http://www.jobui.com/mianshiti/it/android/2682/
  15. 《玩转Deepin第一篇 · Deepin系统的介绍和安装》
  16. Excel图表:随心所欲模拟坐标轴
  17. xp打开html页面不正常,XP系统网页提示“已完毕 但网页上有错误”怎么办?
  18. sqlserver2016修改密码报错-错误: 18456
  19. 微信打开H5网页二维码无法识别的问题
  20. 水浸变送器水浸传感器的原理是什么?

热门文章

  1. 网络编程与分布式系统
  2. SICNUOJ——meng新计划要求规范
  3. 8月11日 集训测试
  4. 【English】十一月英语总结
  5. 3_Cortex-M3和M4 架构
  6. [SARscape] InSAR技术基础应用 - 反演DEM
  7. SQL Server 2019 Express 及 SSMS18 下载安装配置教程
  8. 程序员老黄历Java源码实现
  9. 【如何制作幻灯片】Focusky教程 | 如何复制Focusky的帧?
  10. C++编译器无法捕捉到的8种错误