重点关注:强调一下,这里没有任何侮辱周董的意思,我也是一名Jay迷。只是为了学习,大家见谅。。源代码戳这里

开启dlib库的学习

第一步:首先得安装dlib库,这里建议直接下载dlib,不然用pip直接装,需要安装cmake..这里我提供的是python3.6的dlib。。下载地址:点我下载

接着安装   pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl  就装好了。。

测试一下:

接下来做第一个练习:人脸检测。。代码很简单,我就不再赘述了,里面有详细的注释

import dlib
from imageio import imread
import glob
# glob使用来读取图片列表的,效率非常高# 实例化一个人脸检测器
detector = dlib.get_frontal_face_detector()
# 获得一个窗口
win = dlib.image_window()
# 这里是批量读取图片,就是读取你在data目录下所有以jpg结尾的文件
paths = glob.glob('data/*.jpg')   # 这里的路径需要改为你自己的路径
# paths返回的是一个列表。。就是每一张图片# 接下来对每一张脸进行检测
for path in paths:img = imread(path)# 将读取的图片放进检测器中dets = detector(img)print(dets)print("检测到%d个人脸"%(len(dets)))for i, d in enumerate(dets):print("{},左{},上{},右{},下{}".format(i, d.left(), d.top(), d.right(), d.bottom()))win.clear_overlay()win.set_image(img)win.add_overlay(dets)dlib.hit_enter_to_continue()   # 设置按enter继续

运行代码:

接下来做第二个练习:除了检测人脸,还要检测出脸上的局部特征

做法:主要还是用练习一中的人脸检测,再加上一个特征检测,不用害怕,就是一个已训练好的模型,你只需要加载就行了,这个shape_predictor_68_face_landmarks.dat我放在github上。文章末尾给资源的链接

import dlib
from imageio import imread
import globdetector = dlib.get_frontal_face_detector()predictor_path = 'shape_predictor_68_face_landmarks.dat'
predictor = dlib.shape_predictor(predictor_path)
# 实例化一个窗口
win = dlib.image_window()
# 把所有图片加载上来
paths = glob.glob('data/*.jpg')for path in paths:img = imread(path)win.clear_overlay()win.set_image(img)# 1 表示将图片放大一倍,便于检测到更多的人脸dets = detector(img)print("检测到%d个人脸" % len(dets))for i, d in enumerate(dets):print("{}, 左{}, 上{}, 右{}, 下{}".format(i, d.left(), d.top(), d.right(), d.bottom()))shape = predictor(img, d)   # 这里传入的人脸检测的效果和原图print('Part 0: {}, Part 1: {}'.format(shape.part(0), shape.part(1)))win.add_overlay(shape)win.add_overlay(dets)dlib.hit_enter_to_continue()

运行结果 :

接下来做第三个练习:看看周杰伦和东尼大木到底有多像。。

我们的做法是:先通过人脸检测将人脸特征提取出来,再将人脸生成一个128维的向量,最后计算人脸之间的欧式距离

准备图片:东尼大木三张,周杰伦四张,我们还有一个test文件夹,里面放了两张测试图。等会看两张图距离这七张图的距离

   代码走起:

这个代码在windows上运行完全没问题,但是在linux或者mac上,提取name的那一行代码需要改一下,主要是windows和mac的目录表示不同,一个是‘\’,一个是'/'。。

import dlib
from imageio import imread
import glob
import numpy as npdetector = dlib.get_frontal_face_detector()predictor_path = 'shape_predictor_68_face_landmarks.dat'
predictor = dlib.shape_predictor(predictor_path)face_rec_model_path = 'dlib_face_recognition_resnet_model_v1.dat'
facerec = dlib.face_recognition_model_v1(face_rec_model_path)labeled = glob.glob('faces/*.jpg')
labeled_data = {}
unlabeled =  glob.glob('faces/test/*.jpg')# 定义一个计算距离的公式
def distance(a, b):return np.linalg.norm(np.array(a) - np.array(b), ord=2)# 读取标注图片并保存对应的128维向量
for path in labeled:img = imread(path)print(path)name = path.split("\\")[1].rstrip('.jpg')dets = detector(img, 1)# 这里假设每张图只有一张脸, 计算脸映射的多维向量shape = predictor(img, dets[0]) # 其实咱们图片中也就一张脸face_vector = facerec.compute_face_descriptor(img, shape)# 保存人的名字与其对应的向量labeled_data[name] = face_vector# 把测试的两张图片读出来,计算与训练的那些图的距离
for path in unlabeled:print(path)img = imread(path)name = path.split('/')[1].strip('\\')[1].rstrip('.jpg')dets = detector(img, 1)# 这里假设每张图只有一个人脸shape = predictor(img, dets[0])face_vector = facerec.compute_face_descriptor(img, shape)matches = []for key, value in labeled_data.items():d = distance(face_vector, value)if d < 0.6:matches.append(key + ' %.2f' % d)print('{}:{}'.format(name, ';'.join(matches)))

输出结果:

结果说明,东尼大木的测试图明显距离自己的那三张图距离小,距离周杰伦的那四张距离大。。而周杰伦距离自己的那四张图片距离明显很小,但是距离东尼大木的距离明显大。 总结:以后再别说周杰伦和东尼大木很像,作为Jay迷,我很气愤。。

源代码戳这里

python开源库dlib入门,并进行人脸检测,看看周杰伦和东尼大木到底有多相似?看完本文再不要说,周和东像。。相关推荐

  1. python摄像头跟随人脸_Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

    1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工:这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取: 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的 ...

  2. python实现面部特效_Python 3 利用 Dlib 实现摄像头实时人脸检测和平铺显示

    1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工:这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取: 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的 ...

  3. Python 开源库及示例代码

    Python 开源库及示例代码 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) ...

  4. 爱python的胖虾_爱了爱了!0.052 秒打开 100GB 数据,这个Python开源库火爆了!

    原标题:爱了爱了!0.052 秒打开 100GB 数据,这个Python开源库火爆了! 编译 | AI科技大本营(ID:rgznai100) 许多组织都在尝试收集和利用尽可能多的数据,以改善其经营方式 ...

  5. 人人都应该用的 Python 开源库

    本文讲的是人人都应该用的 Python 开源库, 你想问为什么?不用问,使用就好了. 好吧好吧,让我来回顾一下吧. 我爱 Python:它作为我的主要编程语言已经超过十年了,尽管在此期间有一些 有趣  ...

  6. 使用Python,OpenCV和Haar级联进行人脸检测——轻量级的人脸检测器

    使用Python,OpenCV和Haar级联进行人脸检测--轻量级的人脸检测器 1. 效果图 2. 原理 2.1 项目结构 2.2 [haarcascade_frontalface_default.x ...

  7. Dlib库中实现正脸人脸检测的测试代码

    Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...

  8. python开源库推荐_推荐5个值得关注的Python开源项目

    原标题:推荐5个值得关注的Python开源项目 今天小编看到了五个开源项目,觉得还错,推荐给大家. 1.Wagtail CMS Wagtail是一个基于Django的CMS系统 它拥有优质的用户体验 ...

  9. python恶搞代码打开对方摄像头_Python 3 利用 Dlib 实现摄像头实时人脸检测和平铺显示...

    1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工:这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取: 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的 ...

最新文章

  1. 博客园在微信内置浏览器打开时添加微信赞赏码功能
  2. 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面
  3. 头条一面竟然问我Maven?
  4. Flask框架(SQLAlchemy(python3版本)中修改数据的方法和删除数据 的方法)
  5. 计算机等级考试试题4,计算机等级考试二级模拟试题4
  6. 国内各大音乐平台歌曲分享
  7. 回忆Java基础中Map的遍历方法
  8. 有如下MySQL表_有一个名为app的MySQL数据库表,其建表语句如下: CR
  9. Android学习之Intent使用
  10. 【解决】小程序要求的 TLS 版本必须大于等于 1.2
  11. 利用kali下的msfvenom入侵电脑
  12. 没有寻线仪怎么找网线_不使用寻找仪怎么快速找六类网线,这个是什么原因呢?...
  13. MT【118】利用线面角最小解题
  14. ping某个域名的详细过程
  15. 所见所得的OFFICE功能区编辑器(自定义界面编辑)RibbonCreator
  16. vscode--vue注释快捷方式
  17. Pycharm导入conda虚拟环境时报错error code:1
  18. 学生公寓怎么使用预付费电能管理系统
  19. 阿里云云效:代码提交使用
  20. HP Z840 安装Ubuntu18.04,gpu版的tensorflow,keras全程纪要,硬件Qurado P4000两块

热门文章

  1. UIP源码之ARP过程分析
  2. 主板CMOS怎么放电
  3. 蓝本蓝科技:做好社群活动的8个环节,有效提升社群活跃度​
  4. 常垒资本·石矛:做VC,只要你的策略是对的,总会等到该属于你的
  5. java 界面文件操作系统_java基础图形界面和IO系统
  6. 一种可以根据相关性进行特征筛选的函数
  7. Matrix Completion
  8. mybatis Field xxxMapper in xxxx required a bean of type 'XXXMapper' that could not be found.
  9. linux帐户管理命令和文件分析
  10. Tic_Tac_Toe(三子棋)小游戏——C语言实现