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实现简单截取中文字符串的方法
Jun 15 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
Python切片操作深入详解
Jul 27 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
set在python里的含义和用法
Jun 24 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
python爬虫使用正则爬取网站的实现
Aug 03 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python+opencv实现视频抽帧示例代码
Jun 11 Python
Python 可迭代对象 iterable的具体使用
Aug 07 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 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
js实现扫雷源代码
2020/11/27 Javascript
Python实现图片尺寸缩放脚本
2018/03/10 Python
python实现关键词提取的示例讲解
2018/04/28 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
python 整数越界问题详解
2019/06/27 Python
python 循环数据赋值实例
2019/12/02 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
python 下划线的不同用法
2020/10/24 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
学校校庆演讲稿
2014/05/22 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
新郎新娘答谢词
2015/01/04 职场文书
2015年端午节活动总结
2015/02/11 职场文书
终止合同协议书范本
2016/03/22 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python