Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例


Posted in Python onFebruary 21, 2019

1. 引言

在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工;这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取;

单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的人脸;

Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

图 1 动态实时检测效果图

检测到的人脸矩形图像,会依次平铺显示在摄像头的左上方;

当多个人脸时候,也能够依次铺开显示;

左上角窗口的大小会根据捕获到的人脸大小实时变化;

Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

图 2 单个/多个人脸情况下摄像头识别显示结果

2. 代码实现

主要分为三个部分:

摄像头调用,利用 OpenCv 里面的cv2.VideoCapture();

人脸检测,这里利用开源的 Dlib 框架,Dlib 中人脸检测具体可以参考Python 3 利用 Dlib 19.7 进行人脸检测;

图像填充,剪切部分可以参考Python 3 利用 Dlib 实现人脸检测和剪切;

2.1 摄像头调用

Python 中利用 OpenCv 调用摄像头的一个例子how_to_use_camera.py:

# OpenCv 调用摄像头
# 默认调用笔记本摄像头

# Author:  coneypo
# Blog:   http://www.cnblogs.com/AdaminXie
# GitHub:  https://github.com/coneypo/Dlib_face_cut
# Mail:   coneypo@foxmail.com

import cv2

cap = cv2.VideoCapture(0)

# cap.set(propId, value)
# 设置视频参数: propId - 设置的视频参数, value - 设置的参数值
cap.set(3, 480)

# cap.isOpened() 返回 true/false, 检查摄像头初始化是否成功
print(cap.isOpened())

# cap.read()
""" 
返回两个值
  先返回一个布尔值, 如果视频读取正确, 则为 True, 如果错误, 则为 False; 
  也可用来判断是否到视频末尾;
  
  再返回一个值, 为每一帧的图像, 该值是一个三维矩阵;
  
  通用接收方法为: 
    ret,frame = cap.read();
    ret: 布尔值;
    frame: 图像的三维矩阵;
    这样 ret 存储布尔值, frame 存储图像;
    
    若使用一个变量来接收两个值, 如:
      frame = cap.read()
    则 frame 为一个元组, 原来使用 frame 处需更改为 frame[1]
"""

while cap.isOpened():
  ret_flag, img_camera = cap.read()
  cv2.imshow("camera", img_camera)

  # 每帧数据延时 1ms, 延时为0, 读取的是静态帧
  k = cv2.waitKey(1)

  # 按下 's' 保存截图
  if k == ord('s'):
    cv2.imwrite("test.jpg", img_camera)

  # 按下 'q' 退出
  if k == ord('q'):
    break

# 释放所有摄像头
cap.release()

# 删除建立的所有窗口
cv2.destroyAllWindows()

2.2 人脸检测

利用 Dlib 正向人脸检测器,dlib.get_frontal_face_detector()

对于本地人脸图像文件,一个利用 Dlib 进行人脸检测的例子:

人脸检测对于机器性能占用不高,但是如果要进行实时的图像裁剪拼接,计算量可能比较大,所以可能会出现卡顿;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 字符串中的字符倒转
Sep 06 Python
让python json encode datetime类型
Dec 28 Python
布同 统计英文单词的个数的python代码
Mar 13 Python
跟老齐学Python之玩转字符串(2)
Sep 14 Python
python进程类subprocess的一些操作方法例子
Nov 22 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
python自动生成model文件过程详解
Nov 02 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 #Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 #Python
Python开发网站目录扫描器的实现
Feb 21 #Python
Python爬虫之UserAgent的使用实例
Feb 21 #Python
利用python实现在微信群刷屏的方法
Feb 21 #Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 #Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 #Python
You might like
PHP4(windows版本)中的COM函数
2006/10/09 PHP
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
javascript知识点收藏
2007/02/22 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
详解Python中类的定义与使用
2017/04/11 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
医师定期考核实施方案
2014/05/07 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
恰同学少年观后感
2015/06/08 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android