python使用dlib进行人脸检测和关键点的示例


Posted in Python onDecember 05, 2020
#!/usr/bin/env python
# -*- coding:utf-8-*-
# file: {NAME}.py
# @author: jory.d
# @contact: dangxusheng163@163.com
# @time: 2020/04/10 19:42
# @desc: 使用dlib进行人脸检测和人脸关键点

import cv2
import numpy as np
import glob
import dlib

FACE_DETECT_PATH = '/home/build/dlib-v19.18/data/mmod_human_face_detector.dat'
FACE_LANDMAKR_5_PATH = '/home/build/dlib-v19.18/data/shape_predictor_5_face_landmarks.dat'
FACE_LANDMAKR_68_PATH = '/home/build/dlib-v19.18/data/shape_predictor_68_face_landmarks.dat'


def face_detect():
  root = '/media/dangxs/E/Project/DataSet/VGG Face Dataset/vgg_face_dataset/vgg_face_dataset/vgg_face_dataset'
  imgs = glob.glob(root + '/**/*.jpg', recursive=True)
  assert len(imgs) > 0

  detector = dlib.get_frontal_face_detector()
  predictor = dlib.shape_predictor(FACE_LANDMAKR_68_PATH)
  for f in imgs:
    img = cv2.imread(f)
    # The 1 in the second argument indicates that we should upsample the image
    # 1 time. This will make everything bigger and allow us to detect more
    # faces.
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))
    for i, d in enumerate(dets):
      x1, y1, x2, y2 = d.left(), d.top(), d.right(), d.bottom()
      print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
        i, x1, y1, x2, y2))

      cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 1)

      # Get the landmarks/parts for the face in box d.
      shape = predictor(img, d)
      print("Part 0: {}, Part 1: {} ...".format(shape.part(0), shape.part(1)))
      # # Draw the face landmarks on the screen.
      '''
      # landmark 顺序: 外轮廓 - 左眉毛 - 右眉毛 - 鼻子 - 左眼 - 右眼 - 嘴巴
      '''
      for i in range(shape.num_parts):
        x, y = shape.part(i).x, shape.part(i).y
        cv2.circle(img, (x, y), 2, (0, 0, 255), 1)
        cv2.putText(img, str(i), (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.3, (0, 0, 255), 1)

    cv2.resize(img, dsize=None, dst=img, fx=2, fy=2)
    cv2.imshow('w', img)
    cv2.waitKey(0)


def face_detect_mask():
  root = '/media/dangxs/E/Project/DataSet/VGG Face Dataset/vgg_face_dataset/vgg_face_dataset/vgg_face_dataset'
  imgs = glob.glob(root + '/**/*.jpg', recursive=True)
  assert len(imgs) > 0

  detector = dlib.get_frontal_face_detector()
  predictor = dlib.shape_predictor(FACE_LANDMAKR_68_PATH)
  for f in imgs:
    img = cv2.imread(f)
    # The 1 in the second argument indicates that we should upsample the image
    # 1 time. This will make everything bigger and allow us to detect more
    # faces.
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))
    for i, d in enumerate(dets):
      x1, y1, x2, y2 = d.left(), d.top(), d.right(), d.bottom()
      print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
        i, x1, y1, x2, y2))

      cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 1)

      # Get the landmarks/parts for the face in box d.
      shape = predictor(img, d)
      print("Part 0: {}, Part 1: {} ...".format(shape.part(0), shape.part(1)))
      # # Draw the face landmarks on the screen.
      '''
      # landmark 顺序: 外轮廓 - 左眉毛 - 右眉毛 - 鼻子 - 左眼 - 右眼 - 嘴巴
      '''
      points = []
      for i in range(shape.num_parts):
        x, y = shape.part(i).x, shape.part(i).y
        if i < 26:
          points.append([x, y])
        # cv2.circle(img, (x, y), 2, (0, 0, 255), 1)
        # cv2.putText(img, str(i), (x,y),cv2.FONT_HERSHEY_COMPLEX, 0.3 ,(0,0,255),1)

      # 只把脸切出来
      points[17:] = points[17:][::-1]
      points = np.asarray(points, np.int32).reshape(-1, 1, 2)
      img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      black_img = np.zeros_like(img)
      cv2.polylines(black_img, [points], 1, 255)
      cv2.fillPoly(black_img, [points], (1, 1, 1))
      mask = black_img
      masked_bgr = img * mask

      # 位运算时需要转化成灰度图像
      mask_gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
      masked_gray = cv2.bitwise_and(img_gray, img_gray, mask=mask_gray)

    cv2.resize(img, dsize=None, dst=img, fx=2, fy=2)
    cv2.imshow('w', img)
    cv2.imshow('mask', mask)
    cv2.imshow('mask2', masked_gray)
    cv2.imshow('mask3', masked_bgr)
    cv2.waitKey(0)


if __name__ == '__main__':
  face_detect()

python使用dlib进行人脸检测和关键点的示例

python使用dlib进行人脸检测和关键点的示例

python使用dlib进行人脸检测和关键点的示例

以上就是python使用dlib进行人脸检测和关键点的示例的详细内容,更多关于python 人脸检测的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python生成随机数的方法
Jan 14 Python
Python的Django框架中的Context使用
Jul 15 Python
Python通过future处理并发问题
Oct 17 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
浅析Git版本控制器使用
Dec 10 Python
Python 查找字符在字符串中的位置实例
May 02 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
python实现字符串和字典的转换
Sep 29 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
python如何利用Mitmproxy抓包
Oct 10 Python
python从ftp获取文件并下载到本地
Dec 05 #Python
python基于socket模拟实现ssh远程执行命令
Dec 05 #Python
Python实现PS滤镜中的USM锐化效果
Dec 04 #Python
python 模拟登陆github的示例
Dec 04 #Python
python中round函数保留两位小数的方法
Dec 04 #Python
python中pow函数用法及功能说明
Dec 04 #Python
python对输出的奇数偶数排序实例代码
Dec 04 #Python
You might like
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
js 替换
2008/02/19 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
angularJS开发注意事项
2018/05/26 Javascript
js实现烟花特效
2020/03/02 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python生成ppt的方法
2018/06/07 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
Python定时器线程池原理详解
2020/02/26 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
打架检讨书50字
2014/01/11 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python