上一篇文章介绍了facenet人脸识别的源码使用,这篇文章就来搭建自己的人脸识别库。

1. 制作自己的人脸识别库

1.1 准备数据集

通过百度图片爬取一些明星图片为例,这里准备了一个DownloadImageByBaidu.py文件用来下载图片。

# coding=utf-8
"""
爬取百度图片的高清原图
"""
import re
import sys
import urllib
import osimport requestsdef get_onepage_urls(onepageurl):if not onepageurl:print('执行结束')return [], ''try:html = requests.get(onepageurl).textexcept Exception as e:print(e)pic_urls = []fanye_url = ''return pic_urls, fanye_urlpic_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_urldef 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)continueif __name__ == '__main__':keyword = '胡歌1920*1080'  # 关键词, 改为你想输入的词即可url_init_first = r'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1551588579127_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=1920&height=1080&face=0&istype=2&ie=utf-8&word=%E8%83%A1%E6%AD%8C'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 = 0  # 图片所在页数,下载完后调整这里就行while 1:onepage_urls, fanye_url = get_onepage_urls(fanye_url)fanye_count += 1print('第%s页' % fanye_count)if fanye_url == '' and onepage_urls == []:breakall_pic_urls.extend(onepage_urls)down_pic(list(set(all_pic_urls)),'huge','/home/liguiyuan/study/deep_learning/project/facenet/data/my_data/star_images/huge')#保存位置也可以修改

新建自己的数据库文件夹,然后执行DownloadImageByBaidu.py 下载网络图片到 my_data/star_images 目录下

mkdir -p my_data/star_images
python DownloadImageByBaidu.py

再通过align_dataset_mtcnn.py进行人脸检测,并把人脸图片尺寸设定为 160*160:

python src/align_dataset_mtcnn.py data/my_data/star_images/ data/my_data/star_images_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25

此时我们在star_images_160文件夹里面看到制作好的数据集,有一点值得注意的是,里面的人脸图片数据集并不是可靠的,我们从网上下载的图片可能有些图片质量较差,或者有多张人脸的,然后导致人脸检测失败,所以我们还需要检测star_images_160里面的人脸图片,把不合格的图片给删掉。到这里图片数据集准备完毕。下面来 做一个人脸识别库。

1.2 制作人脸识别库

训练一个人脸识别库,在facenet/models/ 目录下my_classifier.pkl 文件。

python src/classifier.py TRAIN data/my_data/star_images_160/ models/20180402-114759/ models/my_classifier.pkl

我们使用 .pkl 文件来验证图片,看看效果:

python src/classifier.py CLASSIFY data/my_data/star_images_160/ models/20180402-114759/ models/my_classifier.pkl

可以看到准确率为 97.2%,有两张图片识别错了。

2. 验证图片

网上下载一张图片,然后用 predict.py 代码来测试:

cp -i contributed/predict.py src/
python src/predict.py data/my_data/unknown_name.jpeg models/20180402-114759/ models/my_classifier.pkl --gpu_memory_fraction 0.25

结果显示能够正确识别。

3. 使用摄像头实时识别

拷贝contributed目录下的 face.py和real_time_face_recognition.py文件放到src目录下

把 face.py代码里的

facenet_model_checkpoint = os.path.dirname(__file__) + "/../model_checkpoints/20170512-110547"
classifier_model = os.path.dirname(__file__) + "/../model_checkpoints/my_classifier_1.pkl"
改为:

facenet_model_checkpoint = os.path.dirname(__file__) + "/../models/20180402-114759"
classifier_model = os.path.dirname(__file__) + "/../models/my_classifier.pkl"

运行实时人脸识别代码:

python src/real_time_face_recognition.py

思考:每次加入新的人脸去识别时,是怎么把新的人脸图片加入到人脸识别数据库(.pkl)的,难道要加入新的图片重新生成一个.pkl文件吗。答案当然不是,我们在实际的产品中看到,只需要加入几张新的图片就可以了。接下来会继续探索~

上篇文章:facenet 人脸识别源码的使用方法(一)

下篇文章:facenet 人脸识别原理理解(三)

注:转载请注明原出处:https://blog.csdn.net/u012505617/article/details/88086447


参考资料:

https://www.cnblogs.com/gmhappy/p/9472387.html

facenet 人脸识别库的搭建和使用方法(二)相关推荐

  1. 人脸识别项目:dlib人脸识别库安装失败的解决方法。

    首先换源等,那些简单的教程可以搜素,都很简单. 其次在更新完软件链表等,检测自己的python版本,安装一定要与自己的版本相对应,否则会出现依赖问题. 本人在安装dlib时,因为之前用过jupyter ...

  2. facenet 人脸识别原理理解(三)

    在前两篇文章已经介绍了facenet人脸识别代码的使用和具体操作,但相关的原理还是没有说,这篇文章进行简单的讲解一下. 1. 原理 在人脸识别中,当我们需要加在图片数据库入新的一张人脸图片时,是怎么做 ...

  3. facenet 人脸识别源码的使用方法(一)

    1. 开发环境 OS:        ubuntu16.04 tensorflow版本:1.12.0 python版本:    3.6.7 2. 下载源码到本地 facenet官方github: ht ...

  4. 聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台

    聪明的人脸识别3--Pytorch 搭建自己的Facenet人脸识别平台 学习前言 什么是Facenet 源码下载 Facenet的实现思路 一.预测部分 1.主干网络介绍 2.根据初步特征获得长度为 ...

  5. 聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台

    聪明的人脸识别1--Keras 搭建自己的Facenet人脸识别平台 学习前言 什么是Facenet 源码下载 Facenet的实现思路 一.预测部分 1.主干网络介绍 2.根据初步特征获得长度为12 ...

  6. 基于facenet人脸识别设计文档

    基于facenet人脸识别设计文档 一.概述 在Ubuntu系统上,创建人脸库搭建基于facenet的人脸识别库,本文采用Python从百度下载明星照片,通过facenet的检测对齐人脸函数制作人脸库 ...

  7. Python的开源人脸识别库:离线识别率高达99.38%【源码】

    以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪.由此可以看出,人脸识别系统已 ...

  8. MTCNN人脸检测与对齐和FaceNet人脸识别

    一 MTCNN算法结构 MTCNN算法是一种基于深度学习的人脸检测和人脸对齐方法,它可以同时完成人脸检测和人脸对齐的任务,相比于传统的算法,它的性能更好,检测速度更快. MTCNN算法包含三个子网络: ...

  9. c# image转换为bitmap_C# 人脸识别库

    (给DotNet加星标,提升.Net技能) 转自:View12138cnblogs.com/view12138/p/ViewFaceCore.html .NET人脸识别库ViewFaceCore 这是 ...

最新文章

  1. 存储能否导致ESXi网络性能问题?
  2. 如何记录网内用户访问了哪些网站
  3. matlab九节点网络仿真问题,三机九节点电力系统仿真matlab.docx
  4. mysql大表myisam的导入
  5. 开源视频直播软件介绍
  6. 与aspect长得像的单词_硕士研究生英语81分总结:考研单词这么背才对,方法其实很容易...
  7. 序列化 - 实现ISerializable
  8. 隐马尔可夫模型 HMM 原理及实现
  9. javascript中基本类型和引用类型的区别分析
  10. 中移动将整合手机邮箱和飞信业务
  11. Spark源码分析之SchedulerBackend分析
  12. mysql keeplevied_mysql keepalived
  13. Python面试准备
  14. CentOS下FastDFS+Nginx(单点部署)事例
  15. python3参考手册_Python3 中文手册
  16. css摇杆,【宅家呗专题】Virtual Joystick虚拟摇杆插件教程
  17. catia锥齿轮画法_CATIA自动生成锥齿轮模型的宏程序应用方法
  18. 2口百兆光纤收发器工业导轨式发送机
  19. LeetCode 38. Cound and Say
  20. 实施定性风险分析-规划过程组

热门文章

  1. python zxing 识别条码_详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强...
  2. java中关于输出三角形图案类型题目的思路
  3. 【基于51的多功能智能小车】
  4. vue.js 密码加密_Word2007/2016/2019文档加密的方法
  5. 【CG物理模拟】风筝模拟
  6. ubuntu下重启tomcat
  7. 两个时间序列之间的DTW(Dynamic Time Warping)距离度量
  8. rstudio中logit模型代码
  9. android mvvm官方文档,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现
  10. atof函数(把字符串转换成浮点数)