文章目录

  • 前言
  • 一、项目结构
  • 二、使用步骤
    • 1.生成特征向量
    • 2.训练模型
    • 3.运行结果
  • 总结

前言

在之前的对IU的人脸识别中,在使用face_recognition库进行人脸提取的过程中,发现这个人脸识别库还有一个提取特征点的功能,可以根据人脸提取出特征向量。而之前那个利用siamenetwork的效果并不好,我猜测是网络结构不佳,或是数据集没处理好,导致对人脸的特征提取和学习都不够好。那么既然这个face_recognition库能够提取人脸的特征向量,那么可不可以就利用这个向量来训练模型。正是基于这样的想法,我进行了本次尝试。
利用face_recognition库对人物图片提取人脸,并生成特征向量,利用SVM(支持向量机)进行学习,实现二分类任务(是IU/不是IU)。
项目环境:Python 3.6


一、项目结构

二、使用步骤

1.生成特征向量

打开路径中的每一张人脸,生成特征向量后,添加到face_encodings中,最后再统一存放到对应路径下的.npy文件中去。代码如下:

import face_recognition
import numpy as np
import osif __name__ == '__main__':mark1 = 'IU'      # 文件标志,用于路径mark2 = 'Other'marks = [mark1, mark2]for mark in marks:root = "E:/Table/学习数据集/face_recognition/data/processed/train/" + mark + '/'img = os.listdir(root)face_encodings = []for i in range(len(img)):try:path = root + '%d.JPG' % iprint(path)image = face_recognition.load_image_file(path)face_encoding = face_recognition.face_encodings(image)[0]  # 计算图片对应的编码except (IndexError):print('too much faces, continue')continueelse:face_encodings.append(face_encoding)new_path = "E:/Table/学习数据集/face_recognition/data/" + mark + '.npy'np.save(new_path, face_encodings)

2.训练模型

先读入IU.npy,记录数据长度,将对应标签置为0。再读入Other.npy,将对应标签置为1。利用sklearn库中的svm进行训练,可以得到一个二分类的分类器。将待分辨的人脸提取出特征向量放入分类器clf,得到的结果若是0,则说明是IU,将对应图片复制到指定文件夹下。 代码如下:

from sklearn import model_selection, svm
import numpy as np
import os
from PIL import Image
import face_recognition
import shutilGET_IU = 1if __name__ == '__main__':label = []data_iu = np.load("E:/Table/学习数据集/face_recognition/data/IU.npy")print(len(data_iu))for i in range(len(data_iu)):label.append(0)print(len(label))data_other = np.load("E:/Table/学习数据集/face_recognition/data/Other.npy")print(len(data_other))for i in range(len(data_other)):label.append(1)label = np.asarray(label)label = label.reshape(-1, 1)print(len(label))data = np.vstack((data_iu, data_other))print(len(data))train_data, test_data, train_label, test_label \= model_selection.train_test_split(data, label, random_state=1, train_size=0.6, test_size=0.4)print(train_data.shape)print(train_label.shape)clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')clf.fit(train_data, train_label)print('训练集准确率:%.03f%%'  %(100 * clf.score(train_data, train_label)))print('测试集准确率:%.03f%%'  %(100 * clf.score(test_data, test_label)))# 开始判别,从’待分辨人脸‘中找出IU存放到’IU_pic‘#############################################################################################if GET_IU == 1:judge_root = 'E:/Table/学习数据集/face_recognition/face_for_judge/'img_judge = os.listdir(judge_root)new_path = 'E:/Table/学习数据集/face_recognition/IU_pic/'result = []n = 0for i in range(len(img_judge)):try:path = judge_root + '%d.JPG' % iprint(path)image = face_recognition.load_image_file(path)face_encoding = face_recognition.face_encodings(image)[0]  # 计算图片对应的编码except (IndexError):print('too much faces, continue')continueelse:face_encoding = face_encoding.reshape(1, 128)id = clf.predict(face_encoding)if id == 0:shutil.copy(judge_root + img_judge[i], new_path)n += 1print('/n在%d张图片中,共找到%d张IU的图片' % (len(img_judge), n))#############################################################################################

3.运行结果

在数据集上可以达到很好的效果,但是在实际使用过程中,对IU的人脸识别还是不是很准确。猜测有一部分的可能性是因为我从网上爬取的人物图片中,IU的图片只占了很小一部分(9/1000),这导致二分类的分类器工作难免有较大的误差。将爬取图片中IU图片的比例增大(500/1500),效果确实会好一点点,但也不明显。


总结

我又失败啦,果然在自己爬取的数据集上进行人脸识别还是比较困难的呀。

人脸识别IU(李知恩)(2)相关推荐

  1. 什么是iu组装服务器,IU李知恩和“买家秀”在“教科书”级别的私有服务器共享是邻居...

    T恤在很多女孩心目中可以算是百搭,但是很难穿上一种新时尚单品,因为宽松的款式很难满足女孩突出身材的需求,而极高的舒适性也让她们无法完全抛弃T恤.如果你不知道热门的夏天在t恤上看起来如何好看,让我们看看 ...

  2. 人脸识别IU(李知恩)

    文章目录 前言 一.项目结构 二.数据集准备 三.网络模型 四.具体代码 1.get_face.py 2.find_iu.py 3.spider_iu.py 4.file_deal.py 5.netw ...

  3. 机器学习——SVM(支持向量机)与人脸识别

    目录 系列文章目录 一.SVM的概念与原理 1.SVM简介 2.SVM基本流程 3.SVM在多分类中的推广 二.经典SVM运用于图像识别分类 三.SVM运用于人脸识别 1.预处理 1.1 数据导入与处 ...

  4. 机器学习——LR(线性回归)、LRC(线性回归分类)与人脸识别

    目录 系列文章目录 一.LR的概念.原理与LR用于简单数据的预测 1.LR简介 2.LR算法模型 3.LR用于简单数据的预测 二.LRC的简介与算法流程 1.LRC(线性回归分类)简介 2.LRC算法 ...

  5. 基于人脸识别的商业大数据1

    主要内容: 人脸识别登录      根据人脸识别与浏览记录相结合的方式进行商品和广告推荐      根据表情识别来分别客户对广告推荐的喜好程度 功能性需求: 人脸检测:      通过摄像头获取人脸轮 ...

  6. 【开发教程15】AI语音人脸识别(会议记录仪/人脸打卡机)-加解密及数据协议

    CC3200AI实验教程 --疯壳·开发板系列 加解密及数据协议 在<AI人脸系统架构>一节中,我们提到AI设备与服务器之间的通信协议及TEA加密.这一节主要来讲解一下TEA加密另附上&l ...

  7. 人脸识别原理详细讲解

    人脸识别原理(以GitHub项目face_recognition为例) - 知乎 Github开源人脸识别项目face_recognition - 知乎

  8. 开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

    毕业一载有余,把毕业设计作品分享一下,希望能帮助到有需要的同学们. 资料获取: 帮助/答疑/辅导...等请联系博主,请点如下链接: linux_face.txt · zengzr/share_cont ...

  9. Python吴恩达深度学习作业16 -- 人脸识别

    人脸识别 - the Happy House 在此次作业中,你将学习构建人脸识别系统. 人脸识别问题通常分为两类: 人脸验证:比如在某些机场,系统通过扫描你的护照,然后确认你(携带护照的人)是本人,从 ...

最新文章

  1. ISME:南土所梁玉婷组-不同气候条件下微生物代谢及残体介导施肥对土壤有机碳的影响...
  2. Angular2 - Starter - Routes, Route Resolver
  3. 故障恢复 stm32_硬件编程:77条STM32知识汇总
  4. Django 模型字段 —— ImageField
  5. 大学php老师,php高校教师总结计划系统
  6. 为什么要做漏洞扫描呢?
  7. 复制中文到linux系统,怎么是的window文字复制到linux下
  8. Spring之AOP代理模式
  9. 最新抗灾诗作:生死不离
  10. 关于hibernate的缓存使用
  11. 利用Python实现Shp格式向GeoJSON的转换!
  12. 实习僧-竞品分析报告
  13. qq人脸更换_QQ安全中心现在怎么替换人脸设置或删除人脸?
  14. 傅里叶分解、叠加《matplotlib学习》
  15. [分享]下载电影文件英文标识的含义
  16. mac电脑显示器分辨率显示异常
  17. JS Worker执行多线程
  18. dva处理_dva 源码解读
  19. 普林斯顿和宾大沃顿早申录取公布,常青藤精英教育一举拿下
  20. tinymce富文本编辑器的使用

热门文章

  1. 《Web前端》学习总结
  2. 似然函数取对数的原因
  3. Js实现轮盘抽奖功能,一招帮你解决选择困难症
  4. SAP 消息号 KI261 成本中心 XXXX/XXXXX 冻结而不能直接对 XXXX.XX.XX 收入记帐 的问题处理
  5. PyCharm中import显示灰色解决方案
  6. hssfrow 单元格样式_POI实现上标下标和单元格部分样式修改
  7. 水生生物学类毕业论文文献包含哪些?
  8. 5.15-19采集麦克风的声音信号
  9. 小米 MIX 2S 解BL锁教程 申请BootLoader解锁教程
  10. fw_printenv 工具编译使用心得