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操作MySQL简单实现方法
Jan 26 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
发布你的Python模块详解
Sep 15 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
python绘制立方体的方法
Jul 02 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
django云端留言板实例详解
Jul 22 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
Python爬取网站图片并保存的实现示例
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
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
javascript 闭包疑问
2010/12/30 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
精神文明单位申报材料
2014/05/02 职场文书
团日活动总结书
2014/05/08 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电