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跳出循环语句continue与break的区别
Aug 25 Python
Python实现的选择排序算法示例
Nov 29 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
python求质数列表的例子
Nov 24 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
如何用Python编写一个电子考勤系统
Feb 08 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
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
Vuex 入门教程
2018/01/10 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
用python实现刷点击率的示例代码
2019/02/21 Python
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
促销活动计划书
2014/05/02 职场文书
考察现实表现材料
2014/05/19 职场文书
新课培训心得体会
2014/09/03 职场文书
最美乡村教师观后感
2015/06/11 职场文书
推广普通话主题班会
2015/08/17 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
PO模式在selenium自动化测试框架的优势
2022/03/20 Python