Python快速实现人脸识别
文章目录
- 问题描述
- 解决方案
- 安装
- 人脸检测
- 1. HARR特征级联分类器
- 2. LBP特征级联分类器
- 3. DNN预训练模型
- 4. MTCNN预训练模型
- 5. HOG人脸检测器
- 6. MMOD预训练模型
- 7. RetinaFace预训练模型
- 运算时间
- 人脸识别
- 1. LBPH人脸识别器
- 2. OpenFace人脸识别器(尚未完成)
- 3. DeepID人脸识别器(尚未完成)
- 4. FaceNet人脸识别器(尚未完成)
- 5. InsightFace(尚未完成)
- 6. ArcFace(尚未完成)
- 摄像头捕获
- 戴圣诞帽
- TODO
- 人脸识别常用数据集
- 备注
- 参考文献
本文代码、图片及模型下载地址
问题描述
1.jpg
2.jpg
人脸检测:把人脸框出来。
人脸对齐:把人脸的关键点定位出来。
人脸识别:判断出谁是谁。
解决方案
- 人脸检测,收集人脸数据
- 提取人脸深度特征
- 训练人脸识别分类器
- 人脸检测,调用识别分类器进行人脸识别
安装
pip install opencv-python
pip install opencv-contrib-python
人脸检测
1. HARR特征级联分类器
使用 OpenCV 的级联分类器 CascadeClassifier 加载预训练模型 haarcascade_frontalface_default.xml,该模型使用 AdaBoost 算法,运行速度十分快,在2013年12月19日上传。
代码
import cv2# 读取文件
image = '1.jpg'
model = 'haarcascade_frontalface_default.xml'
image = cv2.imread(image) # 读取图片
model = cv2.CascadeClassifier(model) # 加载模型# 人脸检测
faces = model.detectMultiScale(image)
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=2) # 画出人脸矩形框# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
效果
缺点:
- 仅适用于正面人脸。
- 鲁棒性不足,经常翻车。例如衣服有个地方很像人脸也会检测出来。
2. LBP特征级联分类器
使用 OpenCV 的级联分类器 CascadeClassifier 加载预训练模型 lbpcascade_frontalface_improved.xml,该模型在2016年12月21日上传。
代码
import cv2# 读取文件
image = '1.jpg'
model = 'lbpcascade_frontalface_improved.xml'
image = cv2.imread(image) # 读取图片
model = cv2.CascadeClassifier(model) # 加载模型# 人脸检测
faces = model.detectMultiScale(image)
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=2) # 画出人脸矩形框# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
效果
3. DNN预训练模型
使用 OpenCV 的 DNN 人脸识别预训练模型,该模型基于残差网络 ResNet-10 的 SSD 网络模型,运行速度十分快,在2018年上传。
- Caffe模型
- res10_300x300_ssd_iter_140000_fp16.caffemodel
- deploy.prototxt
- TensorFlow模型
- opencv_face_detector_uint8.pb
- opencv_face_detector.pbtxt
代码
import cv2
import numpy as np# 读取文件
image = '1.jpg'
net = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000_fp16.caffemodel') # Caffe模型
# net = cv2.dnn.readNetFromTensorflow('opencv_face_detector_uint8.pb', 'opencv_face_detector.pbtxt') # TensorFlow模型
image = cv2.imread(image) # 读取图片
height, width, channel = image.shape # 高、宽、通道数# 人脸检测
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0)) # 调整大小并降低光照的影响
net.setInput(blob) # 设置输入
detections = net.forward() # 检测结果
faces = detections[0, 0] # 人脸结果
for face in faces:confidence = face[2] # 置信度if confidence > 0.5: # 置信度阈值设为0.5box = face[3:7] * np.array([width, height, width, height]) # 人脸矩形框坐标pt1 = int(box[0]), int(box[1]) # 左上角坐标pt2 = int(box[2]), int(box[3]) # 右下角坐标cv2.rectangle(image, pt1, pt2, (0, 255, 0), thickness=2) # 画出人脸矩形框text = '{:.2f}%'.format(confidence * 100) # 置信度文本startX, startY = pt1y = startY - 10 if startY - 10 > 10 else startY + 10org = (startX, y) # 文本的左下角坐标cv2.putText(image, text, org, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), thickness=2) # 画出置信度# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
效果
小男孩人脸置信度仅为50.38%,有待提高
4. MTCNN预训练模型
MTCNN 即 Multi-task Cascaded Convolutional Networks ,多任务级联卷积神经网络,可完成人脸检测和人脸对齐。
- detect_face.py 构建MTCNN网络
- 模型权重:det1.npy、det2.npy、det3.npy
代码
import cv2
import detect_face
import tensorflow as tf# 读取文件
image = '1.jpg'
image = cv2.imread(image) # 读取图片
pnet, rnet, onet = detect_face.create_mtcnn(tf.Session(), None) # 加载模型# 人脸检测
minsize = 20 # 人脸最小尺寸
threshold = [0.6, 0.7, 0.7] # MTCNN三个阶段的阈值
factor = 0.709 # 人脸大小缩放金字塔的比例
margin = 44 # 边框周围的裁剪边距
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
faces, _ = detect_face.detect_face(image_rgb, minsize, pnet, rnet, onet, threshold, factor)
for face in faces:face = face.astype(int)(x, y, w, h) = face[:4]cv2.rectangle(image, (x, y), (w, h), (0, 255, 0), thickness=2) # 画出人脸矩形框# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
若报错
TypeError: reduce_max() got an unexpected keyword argument 'keepdims'
,原因是TensorFlow版本低于1.7.0,将keepdims
替换成keep_dims
即可
效果
5. HOG人脸检测器
使用 Dlib 的 HOG人脸检测器
安装步骤:
- CMake,将 bin 目录添加到环境变量 PATH 中。
- Dlib
- 若安装失败,可能还需要Visual Studio,本人使用2015
代码
import cv2
import dlib# 读取文件
image = '1.jpg'
image = cv2.imread(image)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 人脸检测
model = dlib.get_frontal_face_detector() # 加载模型
faces = model(image_rgb, 1)
for face in faces:(x, y, w, h) = face.left(), face.top(), face.right(), face.bottom()cv2.rectangle(image, (x, y), (w, h), (0, 255, 0), thickness=2) # 画出人脸矩形框# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
效果
6. MMOD预训练模型
使用 Dlib 的 MMOD人脸检测器,基于 DNN 实现,下载预训练模型 mmod_human_face_detector.dat.bz2 并解压。
代码
import cv2
import dlib# 读取文件
image = '1.jpg'
image = cv2.imread(image)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 人脸检测
model = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat') # 加载模型
faces = model(image_rgb, 1)
for face in faces:face = face.rect(x, y, w, h) = face.left(), face.top(), face.right(), face.bottom()cv2.rectangle(image, (x, y), (w, h), (0, 255, 0), thickness=2) # 画出人脸矩形框# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
效果
7. RetinaFace预训练模型
使用 InsightFace 的 RetinaFace 预训练模型,该模型达到了 WiderFace 的 SOTA。
安装
pip install insightface
代码
import cv2
from insightface.model_zoo import face_detection# 读取文件
image = cv2.imread('1.jpg') # 读取图片
model = face_detection.retinaface_r50_v1() # 加载模型
model.prepare(ctx_id=-1, nms=0.4)# 人脸检测
faces, landmark = model.detect(image, threshold=0.5, scale=1.0)
for face in faces:(x, y, w, h, confidence) = facept1 = int(x), int(y)pt2 = int(w), int(h)cv2.rectangle(image, pt1, pt2, (0, 255, 0), thickness=2) # 画出人脸矩形框text = '{:.2f}%'.format(confidence * 100) # 置信度文本startX, startY = pt1y = startY - 10 if startY - 10 > 10 else startY + 10org = (startX, y) # 文本的左下角坐标cv2.putText(image, text, org, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), thickness=2) # 画出置信度# 显示和保存图片
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', image)
print('已保存')
效果
运算时间
对比不同方法的运算时间
import cv2
import time
import numpy as np# 读取图片
image = '2.jpg'
image = cv2.imread(image)# 级联分类器
model = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 加载模型
beg = time.time()
faces = model.detectMultiScale(image)
end = time.time()
print('级联分类器 {:.2f} s'.format(end - beg))# DNN Caffe模型
net = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000_fp16.caffemodel') # Caffe模型
beg = time.time()
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()
end = time.time()
print('DNN Caffe模型 {:.2f} s'.format(end - beg))# DNN TensorFlow模型
net = cv2.dnn.readNetFromTensorflow('opencv_face_detector_uint8.pb', 'opencv_face_detector.pbtxt') # TensorFlow模型
beg = time.time()
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()
end = time.time()
print('DNN TensorFlow模型 {:.2f} s'.format(end - beg))
结果
模型 | 大小 | 运算时间 |
---|---|---|
级联分类器 | 0.89 MB | 0.35 s |
Caffe模型 | 5.12 MB | 0.04 s |
TensorFlow模型 | 2.63 MB | 0.04 s |
人脸识别
1. LBPH人脸识别器
使用 LBPHFaceRecognizer (Local Binary Patterns Histograms),局部二值模式直方图,可降低特征维度。而OpenCV另两个人脸识别算法 EigenFaceRecognizer 和 FisherFaceRecognizer 考虑总体特征。
image
代码
import os
import cv2
import time
import sqlite3
import pathlib
import numpy as np
from tkinter import *
from PIL import Image, ImageTk, ImageFont, ImageDrawname = '' # 当前人脸的名字
lastid = 0 # 用户最新的id
id_name_map = {} # 用户id对应名字
name_id_map = {} # 用户名对应iddef cv2_putChinese(image, chinese, xy, font='msyh.ttc', size=25, fill=(255, 0, 0)):"""cv2转PIL绘制中文后转回cv2"""image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image = Image.fromarray(image)font = ImageFont.truetype(font, size)draw = ImageDraw.Draw(image)draw.text(xy, chinese, font=font, fill=fill)image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)return imagedef show_on_tkinter(image, title):"""用tkinter显示图片"""def save(event):global nameglobal lastidname = entry.get()if name:if name not in name_id_map:c.execute('INSERT INTO users (`name`) VALUES (?)', (name,)) # 插入数据库conn.commit() # 提交lastid += 1 # 更新用户最新的idid_name_map[lastid] = namename_id_map[name] = lastid # 更新所有用户if name_id_map:print('数据库中的用户有: {}'.format(' '.join(name_id_map))) # 所有用户os.makedirs('dataset/{}'.format(name), exist_ok=True) # 保存人脸图像目录filename = 'dataset/{}/{}.jpg'.format(name, int(time.time())) # 保存人脸图像文件名image.save(filename) # 用Image.save()避免cv2.imwrite()不能中文名的缺点window.destroy()window = Tk()window.title(title)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)height, width, channels = image.shapecanvas = Canvas(window, width=width, height=height)canvas.pack()image = Image.fromarray(image)photo = ImageTk.PhotoImage(image)canvas.create_image(0, 0, image=photo, anchor=NW)label = Label(window, text='输入姓名,空则跳过')label.pack(anchor=CENTER)entry = Entry(window)entry.pack(anchor=CENTER)entry.focus_force()entry.bind('<Return>', func=save)window.mainloop()# 人脸数据库
conn = sqlite3.connect('database.db') # 人脸数据库
c = conn.cursor()
sql = '''
CREATE TABLE IF NOT EXISTS users (`id` INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT,`name` TEXT UNIQUE
);
'''
c.execute(sql) # 用户表
users = c.execute('SELECT * FROM users')
for (id, name) in users:lastid = idid_name_map[lastid] = namename_id_map[name] = id
if name_id_map:print('数据库中的用户有: {}'.format(' '.join(name_id_map))) # 所有用户# 记录人脸
os.makedirs('dataset', exist_ok=True) # 保存人脸图像目录
model = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 加载模型
images = pathlib.Path('image').rglob('*')
for image in images:print('正在处理: {}'.format(image))image = str(image)image = cv2.imread(image)original = image.copy()cv2.imshow('original', original)gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 转灰度图faces = model.detectMultiScale(gray)for i, (x, y, w, h) in enumerate(faces):face = image[y:y + h, x:x + w]cv2.rectangle(original, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)cv2.imshow('original', original)show_on_tkinter(face, title=i + 1)
cv2.destroyAllWindows()
conn.close()# 训练人脸识别器
recognizer = cv2.face.LBPHFaceRecognizer_create()
ids = []
faces = []
for name in pathlib.Path('dataset').rglob('*'):images = pathlib.Path(name).glob('*')for image in images:ids.append(name_id_map[name.name])image = Image.open(image).convert('L')image = np.array(image)faces.append(image)
ids = np.array(ids)
recognizer.train(faces, ids)
recognizer.save('recognizer.yml') # 保存人脸识别器模型# 使用人脸识别器recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('recognizer.yml') # 加载人脸识别器
img = cv2.imread('image/2.jpg') # 选一张图片识别
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = model.detectMultiScale(gray)
for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)ids, conf = recognizer.predict(gray[y:y + h, x:x + w])name = id_name_map[ids]print(ids, name, conf)img = cv2_putChinese(img, name, (x + 2, y + h - 5))
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('result.jpg', img)
print('已保存')
记录人脸
效果
2. OpenFace人脸识别器(尚未完成)
OpenFace官网
Face Recognition using OpenFace
3. DeepID人脸识别器(尚未完成)
4. FaceNet人脸识别器(尚未完成)
使用 FaceNet 的 人脸识别预训练模型,模型基于 Inception ResNet v1,在2018年上传。
随意选一个模型:
- 20180408-102900
- LFW准确率:99.05%
- 训练数据集:CASIA-WebFace
- 20180402-114759
- LFW准确率:99.65%
- 训练数据集:VGGFace2
Train a classifier on own images · davidsandberg/facenet Wiki · GitHub
5. InsightFace(尚未完成)
开源大佬面对面:InsightFace带你打造开箱即用的人脸识别系统
6. ArcFace(尚未完成)
摄像头捕获
import cv2
import numpy as npnet = cv2.dnn.readNetFromTensorflow('opencv_face_detector_uint8.pb', 'opencv_face_detector.pbtxt') # TensorFlow模型def face_recognition(image):height, width, channel = image.shape # 高、宽、通道数blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0)) # 调整大小并降低光照的影响net.setInput(blob) # 设置输入detections = net.forward() # 检测结果faces = detections[0, 0] # 人脸结果for face in faces:confidence = face[2] # 置信度if confidence > 0.5: # 置信度阈值设为0.5box = face[3:7] * np.array([width, height, width, height]) # 人脸矩形框坐标pt1 = int(box[0]), int(box[1]) # 左上角坐标pt2 = int(box[2]), int(box[3]) # 右下角坐标cv2.rectangle(image, pt1, pt2, (0, 255, 0), thickness=2) # 画出人脸矩形框text = '{:.2f}%'.format(confidence * 100) # 置信度文本startX, startY = pt1y = startY - 10 if startY - 10 > 10 else startY + 10org = (startX, y) # 文本的左下角坐标cv2.putText(image, text, org, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), thickness=2) # 画出置信度return imageif __name__ == '__main__':cap = cv2.VideoCapture(0) # 打开摄像头if not cap.isOpened(): # 没打开直接退出print("Cannot open camera")exit()while True:ret, frame = cap.read() # 逐帧捕获if not ret: # 正确读取ret为Trueprint("Can't receive frame (stream end?). Exiting ...")breakframe = face_recognition(frame)cv2.imshow('frame', frame) # 显示if cv2.waitKey(1) == ord('q'): # q退出breakcap.release() # 释放摄像头cv2.destroyAllWindows()
效果
戴圣诞帽
图片尺寸会被统一,仍需优化
import cv2
import numpy
import random
from PIL import Image
from pathlib import Path# 参数
HAT_PATH = './hat/' # 圣诞帽图像路径
MODEL_PATH = 'haarcascade_frontalface_default.xml' # 人脸识别预训练模型路径# 读取
model = cv2.CascadeClassifier(MODEL_PATH)# 读取圣诞帽
hats = [] # 圣诞帽
hats_portion = [] # 圣诞帽宽高比
for i in Path(HAT_PATH).glob('*.png'):hat = Image.open(i)width, height = hat.sizehats.append(hat)hats_portion.append(width / height)def std_size(imagePath):'''转标准尺寸'''pic = Image.open(imagePath)width, height = pic.sizeportion = width / heightif portion < 1: # 肖像if portion <= 0.75:pic_w = 960pic_h = round(960 / portion)box = (0, round((pic_h - 1280) / 2), 960, round(pic_h / 2 + 640))if portion > 0.75:pic_h = 1280pic_w = round(1280 * portion)box = (round((pic_w - 960) / 2), 0, round(pic_w / 2 + 480), 1280)elif portion > 1: # 风景if portion >= 1.3333:pic_h = 960pic_w = round(960 * portion)box = (round((pic_w - 1280) / 2), 0, round(pic_w / 2 + 640), 960)if portion < 1.3333:pic_w = 1280pic_h = round(1280 / portion)box = (0, round((pic_h - 960) / 2), 1280, round(pic_h / 2 + 480))elif portion == 1: # 正方形(pic_w, pic_h) = (960, 960)box = (0, 0, 960, 960)pic = pic.resize((pic_w, pic_h))pic = pic.crop(box)return picdef face_detect(pil_image):'''人脸检测:param pil_image: PIL读取的图片'''image = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR) # PIL转cvgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)faces = model.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(50, 60),flags=cv2.CASCADE_SCALE_IMAGE)return facesdef get_hat(x, y, w, h):# 设定每个帽子的概率num = random.randint(1, 100)if num in range(1, 17):hat_num, offset1, offset2, offset3 = (0, 1.2, .05, .67) # hat1elif num in range(17, 33):hat_num, offset1, offset2, offset3 = (1, 1.3, -.4, .62) # hat2elif num in range(33, 49):hat_num, offset1, offset2, offset3 = (2, .9, .05, .8) # hat3elif num in range(91, 101):hat_num, offset1, offset2, offset3 = (3, 1.2, .05, .67) # green hatelif num in range(49, 65):hat_num, offset1, offset2, offset3 = (4, 1.2, -.1, 1.2) # jiao1elif num in range(65, 81):hat_num, offset1, offset2, offset3 = (5, 1, 0, 1.2) # jiao2elif num in range(81, 91):hat_num, offset1, offset2, offset3 = (6, .9, .05, 1) # treehat_portion = hats_portion[hat_num](hat_w, hat_h) = (int(w * offset1), int(w * offset1 / hat_portion))# print('hat size:', hat_w, hat_h)hatter = hats[hat_num].resize((hat_w, hat_h))(hat_x, hat_y) = (int(x + w * offset2), int(y - hat_h * offset3))hat_pos = (hat_x, hat_y)# print('hat at:', hat_x, hat_y)return (hatter, hat_pos)def wear_hat(imagePath, output, show=False):'''戴圣诞帽:param imagePath: 图片路径:param output: 保存路径:param show: 是否显示中间过程:return:'''# 人脸检测image = std_size(imagePath)faces = face_detect(image)if show:temp_image = image.copy()# 戴圣诞帽for (x, y, w, h) in faces:# print('face at:', x, y, w, h)(hatter, hat_pos) = get_hat(x, y, w, h)image.paste(hatter, hat_pos, hatter)image.save(output)if show:# 原图temp_image = cv2.cvtColor(numpy.array(temp_image), cv2.COLOR_RGB2BGR)cv2.imshow('1', temp_image)cv2.waitKey(0)# 人脸检测框for (x, y, w, h) in faces:cv2.rectangle(temp_image, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)cv2.imshow('1', temp_image)cv2.waitKey(0)# 戴圣诞帽temp_image = Image.fromarray(cv2.cvtColor(temp_image, cv2.COLOR_BGR2RGB))for (x, y, w, h) in faces:(hatter, hat_pos) = get_hat(x, y, w, h)temp_image.paste(hatter, hat_pos, hatter)temp_image = cv2.cvtColor(numpy.array(temp_image), cv2.COLOR_RGB2BGR) # PIL转cvcv2.imshow('1', temp_image)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':wear_hat('2.jpg', 'result.jpg', show=True)
TODO
- 人脸识别:即认出谁是谁
- OpenVINO预训练模型
需要Intel的CPU
参考文献:
- How to use OpenVINO pre-trained models?
- Using Intel OpenVINO Pre-Trained Models
人脸识别常用数据集
数据集 | 图片数量 | 人脸数量 | 描述 |
---|---|---|---|
LFW (Labeled Faces in the Wild) | 13233 | 5749 | 人脸识别的基准数据集 |
YTF (YouTube Faces) | 3425视频 | 1595 | |
CALFW (Cross-Age LFW) | 跨年龄 | ||
CPLFW (Cross-Pose LFW) | 跨姿势 | ||
CFP (Celebrities in Frontal-Profile in the Wild) | 7000 | 500 | 知名人物的前额,侧脸 |
AgeDB-30 | 12240 | 570 | 跨年龄人脸识别数据集 |
MegaFace | 470万 | 672057 | 平均每人7张图片 |
IJB-C (IARPA Janus Benchmark C) | 138000图+11000视频 | ||
FRVT (Face Recognition Vendor Test) | 考虑精度、速度、存储、可靠性等 | ||
VGGFace | 200万 | 2622 | 噪声较小,常作为训练模型的数据 |
VGGFace2 | 331万 | 9131 | 噪声较小,跨年龄、姿态、种族,常作为训练模型的数据 |
CASIA-WebFace | 494414 | 10575 | 国内颇具盛名的人脸识别数据集 |
备注
推荐阅读:Face Recognition 人脸识别
参考文献
- opencv haarcascades 预训练模型
- OpenCV Document
- wx-fancy-pic: 微信公众号服务,根据用户发来的照片自动生成海报或有趣的照片
- OpenCV4 DNN人脸检测
- OpenCV中支持的人脸检测方法整理与汇总
- MTCNN实时人脸检测网络详解
- OpenVINO Toolkit Intel’s Pre-Trained Models
- openface: Face recognition with deep neural networks.
- facenet: Face recognition using Tensorflow
- awesome-Face_Recognition
- FaceBoxes—官方开源CPU实时高精度人脸检测器
- OpenCV Face Recognition - PyImageSearch
- 人脸识别常用数据集介绍(附下载链接)及常用评估指标
- 人脸识别最新进展以及工业级大规模人脸识别实践探讨
- 格灵深瞳开源全球最大最干净的人脸识别数据集:Glint360K
- A full guide to face detection
- insightface/detection/RetinaFace
Python快速实现人脸识别相关推荐
- 用Python-opencv快速实现人脸识别功能(从零开始教你)(复制粘贴即可用)
用Python快速实现人脸识别功能 首先: 一.开发环境: 1.你需要个Python,下载好后设置环境变量(CSDN上面有很多这里不做过多介绍)可以参考 Python下载教程 2.下载pip-参考博主 ...
- python人脸识别opencv_Python基于Opencv来快速实现人脸识别过程详解(完整版)
前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为 ...
- 人脸识别python face_recognize_【python+face_recognition】人脸识别初始
[python+face_recognition]人脸识别初始 发布时间:2018-09-01 12:03, 浏览次数:366 , 标签: python face recognition face_r ...
- python好学吗 小木虫-25行Python代码完成人脸识别
以下是Shantnu Tiwari的客座文章,作者有着在底层编程和嵌入式领域十年的工作经验.在发现Python语言之前的几年时间里,Shantnu Tiwari一直忍受着C/C++语言编程的不便,但P ...
- 基于Python的开源人脸识别库:离线识别率高达99.38%
基于Python的开源人脸识别库:离线识别率高达99.38% 2019年04月18日 18:13:18 AI终结者 阅读数 1233 项目地址:https://github.com/ageitgey/ ...
- Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%
Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...
- python简单的人脸识别系统(PCA+逻辑回归)
python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...
- Python简单实现人脸识别检测, 对照片进行评分
大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮. [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests ...
- 【Python】基于人脸识别的智能考勤系统(Pyqt5+MySQL+Opencv) [PC端部分-已附源码]
[Python]基于人脸识别的考勤系统 [PC端部分] 一.项目简介 本项目编程语言Python3.6,编程工具pycharm,其他工具QT Designer.Navicat,表单信息保存在本地MyS ...
最新文章
- 让人脸识别算法失灵,还能抵抗微信微博照片压缩!武大Adobe提出抗压缩对抗新框架,成功率最高超90%...
- 设计模式之访问者模式、例子分析
- Shiny平台构建与R包开发(四)——按钮与响应事件
- 算法--------------有效的数独
- Sublime3 搭建C/C++环境
- 在C#中使用Json.Net进行序列化和反序列化及定制化
- angular 权限 php,PHP,Angular,HTACCESS-仅允许来自源域的请求
- mysql中括号_干货!Python与MySQL数据库的交互实战
- 为5—18岁青少年提供营地教育,漫族完成百万级天使轮融资
- java开发http协议接口_java开发接口利用http协议传输数据
- PKI/CA与数字证书
- 2-7 hash(2)
- python 递归函数 内存底层_Python基础篇【第八篇】:剖析递归函数
- 已知拱高和弦长,求弧长、半径、角度
- 计算机教育部一级学科,教育部学科门类,一级学科有多少个?
- 编写微信聊天机器人1《聊天精灵WeChatGenius》:搭建环境,创建项目,提交GitHub。
- MacQQ上接收的文件都放在哪?
- 控制台版单机双人五子棋游戏(Java版)---新人小白
- Vs2015智能提示英文的处理方案。
- 12.JAVA编程思想——集合的类型