facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
搭建人脸库
选择的方式是从百度下载明星照片
照片下载,downloadImageByBaidu.py
# coding=utf-8
"""
爬取百度图片的高清原图
"""
import re
import sys
import urllib
import os
import requests
def get_onepage_urls(onepageurl):
if not onepageurl:
print('执行结束')
return [], ''
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
fanye_url = ''
return pic_urls, fanye_url
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
fanye_url = 'http://image.baidu.com' + fanye_urls[0] if fanye_urls else ''
return pic_urls, fanye_url
def down_pic(pic_urls,pic_name,localPath):
if not os.path.exists(localPath): # 新建文件夹
os.mkdir(localPath)
"""给出图片链接列表, 下载图片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = pic_name + "_" + str(i + 1) + '.jpg'
with open(localPath + '%s' % string, 'wb')as f:
f.write(pic.content)
print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
if __name__ == '__main__':
keyword = '范冰冰1920*1080' # 关键词, 改为你想输入的词即可
url_init_first = r'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
url_init = url_init_first + urllib.parse.quote(keyword, safe='/')
all_pic_urls = []
onepage_urls, fanye_url = get_onepage_urls(url_init)
all_pic_urls.extend(onepage_urls)
fanye_count = 1 # 图片所在页数,下载完后调整这里就行
while 1:
onepage_urls, fanye_url = get_onepage_urls(fanye_url)
fanye_count += 1
print('第%s页' % fanye_count)
if fanye_url == '' and onepage_urls == []:
break
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)),'fbb','D:/eclipse-workspace/facenet-master/data/face_store/fbb/')#保存位置也可以修改
因为是从网上下载的照片有些是不符的,需要手动删除部分
检测对齐人脸
python src\align\align_dataset_mtcnn.py data/face_store/old data/face_store/new --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25
用自己的人脸库结合SVM训练一个人脸识别系统
用到的代码:calssifier.py,这个程序的基本原理是:通过用图像算出来的向量数据来训练一个SVM分类器,从而对人的身份进行一个判断,同时在.pkl格式的文件中存储每一个分类。这也是作者对于FaceNet程序应用的一个探索。
这个函数有两个模式,一个模式用来训练,另一个模式用来测试。具体功能如下:
模式= TRAIN:
使用来自数据集的计算出来的向量来训练分类器
将训练好的分类模型保存为python pickle文件
模式= CLASSIFY:
加载分类模型
使用来自数据集测试部分的嵌入来测试分类器
执行本代码需要添加的参数以及各参数的含义:
mode: 设定“TRAIN”和“CLASSIFY”两种模式。
data_dir: 图片数据所在文件夹
model: 训练好的模型
classifier_filename:类似于标签,如果mode参数是TRAIN,那么需要指定一个输出的文件位置(以.pkl结尾,例如/.pkl),如果mode参数是CLASSIFY,那么就需要指定参数的路径(.pkl文件)。
python src\classifier.py TRAIN D:\eclipse-workspace\facenet-master\data\face_store\new D:\eclipse-workspace\facenet-master\models\20180408-102900 D:\eclipse-workspace\facenet-master\models\classifier.pkl
python src\classifier.py CLASSIFY D:\eclipse-workspace\facenet-master\data\face_store\new D:\eclipse-workspace\facenet-master\models\20180408-102900 D:\eclipse-workspace\facenet-master\models\classifier.pkl
验证
调用facenet-master\contributed\predict.py
网上找张女神的图片
python contributed\predict.py D:\eclipse-workspace\facenet-master\data\test\test1.jpg D:\eclipse-workspace\facenet-master\models\20180408-102900 D:\eclipse-workspace\facenet-master\models\classifier.pkl
再找一张不在人脸库的照片
python contributed\predict.py D:\eclipse-workspace\facenet-master\data\test\test2.png D:\eclipse-workspace\facenet-master\models\20180408-102900 D:\eclipse-workspace\facenet-master\models\classifier.pkl
后续打算基于摄像头进行人脸检测识别
摄像头识别人脸效果
修改contributed目录下的face.py
执行
python contributed\real_time_face_recognition.py
最后,附上原来的文件中各py文件的作用(持续更新):
一、主要函数
facenet/src/align/ :用于人脸检测与人脸对齐的神经网络
facenet/src/facenet.py :用于人脸映射的神经网络
facenet/util/plot_learning_curves.m :这是用来在训练softmax模型的时候用matlab显示训练过程的程序
二、facenet/contributed/相关函数:
1、基于mtcnn与facenet的人脸聚类
代码:facenet/contributed/cluster.py(facenet/contributed/clustering.py实现了相似的功能,只是没有mtcnn进行检测这一步)
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 对embedding的特征向量使用欧式距离进行聚类
2、基于mtcnn与facenet的人脸识别(输入单张图片判断这人是谁)
代码:facenet/contributed/predict.py
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 执行predict.py进行人脸识别(需要训练好的svm模型)
3、以numpy数组的形式输出人脸聚类和图像标签
代码:facenet/contributed/export_embeddings.py
主要功能:
① 需要对数据进行对齐与裁剪做为输入数据
② 输出embeddings.npy;labels.npy;label_strings.npy
facenet 人脸识别(二)——创建人脸库搭建人脸识别系统的更多相关文章
- git使用(二)----创建版本库
创建版本库(操作都是在linux环境下) 什么是版本库呢?版本库又名仓库,英文名repository,其实就是一个目录,可以进行增删查改 创建一个目录,这里在根目录下创建一个git_home目录mkd ...
- 人脸识别之Python DLib库进行人脸关键点识别
一.首先安装DLib模块 这里只介绍linux安装的过程,windows安装过程请自行百度 1.首先,安装dlib.skimage前:先安装libboost sudo apt-get install ...
- C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
在之前的博客中我们已经将项目中用到的算法表述完成,包含人脸检測算法以及四种性别识别算法,在这篇博客中我们将着手搭建主要的MFC框架. 一.框架概况 在这篇博文中我们将搭建最主要的MFC框架.绘制MFC ...
- Python的开源人脸识别库:离线识别率高达99.38%
Python的开源人脸识别库:离线识别率高达99.38% github源码:https://github.com/ageitgey/face_recognition#face-recognitio ...
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073 11.11 智慧上云 ...
- face_recognition开源人脸识别库:离线识别率高达99.38%
基于Python的开源人脸识别库:离线识别率高达99.38%——新开源的用了一下感受一下 原创 2017年07月28日 21:25:28 标签: 人脸识别 / 人脸自动定位 / 人脸识别开源库 / f ...
- 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型
人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...
- 基于Python的face_recognition库实现人脸识别
一.face_recognition库简介 face_recognition是Python的一个开源人脸识别库,支持Python 3.3+和Python 2.7.引用官网介绍: Recognize a ...
- PyQt5+Caffe+Opencv搭建人脸识别登录界面
PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...
随机推荐
- debian系列systemd 配置nodejs服务
1 新建service配置文件 vi /etc/systemd/system/node.service [Unit] Description=My super nodejs app [Service ...
- 记人生中第一场认真打的CF——CF1000(虽然是Virtual participation)
老师说下午要让我们(来自开明的新高一同学)感受一下CF,于是下午2:20我们就集中到了机房.老师教我们用Educational Codeforces Round 46 (Rated for Div. ...
- 在子组件中触发事件,传值给父组件-vue
1.通过$emit触发事件 在子组件<x-test>中触发事件: <button @click="toSearchProduct()">搜索</but ...
- ArrayList,Vector, LinkedList的存储性能和特性?
ArrayList,Vector, LinkedList的存储性能和特性? ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入或删除时非常麻烦. ...
- python 日期生成和时间格式化
记录下日期时间的转换和生成:1.这个是使用datetime 函数生成往后几天的时间,比如当前日期是2019-07-01 那么控制days=1然后再和当前的时间相加,就能得到明天的日期def time_ ...
- web前后端分离漏洞分析防御
web前后端分离漏洞分析防御 漏洞分析,主要漏洞有 一.跨站脚本攻击XSS 程序 + 数据 = 结果:攻击后,数据夹杂一部分程序(执行代码),导致结果改变: 1.XSS攻击注入点 (a):HTML节点 ...
- 使用getchar和putchar输入输出单个字符
getchar()和putchar()只能用于输入输出单个字符,而不能字符串. #include<iostream> using namespace std; int main(){ ch ...
- php substr_count()函数 语法
php substr_count()函数 语法 作用:统计一个字符串,在另一个字符串中出现次数大理石量具 语法:substr_count(string,substring,start,length) ...
- GEI步态能量图生成
步态能量图生成主要有两步,主要为: 在原始轮廓图上对人的轮廓进行裁剪,在下面制作步态能量图图片叠加以什么为中心位置也是一个问题.一般有两种方式,一种是中心位置为人体宽的一半.另一种是以头顶为中心位置. ...
- PB TB级数据
Byte.KB.MB.GB.TB.PB.EB.ZB.YB. 1KB=1000B1MB=1000KB1GB=1000MB1TB=1000GB 1TB=240B=1024MB 1PB=250B k M G ...