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实现合并字典的方法
Jul 07 Python
Python多进程同步简单实现代码
Apr 27 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
Django中create和save方法的不同
Aug 13 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Python使用type动态创建类操作示例
Feb 29 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
深入php数据采集的详解
2013/06/02 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
python中迭代器(iterator)用法实例分析
2015/04/29 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
什么是继承
2013/12/07 面试题
营业经理岗位职责
2013/11/10 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
低碳环保演讲稿
2014/08/28 职场文书
Redis基本数据类型Set常用操作命令
2022/06/01 Redis
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server