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编写简单的画图板程序的示例教程
Dec 08 Python
python实现批量监控网站
Sep 09 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
python selenium firefox使用详解
Feb 26 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
python自动化实现登录获取图片验证码功能
Nov 20 Python
Django操作cookie的实现
May 26 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 Python
Python中npy和mat文件的保存与读取
Apr 24 Python
python井字棋游戏实现人机对战
Apr 28 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代码把全角数字转为半角数字
2007/12/10 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
layui表格实现代码
2017/05/20 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
vue实例的选项总结
2020/06/09 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
浅析Python3 pip换源问题
2020/01/06 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
python中uuid模块实例浅析
2020/12/29 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
关于廉洁的广播稿
2014/01/30 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
大学生学年个人总结
2015/02/15 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS