Dome 多人人脸识别 face_recognition

注意

face_recognition 依赖 face_recognition_models

中文字体文件需要自己下载

1.多人人脸识别

# 多人 人脸识别
import os
import numpy as np
import face_recognition
from PIL import Image, ImageDraw, ImageFont PATH = 'face_imgs'
TMP_IMG = 'tt4.jpeg' # 制作所有可用图像特征码列表
dirs = os.listdir(PATH)
names = [i.split('.')[0] for i in dirs]
face_codes = [] for img_dir in dirs:
current_image = face_recognition.load_image_file(f'{PATH}/{img_dir}')
face_codes.append(face_recognition.face_encodings(current_image)[0]) # 读取目标图片并识别人脸
image = face_recognition.load_image_file(TMP_IMG) pil_image = Image.fromarray(image)
d = ImageDraw.Draw(pil_image) # 定位所有找到的脸的位置
face_locations = face_recognition.face_locations(image)
# 循环找到的所有人脸 results = []
for face_location in face_locations: # 打印每张脸的位置信息
top, right, bottom, left = face_location
# 抠人脸图
face_image = image[top:bottom, left:right]
# 求特征码
# o_face_code.append(face_recognition.face_encodings(np.array(face_image))[0])
result = face_recognition.compare_faces(face_codes,
face_recognition.face_encodings(np.array(face_image))[0],
tolerance=0.4)
results.append(result)
# 画矩形
d.rectangle((left, top, right, bottom), None, 'red', width=2)
# 画文字_中文 name = ''
for na in np.unique(np.array(names)[result]):
name += f'{na} '
path_to_ttf = r'font/simfang.ttf'
font = ImageFont.truetype(path_to_ttf, size=14) # 设置字体
d.text(xy=(left, bottom), text=name, fill='red', font=font, stroke_width=1) pil_image.show()

2.人脸检测

from PIL import Image, ImageDraw

import face_recognition

# 读取图片并识别人脸
image = face_recognition.load_image_file("t2.png")
face_locations = face_recognition.face_locations(image)
print(face_locations) pil_image = Image.fromarray(image)
d = ImageDraw.Draw(pil_image) # 遍历每个人脸,并标注
faceNum = len(face_locations)
for i in range(0, faceNum):
top = face_locations[i][0]
right = face_locations[i][1]
bottom = face_locations[i][2]
left = face_locations[i][3] rect = (left, top, right, bottom) d.rectangle(rect, None, outline='red', width=2) pil_image.show()

3.人脸检测加抠图

from PIL import Image

import face_recognition
#加载图像文件
image = face_recognition.load_image_file("t2.png") #定位所有找到的脸的位置
face_locations = face_recognition.face_locations(image)
# 循环找到的所有人脸
for face_location in face_locations:
# 打印每张脸的位置信息
top, right, bottom, left = face_location
print("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()

4.关键点检查

from PIL import Image, ImageDraw
import face_recognition # 将jpg文件加载到numpy 数组中
image = face_recognition.load_image_file("t2.png") #查找图像中所有面部的所有面部特征
face_landmarks_list = face_recognition.face_landmarks(image) print("I found {} face(s) in this photograph.".format(len(face_landmarks_list)))
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:
print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature]))
#在图像中画出每个人脸特征!
for facial_feature in facial_features:
d.line(face_landmarks[facial_feature], width=2, fill='red') pil_image.show()

5.关键点检查加毁容

** 据说是美颜来着,怎么成这样我也......emmmmmm**

import face_recognition
from PIL import Image, ImageDraw # Load the jpg file into a numpy array
image = face_recognition.load_image_file("tt3.jpg") # Find all facial features in all the faces in the image
face_landmarks_list = face_recognition.face_landmarks(image) for face_landmarks in face_landmarks_list:
# Create a PIL imageDraw object so we can draw on the picture
pil_image = Image.fromarray(image)
d = ImageDraw.Draw(pil_image, 'RGBA') # 画个浓眉
d.polygon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128))
d.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128))
d.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=5)
d.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=5) # 涂个性感的嘴唇
d.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128))
d.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128))
d.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=8)
d.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=8) # 闪亮的大眼睛
d.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30))
d.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30)) # 画眼线
d.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=6)
d.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0, 110), width=6) pil_image.show()

原图













Dome 多人人脸识别 face_recognition的更多相关文章

  1. Python 人工智能之人脸识别 face_recognition 模块安装

    Python人工智能之人脸识别face_recognition安装 face_recognition 模块使用系统环境搭建 系统环境 Ubuntu / deepin操作系统 Python 3.6 py ...

  2. 可学习的多人人脸识别程序(基于Emgu CV)

    源代码下载(需要安装Emgu CV,安装方法请百度) 很多朋友使用Emgu CV遇到CvInvoke()的报错,我找到一种解决方法. 把EmguCV目录下bin里面的所有dll复制到C:\WINDOW ...

  3. 开源人脸识别face_recognition

    环境:python36 1.安装dlib.face_recognition windows版 下载dlib,cp后面是py版本 下载地址:https://pypi.org/simple/dlib/ 提 ...

  4. opencv学习之路(41)、人脸识别

    一.人脸检测并采集个人图像 //take_photo.cpp #include<opencv2/opencv.hpp> using namespace cv; using namespac ...

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

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

  6. face_recognition开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38%——新开源的用了一下感受一下 原创 2017年07月28日 21:25:28 标签: 人脸识别 / 人脸自动定位 / 人脸识别开源库 / f ...

  7. Github开源人脸识别项目face_recognition

    Github开源人脸识别项目face_recognition 原文:https://www.jianshu.com/p/0b37452be63e 译者注: 本项目face_recognition是一个 ...

  8. 基于Python的face_recognition库实现人脸识别

    一.face_recognition库简介 face_recognition是Python的一个开源人脸识别库,支持Python 3.3+和Python 2.7.引用官网介绍: Recognize a ...

  9. 利用face_recognition,dlib与OpenCV调用摄像头进行人脸识别

    用已经搭建好 face_recognition,dlib 环境来进行人脸识别 未搭建好环境请参考:https://www.cnblogs.com/guihua-pingting/p/12201077. ...

随机推荐

  1. 基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)

    实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端.而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如 ...

  2. linux 安装 memcached

    1.Linux系统安装memcached,首先要先安装libevent库. yum install libevent libevent-deve 2.安装memcached yum install - ...

  3. JDK8内存模型—消失的PermGen

    一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫“栈 ...

  4. Spark RDD Tutorial

    Spark RDD教程 这个教程将会帮助你理解和使用Apache Spark RDD.所有的在这个教程中使用的RDD例子将会提供在github上,供大家快速的浏览. 什么是RDD(Rssilient ...

  5. bug的前世今生

    项目上发现的产品bug,若本地有问题,那就是漏测 1.提到产品bug系统 2.需要追踪,要么是漏测,要么是改出来的问题,漏测的需要补充到测试点里 项目上发现的产品bug,若本地没问题,那就是项目上的产 ...

  6. JDk下载和环境变量Path的配置

    JDK下载与安装 下载地址 打开该网址会显示如下图,点击DOWMLOAD即可: 出现该页面时,点击接受: 选择对应的安装包下载即可(本人用的是Windows64位): 注:如果您无法确定您的windo ...

  7. MySQL 【优化宝典】

    概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计数据库 ...

  8. 数据结构 - ArrayList

    简介 ArrayList是一个动态数组.ArrayList几乎拥有数组所有优点,例如元素有序,索引访问等:并且一般情况下它还不会越界,添加元素时它能动态扩容.平时工作中ArrayList被我们广泛应用 ...

  9. Lambda表达式学习笔记

    Lambda基础语法 Java8中引入了一个新的操作符" -> ",该操作符被称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分成两部分: 左侧:Lamb ...

  10. WordCount程序(Java)

    Github项目地址:https://github.com/softwareCQT/web_camp/tree/master/wordCount 一.题目描述 实现一个简单而完整的软件工具(源程序特征 ...