基于facenet人脸识别设计文档
基于facenet人脸识别设计文档
一、概述
在Ubuntu系统上,创建人脸库搭建基于facenet的人脸识别库,本文采用Python从百度下载明星照片,通过facenet的检测对齐人脸函数制作人脸库,并使用facenet做人脸识别。
二、环境搭建
1、安装Python2.7
sudo apt-get update
sudo apt-get install python2.7
sudo apt-get install python2.7 -dev
sudo update-alternatives –install /usr/bin/python python /usr/bin/python2 100
python --version
2、更新pip
根据ubuntu系统中python 2.7版本安装对应的pip
sudo apt-get install python-pip
升级pip:
sudo pip install --upgrade pip
3、安装tensorflow
安装最新版:
sudo pip install tensorflow
安装指定版本:
sudo pip install tensorflow==1.14
4、安装anaconda
1)Anaconda官网下载链接:https://www.anaconda.com/distribution/,选择linux下的Python2.7版本。
2)如果没有修改地址,默认的安装包的目录在/home/ lq/下载,进入安装包所在的目录,执行以下命令,进行安装:
bash Anaconda2-2019.10-Linux-x86_64.sh
一路回车,到下图位置,回复yes,直至安装完成。
3)安装完成后,提示是否添加环境变量,输入yes后回车,根据需要填入环境路径,再执行命令让配置的环境变量生效:
expert PYTHONPATY=$PYTHONPATY:/home/lq/anaconda2
source ~/.bashrc
4)运行python,会出现如下显示,则安装成功。
5、下载facenaet源码
git clone https://github.com/davidsandberg/facenet.git,目录名为:facenet-master
6、安装facenet依赖库
包括:numpy、scipy、scikit-learn、opencv-python、h5py、matplotlib、Pillow、requests和psutil。
命令:pip install -r requirements.txt
sudo gedit ~/.bashrc
但会报numpy、scipy、scikit-learn、opencv-python版本不匹配的错误。因此需要对以上依赖库做版本修改和单独的安装。
安装numpy:
conda install numpy=1.16.2
sudo pip install numpy==1.16.2
安装scipy:
conda install scikit-learn=0.20.3
sudo pip install -U scikit-learn==0.20.3
安装scikit-learn:
conda install scikit-learn=0.20.3
sudo pip install -U scikit-learn==0.20.3
更新scikit-learn:
conda update scikit-learn
安装opencv-python:
sudo apt-get install opencv-python
conda install opencv-python
pip install opencv-python
安装requests:
sudo apt-get install requests
查看facenet依赖库的版本:
conda list
三、创建人脸库
1、下载预先训练的模型:facenet提供两个预训练模型,分别是基于CASIA-WebFace和MS-Celeb-1M人脸库训练的,下载完成后,把预训练模型的文件夹20170512-110547放入facenet-master/src/models文件夹下。
2、下载lfw数据集:
下载地址:http://vis-www.cs.umass.edu/lfw/#resources,将解压后的文件夹放入到facenet-master/src/data/raw中。
3、预处理lfw数据集:对lfw数据集进行align_dataset_mtcnn.py处理,校准为和训练模型使用的数据集大小一致的图形后存储在lfw_160文件夹中,缩放为160*160,python命令如下:
$ python align/align_dataset_mtcnn.py data/raw/lfw data/lfw/lfw_160--image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25。
4、在LFW数据库中验证预先训练的模型,运行Python命令测试训练模型的准确率:
$ python validate_on_lfw.py data/lfw/lfw_160 models/20170512-110547
结果如下:
5、运行compare.py做人脸对比,python命令如下:
$ python compare.py models/20170512-110547 1.png 2.png
结果如下:
理论上:同一个人的图片,测试得到的距离值偏小,而不同的人测试得到的距离偏大。正常情况下同一个人测得距离应该小于1,不同人测得距离应该大于1。但限于选取图片的关系,会出现不太尽如人意的效果,因此后期需要以华人的数据集来进行模型的训练。
6、Python编程download_Image_baidu.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',/data/face_store/fbb/')#保存位置也可以修改
7、基于mtcnn对爬取到的图片做预处理,得到人脸库:
$ python align/align_dataset_mtcnn.py data/face_store_160_3 data/face_store_160_4 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25。
四、训练人脸识别库
1、训练自己的模型,使用train_triplestloss.py训练算法:
$ python src/train_tripletloss.py --data_dir ~/facenet-master/data/lfw/lfw_160/ --logs_base_dir ./logs/ --models_base_dir ./models_cslead/ --image_size 160 --model_def models.inception_resnet_v1 --optimizer RMSPROP --learning_rate 0.01 --weight_decay 1e-4 --gpu_memory_fraction 1.0 --max_nrof_epochs 500 --embedding_size 512
2、使用人脸库训练SVM分类器,用到的函数是classifier.py,这个程序的基本原理是:通过图像算出来的向量数据训练一个SVM分类器,对人的身份进行判断,同时在.pkl格式的文件中存储每一个分类。这个函数有两个模式,TRAIN模式用来训练;CLASSIFY模式用来测试。
具体功能如下:
模式= TRAIN:
使用训练好的模型计算图片的向量,用来训练SVM分类器
将训练好的分类模型保存为python pickle文件
模式= CLASSIFY:
加载SVM分类器模型
使用来自数据集测试部分的向量来测试分类器
执行本代码需要添加的参数以及各参数的含义:
mode: 设定“TRAIN”和“CLASSIFY”两种模式。
data_dir: 图片数据所在文件夹
model: 训练好的模型
classifier_filename:类似于标签,如果mode参数是TRAIN,那么需要指定一个输出的文件位置(以.pkl结尾,例如**/**.pkl),如果mode参数是CLASSIFY,那么就需要指定参数的路径(.pkl文件)。
命令如下:
$ python classifier.py TRAIN data/face_store_160_4 models/20170512-110547 models/star_store_4.pkl
3、对训练的分类器进行CLASSIFY模式测试
$ python classifier.py CLASSIFY data/face_store_160_3 models/20170512-110547 models/star_store_4.pkl
4、使用predict.py进行人脸识别:
$ python predict.py test/lyf_22.png models/20170512-110547 models/star_store_4.pkl
基于facenet人脸识别设计文档相关推荐
- 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)...
郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...
- Linux下基于GTK人脸识别界面设计
Linux下基于GTK人脸识别界面设计 1.人脸识别简介 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸, ...
- 基于JRTPLIB库的RTP数据传输设计文档(1)
关键词:JRTPLIB RTP ARM 交叉编译 BCNG 项 目 组 技 术 文 档 基于JRTPLIB库的RTP数据传输设计文档 ...
- 基于javaweb框架的springboot mybatis宠物商城源码含论文设计文档
在互联网高速发展.信息技术步入人类生活的情况下,电子贸易也得到了空前发展.网购几乎成为了人人都会进行的活动.近几年来,养宠物更是成为人们生活中重要的娱乐内容之一, 人们越来越多的讲感情也寄托给了宠物, ...
- linux小型游戏系统设计,Linux平台下基于JAVA小游戏_设计文档.doc
Linux课程设计报告 课题名称:<Linux平台下基于java小游戏设计> 专 业:2011级计算机科学与技术 组 长:043佘清泉 组 员:007陈威达 008陈学仁 026赖华标 0 ...
- 基于JRTPLIB库的RTP数据传输设计文档
http://xiyong8260.blog.163.com/blog/static/665146212008824112748499/ 版权所有,若转载,请注明出处,谢谢合作. 关键词:JRTP ...
- 基于stm32的空气质量检测净化系统,检测温湿度和pm10和 pm2.5,资料包含(设计文档,源码,pcb电路)。
基于stm32的空气质量检测净化系统,检测温湿度和pm10和 pm2.5,资料包含(设计文档,源码,pcb电路).
- 基于Delphi7openGauss2.0开发社区信息管理系统-设计文档
疫情防控信息管理系统设计文档 目录 需求分析... 3 a.引言... 3 a. 1目的... 3 a. 2文档约定... 3 a. 3预期的读者和阅读建议... 3 a. 4产品的范围... 3 b ...
- 基于 TensorFlow 在手机端实现文档检测
手机端运行卷积神经网络的一次实践 - 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上 ...
最新文章
- Happy New Year 2016
- 【建站系列教程】6、.htaccess文件的url重写规则-网页伪静态化
- Java 中如何使用 SQL 查询文本
- vim代码格式化工具autopep8
- Opportunity retrieval in SalesPipeline
- ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记
- python查看图片的源代码_python实现图片筛选程序
- 数学和古典诗词的意境
- 好爽 java_Intellij是进行scala开发的一个非常好用的工具,可以非常轻松查看scala源码,当然用它来开发Java也是很爽的,之前一直在用scala ide和ec...
- Servlet 2.4 规范之第四篇:Servlet上下文
- Android Studio 导入项目时容易出现的问题汇总
- vue封装element-ui的table组件,灵活配置表头实现表格内编辑,按钮,链接等功能。...
- STM32/STM8+DMX512协议
- Matlab:实现菲涅尔矩形孔衍射仿真
- 百度网盘不能下载文件,如何用迅雷下载(链接为网盘链接)
- 使用Whisper框架快速为项目添加国际化支持
- 高效建站(华为云服务器速成篇)
- 深度卷积神经网络架构:从基本组件到结构创新
- Android 如何让你的App分享给别人
- mfc加载ocx失败
热门文章
- 如何让多个word文档合并成一个
- nova8se鸿蒙,挖东西:华为nova8SE标准版和高配版哪个好?解析有区别没有?主要的优势在哪里?...
- 大白话5分钟带你走进人工智能-第33节神经网络和神经元概念(1)
- RealView 应用
- linux下查看系统配置参数
- 2019-11-12
- 计算机网络实验之验证性实验
- k8s中使用基于nfs的storageclass
- linux卸载teamviewer,ubuntu 16.04 desktop + server LTS - TeamViewer 软件彻底卸载
- ASP.NET页面在IE缓存的清除办法 (转)