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中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
Python匿名函数及应用示例
Apr 09 Python
python可视化实现KNN算法
Oct 16 Python
python模块常用用法实例详解
Oct 17 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
Python列表推导式实现代码实例
Sep 09 Python
python自动化之如何利用allure生成测试报告
May 02 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(2)――PHP类型
2010/02/15 PHP
php之CodeIgniter学习笔记
2013/06/17 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
Python松散正则表达式用法分析
2016/04/29 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
Python 串口读写的实现方法
2019/06/12 Python
python修改字典键(key)的方法
2019/08/05 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python数据正态性检验实现过程
2020/04/18 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
css3的transition属性详解
2014/12/15 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
办公室主任先进事迹
2014/01/18 职场文书
对教师的评语
2014/04/28 职场文书
企业环保标语
2014/06/10 职场文书
单位授权委托书范文
2014/08/02 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
用Python实现Newton插值法
2021/04/17 Python
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android