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爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
机器学习实战之knn算法pandas
Jun 22 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
python文件和文件夹复制函数
Feb 07 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 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
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jquery获取radio值实例
2014/10/16 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python多线程学习资料
2012/12/19 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
应聘医药代表职位求职信
2013/10/21 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
采购意向书范本
2014/03/31 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
初中同学会活动方案
2014/08/22 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP