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 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
django之session与分页(实例讲解)
Nov 13 Python
python 中字典嵌套列表的方法
Jul 03 Python
django连接mysql配置方法总结(推荐)
Aug 18 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python 堆和优先队列的使用详解
Mar 05 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python做反被爬保护的方法
Jul 01 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python 爬取疫情数据的源码
Feb 09 Python
解决pytorch-yolov3 train 报错的问题
Feb 18 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 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 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python创建线程示例
2014/05/06 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python3实现磁盘空间监控
2018/06/21 Python
Python实现结构体代码实例
2020/02/10 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
如何提高JDBC的性能
2013/04/30 面试题
介绍一下write命令
2012/09/24 面试题
11月升旗仪式讲话稿
2014/02/15 职场文书
法制宣传日活动总结
2014/04/29 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电