Python部落(www.freelycode.com)组织翻译, 禁止转载

本文作者是Shantnu Tiwari——曾多年在C/C++的魔爪中饱受折磨,直到他发现了Python——使用起来感觉如呼吸新鲜空气般心快神怡。

他现在正在分享他的秘籍.

本篇博客是《25行Python代码完成人脸识别》的后续,阅读前请确认你已经看过了前篇。

正如前篇所提,我们可以轻松地把在图像中的人脸检测技术通过摄像头在视频中运用——这正是本文将详细介绍的。

在评论区提问前请注意:

1. 不要略过本文直接运行代码。不仅要能正确运行,你还要明白如何调试代码。

2. 确认你使用的是 OpenCV v2.

3. 为确保这个脚本能正常工作,你需要一个能正常工作的摄像头。

4. 看看其他人的评论和问题,你的问题可能已经被问过了。

谢谢。

必备工具:

1. 已安装OpenCV (详细教程参见之前的博客)

2. 工作中的摄像头一只

代码实现

我们从GitHub上的仓库中直接获得代码。

import cv2

import syscasc

Path = sys.argv[1]

faceCascade = cv2.CascadeClassifier(cascPath)

video_capture = cv2.VideoCapture(0)

while True:

# Capture frame-by-frame

ret, frame = video_capture.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(

gray,

scaleFactor=1.1,

minNeighbors=5,

minSize=(30, 30),

flags=cv2.cv.CV_HAAR_SCALE_IMAGE

)

# Draw a rectangle around the faces

for (x, y, w, h) in faces:

cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Display the resulting frame

cv2.imshow('Video', frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

# When everything is done, release the capture

video_capture.release()cv2.destroyAllWindows()

现在我们来分段讲解

import cv2

import sys

cascPath = sys.argv[1]

faceCascade = cv2.CascadeClassifier(cascPath)

这段对你来说应该很熟悉。这是为创建一个人脸级联,就像我们在图像例子中做的那样。(译注:指的是上一篇)

video_capture = cv2.VideoCapture(0)

这行代码将视频源设置成默认的摄像头。这使得OpenCV可以轻易地捕捉。

注意:你也可以在这里提供一个文件名,然后Python会读取这个视频文件。但是,因为OpenCV不能解码压缩视频,你需要安装 ffmpeg。作为OpenCV的前端,理论上讲,Ffmpeg会把编译后的视频直接导入OpenCV。这点并不容易做到,尤其是在Windows上。

这里,我们捕捉到了视频。read()函数从视频源中读取一个框架,在这个例子中是从摄像头读取。这个会返回:

1. 读取的实时视频框架(每次循环读一个框架)

2. 一个返回值

返回值告诉我们是否已经读取完所有的框架,这种情况会在我们从文件夹中读取时发生。如果是从摄像头中读取则不用在意返回值,毕竟可以一直录下去,所以我们将忽略它。

# Capture frame-by-frameret,

frame = video_capture.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(

gray,

scaleFactor=1.1,

minNeighbors=5,

minSize=(30, 30),

flags=cv2.cv.CV_HAAR_SCALE_IMAGE

)

# Draw a rectangle around the facesfor (x, y, w, h) in faces:

cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Display the resulting

framecv2.imshow('Video', frame)

这段代码应该也很眼熟。(译注:在上一篇中出现过)我们仅仅是从捕捉的框架中搜索人脸。

if cv2.waitKey(1) & 0xFF == ord('q'):

break

我们等待按下q键。如果按下,我们将退出脚本。

# When everything is done, release the capture

video_capture.release()cv2.destroyAllWindows()

这里,我们只是在释放内存。

测试!

所以,这就是拿着驾照的我。你可以看见算法同时追踪到了真正的我和照片中的我。注意,当我缓慢移动时算法能跟上,但如果我把手向脸移动得快一些,它开始困惑并且把我的手腕误认为了脸。

就像我在上一篇中说的,基于机器学习的算法不太可能100%准确。我们毕竟还没有发展到机械战警骑着摩托以100英里的时速狂飙,同时能用低像素的监视器就能追踪罪犯的时代…暂时没有。

这段代码对每个框架进行人脸检测,所以它会占用相当多的资源。举例来说,在我的5年老本子上跑这段代码,CPU占用率达到了90%。

下一步

好了,现在你知道如何检测人脸了。但是假如你要检测自定义物体——比如你的车,电视或者你心爱的玩具——又该怎么办呢?

OpenCV允许你去创建你自己的级联。但是相关的开发文档并不完善。这里有一篇 博客 向你展示如何训练你的级联去检测一只香蕉。

如果你想进一步深入识别个体的面孔——比如从众多陌生人中检测并识别出你的脸——这个任务就一下子变得惊人的难。这个主要因为会涉及到大量的图像预处理。但是如果你想接受挑战,这篇机器学习算法的文章你可能用得上。

英文原文: https://realpython.com/blog/python/face-detection-in-python-using-a-webcam/

译者: RikuH, Clover

python 人脸检测_借助摄像头在Python中实现人脸检测相关推荐

  1. 基于python的移动物体检测_树莓派+摄像头实现对移动物体的检测

    在上一篇文章中实现了树莓派下对摄像头的调用,有兴趣的可以看一下:python+opencv实现摄像头调用的方法 接下来,我们将使用python+opencv实现对移动物体的检测 一.环境变量的配置 我 ...

  2. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克

    使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...

  3. 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较

    OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...

  4. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  5. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  6. opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...

    " 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...

  7. python画人脸代码_[转]7行Python代码的人脸识别

    随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿.AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支.百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的A ...

  8. 调用远程摄像头进行人脸识别_工地安全:AI如何实现安全帽检测与人脸识别?...

    安全生产一直是施工生产中很重要的一部分,只有保障了员工的安全,才能保证企业的利益.安全帽作为保护.防护的重要防范手段,一直是各大企业要求员工佩戴的,可还是发生了各种由于未佩戴安全帽导致的安全事故. 通 ...

  9. python gis库_使用开放的python库自动化GIS和遥感工作流

    python gis库 Over my career I've worked on many geospatial related projects using the ArcGIS platform ...

最新文章

  1. 011_fastdfs-client-java模块
  2. 【转】C# 操作系统防火墙
  3. 360公布权威机构对扣扣保镖的测试报告
  4. 一部后现代文学的“奇书”:《烟草经纪人》
  5. C++编程基础一 06-布尔类型
  6. windows程序消息机制(Winform界面更新有关)
  7. Lua程序设计--全局变量
  8. JAVA websocket中 spring无法注入依赖问题解决
  9. PyQT实战小项目---筑龙网批量下载链接
  10. [递归|迭代] leetcode 21 合并两个有序链表
  11. js window.open 参数设置
  12. Spring配置属性文件
  13. angularjs+ionic+'h5+'实现二维码扫描功能
  14. 转载 LDAP Schema Design
  15. wincc控件包下载_Simatic HMI WinCC V7.4 SP1 组态软件下载
  16. leetcode6.Z 字形转换
  17. PS 2019 Mac版 自学入门系列(六)——裁剪和拉直图像
  18. Android系统增加字体库及修改系统默认字体
  19. 回溯法-符号三角形问题
  20. 天热则心躁之,或曰,心静自然凉乎

热门文章

  1. 计算机应用基础课改期望,《计算机应用基础》课改总结.doc
  2. 湖北文理学院学位计算机考试,湖北文理学院学位计算机考试试题答案.doc
  3. 离线在线计算机系统,离线计算机系统
  4. 全局声明宏定义_C++模拟面试:宏、lambda、智能指针闲谈
  5. 安装windows和android双系统,安装Windows和Android双系统.doc
  6. 禁止复制粘贴_网页禁止你复制粘贴?新同事教我这三招,全网内容随我复制
  7. WIN10常用快捷键(打开资源管理器、显示桌面、截图)
  8. (2006, ‘MySQL server has gone away‘) 原因和解决方案
  9. redhad6.4 安装zabbix2.4
  10. 汇编语言定时器转化为c语言,不用定时器和汇编语言,只用C语言实现精确无误的延时...