目录

  • 采集人脸照片20张
  • 总结
  • 参考

采集人脸照片20张

用dlib库采取自己的照片20张并保存:

import cv2
import dlib
import os
import sys
import random
# 存储位置
output_dir = 'D:/631907060224'
size = 64if not os.path.exists(output_dir):os.makedirs(output_dir)
# 改变图片的亮度与对比度def relight(img, light=1, bias=0):w = img.shape[1]h = img.shape[0]#image = []for i in range(0,w):for j in range(0,h):for c in range(3):tmp = int(img[j,i,c]*light + bias)if tmp > 255:tmp = 255elif tmp < 0:tmp = 0img[j,i,c] = tmpreturn img#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()
# 打开摄像头 参数为输入流,可以为摄像头或视频文件
camera = cv2.VideoCapture(0)
#camera = cv2.VideoCapture('C:/Users/CUNGU/Videos/Captures/wang.mp4')index = 1
while True:if (index <= 20):#存储20张人脸特征图像print('Being processed picture %s' % index)# 从摄像头读取照片success, img = camera.read()# 转为灰度图片gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用detector进行人脸检测dets = detector(gray_img, 1)for i, d in enumerate(dets):x1 = d.top() if d.top() > 0 else 0y1 = d.bottom() if d.bottom() > 0 else 0x2 = d.left() if d.left() > 0 else 0y2 = d.right() if d.right() > 0 else 0face = img[x1:y1,x2:y2]# 调整图片的对比度与亮度, 对比度与亮度值都取随机数,这样能增加样本的多样性face = relight(face, random.uniform(0.5, 1.5), random.randint(-50, 50))face = cv2.resize(face, (size,size))cv2.imshow('image', face)cv2.imwrite(output_dir+'/'+str(index)+'.jpg', face)index += 1key = cv2.waitKey(30) & 0xffif key == 27:breakelse:print('Finished!')# 释放摄像头 release cameracamera.release()# 删除建立的窗口 delete all the windowscv2.destroyAllWindows()break

可以看到路径下:

之后采集对应20张图片的68个特征点数组计算出平均特征数组:

# 从人脸图像文件中提取人脸特征存入 CSV
# Features extraction from images and save into features_all.csv# return_128d_features()          获取某张图像的128D特征
# compute_the_mean()              计算128D特征均值from cv2 import cv2 as cv2
import os
import dlib
from skimage import io
import csv
import numpy as np# 要读取人脸图像文件的路径
path_images_from_camera = "D:/631907060224/person/"# Dlib 正向人脸检测器
detector = dlib.get_frontal_face_detector()# Dlib 人脸预测器
predictor = dlib.shape_predictor("D:/BaiduNetdiskDownload/shape_predictor_68_face_landmarks.dat")# Dlib 人脸识别模型
# Face recognition model, the object maps human faces into 128D vectors
face_rec = dlib.face_recognition_model_v1("D:/BaiduNetdiskDownload/dlib_face_recognition_resnet_model_v1.dat")# 返回单张图像的 128D 特征
def return_128d_features(path_img):img_rd = io.imread(path_img)img_gray = cv2.cvtColor(img_rd, cv2.COLOR_BGR2RGB)faces = detector(img_gray, 1)print("%-40s %-20s" % ("检测到人脸的图像 / image with faces detected:", path_img), '\n')# 因为有可能截下来的人脸再去检测,检测不出来人脸了# 所以要确保是 检测到人脸的人脸图像 拿去算特征if len(faces) != 0:shape = predictor(img_gray, faces[0])face_descriptor = face_rec.compute_face_descriptor(img_gray, shape)else:face_descriptor = 0print("no face")return face_descriptor# 将文件夹中照片特征提取出来, 写入 CSV
def return_features_mean_personX(path_faces_personX):features_list_personX = []photos_list = os.listdir(path_faces_personX)if photos_list:for i in range(len(photos_list)):# 调用return_128d_features()得到128d特征print("%-40s %-20s" % ("正在读的人脸图像 / image to read:", path_faces_personX + "/" + photos_list[i]))features_128d = return_128d_features(path_faces_personX + "/" + photos_list[i])#  print(features_128d)# 遇到没有检测出人脸的图片跳过if features_128d == 0:i += 1else:features_list_personX.append(features_128d)i1=str(i+1)add="D:/631907060224/feature/face_feature"+i1+".csv"print(add)with open(add, "w", newline="") as csvfile:writer1 = csv.writer(csvfile)writer1.writerow(features_128d)else:print("文件夹内图像文件为空 / Warning: No images in " + path_faces_personX + '/', '\n')# 计算 128D 特征的均值# N x 128D -> 1 x 128Dif features_list_personX:features_mean_personX = np.array(features_list_personX).mean(axis=0)else:features_mean_personX = '0'return features_mean_personX# 读取某人所有的人脸图像的数据
people = os.listdir(path_images_from_camera)
people.sort()with open("D:/631907060224/feature/features2_all.csv", "w", newline="") as csvfile:writer = csv.writer(csvfile)for person in people:print("##### " + person + " #####")# Get the mean/average features of face/personX, it will be a list with a length of 128Dfeatures_mean_personX = return_features_mean_personX(path_images_from_camera + person)writer.writerow(features_mean_personX)print("特征均值 / The mean of features:", list(features_mean_personX))print('\n')print("所有录入人脸数据存入 / Save all the features of faces registered into: D:/631907060224/feature/features_all2.csv")

运行:

路径下有:

总结

通过本次实验,进一步熟悉对于dlib库的使用,对人脸采集的一些方法也更加熟悉。

参考

Dlib模型实现人脸识别
基于dlib库人脸特征提取【构建自己的人脸识别数据集】

建立自己的人脸数据集相关推荐

  1. 全球最大的公开人脸数据集 | 清华大学芯翌科技联合发布

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人脸识别领域,中国队再次传来捷报. 全球最大规模人脸数据集发布. 首次包含数百万ID和数亿图片. 这就是由芯翌科技与清华大学自动化系智能视觉 ...

  2. 武汉大学提出全球最大的口罩遮挡人脸数据集(附下载地址):RMFD

    前言 近期受 COVID-19(新型冠状病毒肺炎)疫情影响,学术界.工业界陆续用AI技术帮助人类解决问题,并取得重大突破.其中关于口罩遮挡人脸识别.检测以及CT图像分析更是热门的研究方向. RMFD: ...

  3. 深度学习自学(二十六):人脸数据集

    人脸检测,关键点检测,人脸识别,人脸表情,人脸年龄,人脸姿态等方向的数据集. 01 人脸检测 所谓人脸检测任务,就是要定位出图像中人脸的大概位置. 1.1 Caltech 10000 数据集地址:ht ...

  4. 人脸识别:人脸数据集

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...

  5. 【总结】最全1.5万字长文解读7大方向人脸数据集v2.0版,搞计算机视觉怎能不懂人脸...

    人脸图像是计算机视觉领域中研究历史最久,也是应用最广泛的图像.从人脸检测.人脸识别.人脸的年龄表情等属性识别,到人脸的三维重建等,都有非常多的数据集被不断整理提出,极大地促进了该领域的发展. 本次,我 ...

  6. 【技术综述】一文道尽“人脸数据集”

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室,有三AI学院等创始人 作者 | 言有三 编辑 | 言有三 今天,给大家送上一份大礼 没错,我就是喜欢写一些"一文道尽" ...

  7. 【技术综述】一文道尽“人脸数据集”(转载)

    这一次我将从人脸检测,关键点检测,人脸识别,人脸表情,人脸年龄,人脸姿态等几个方向整理出人脸领域有用的数据集清单,不全也有9成全吧. 01 人脸检测 所谓人脸检测任务,就是要定位出图像中人脸的大概位置 ...

  8. 【技术综述】最全人脸数据集收录

    文章首发与微信公众号<有三AI> [技术综述]一文道尽"人脸数据集" 今天,给大家送上一份大礼 没错,我就是喜欢写一些"一文道尽" 这一次我将从人脸 ...

  9. 动漫界的ImageNet来了!人脸数据集AnimeCeleb,240万张图片生成「萌萌哒」动漫脸...

    转自:新智元 想看看全球首富马斯克变成二次元的样子吗? 当当当当! 图片来源:https://huggingface.co/spaces/akhaliq/AnimeGANv2 怎么还有一丝妩媚呢? 近 ...

  10. 你的脸是这样丢掉的:人脸数据集的史上最大规模调查

    1964 年,数学家.计算机科学家 Woodrow Bledsoe 首次尝试将嫌疑犯的面部与计算机中存储的面部照片相匹配的任务:他测量出打印出的照片中不同面部特征之间的距离,并将其输入计算机程序.这个 ...

最新文章

  1. spring事务传播属性与隔离级别
  2. linux postfix 日志,linux – 如何计算Postfix的mailq的消息?
  3. 如何初始化局部变量c语言_【C语言更新】C语言中如何来定义一个指针,并且对其进行初始化...
  4. ScrollView与TableView实现选择效果
  5. 徐昊:运用四色建模法进行领域分析
  6. CNNIC公告称半个月已处理不良网站域名万例
  7. java冒泡排序经典代码6_经典排序算法之冒泡排序
  8. 豪情-2014年年终总结
  9. 剑指offer面试题[60]-将二叉树打印成多行
  10. Linux Vi 文本编辑器常用命令
  11. windows 搭建kms服务器激活_OpenWrt搭建KMS服务器激活Windows和Office
  12. 幂法求解矩阵特征值及特征向量
  13. python函数里调用外部变量
  14. ios 推送通知服务证书不受信任(Apple Push Service certificate is not trusted)
  15. 计算机协会副会职责,计算机协会规章制度解答.doc
  16. HtmlParser初步研究
  17. top--查看服务器CPU及内存使用情况
  18. 网页上文件的上传和下载
  19. java 飞机 源码_Java 飞机游戏源码(带音乐)
  20. 用google hacking让搜索更高级

热门文章

  1. pc系统安全问题让你防不胜防--安装系统屏保时,偶然发现没有安装的ie工具栏软件baidu_jpwb(Just Under/WINDOWS)!
  2. 3.Maven实战 --- maven使用入门
  3. WPS Office 去广告绿色版(2013.11.13更新)
  4. 倒车雷达c语言编程,汽车倒车雷达系统的设计与实现(论文c1)
  5. web前端开发培训培训,JavaScript运算符
  6. Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑
  7. 如何快速解决或避免EDI系统磁盘空间不足?
  8. Linkedin领英如何添加或更改账号的邮箱地址的方法和细节,让我们更高效的运用领英
  9. 计算机领域CCF推荐会议列表
  10. Drool实战系列(一)之入门程序