视频人脸检测——OpenCV版(三)
视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版(二)》
往期目录
视频人脸检测——Dlib版(六)
OpenCV添加中文(五)
图片人脸检测——Dlib版(四)
视频人脸检测——OpenCV版(三)
图片人脸检测——OpenCV版(二)
OpenCV环境搭建(一)
更多更新,欢迎访问我的github:https://github.com/vipstone/faceai
实现思路:
调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,把处理的图片逐帧绘制给用户,用户看到的效果就是视频的人脸检测。
效果预览:
实现步骤
使用OpenCV调用摄像头并展示
获取摄像头:
cap = cv2.VideoCapture(0)
参数0表示,获取第一个摄像头。
显示摄像头 逐帧显示,代码如下:
while (1): ret, img = cap.read() cv2.imshow("Image", img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() # 释放摄像头 cv2.destroyAllWindows() # 释放窗口资源
cv2.waitKey(1) & 0xFF使用了“&”位元算法,含义是获取用户输入的最后一个字符的ASCII码,如果输入的是“q”,则跳出循环。
视频的人脸识别
这个时候,用到了上一节的《图片人脸检测——OpenCV版(二)》 把人脸识别的代码封装成方法,代码如下:
def discern(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cap = cv2.CascadeClassifier( "C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml" ) faceRects = cap.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50)) if len(faceRects): for faceRect in faceRects: x, y, w, h = faceRect cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2) # 框出人脸 cv2.imshow("Image", img)
再循环摄像头帧图片的时候,调用图片识别方法即可,代码如下:
# 获取摄像头0表示第一个摄像头 cap = cv2.VideoCapture(0) while (1): # 逐帧显示 ret, img = cap.read() # cv2.imshow("Image", img) discern(img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() # 释放摄像头 cv2.destroyAllWindows() # 释放窗口资源
完整的代码如下:
# -*- coding:utf-8 -*- # OpenCV版本的视频检测 import cv2 # 图片识别方法封装 def discern(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cap = cv2.CascadeClassifier( "C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml" ) faceRects = cap.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50)) if len(faceRects): for faceRect in faceRects: x, y, w, h = faceRect cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2) # 框出人脸 cv2.imshow("Image", img) # 获取摄像头0表示第一个摄像头 cap = cv2.VideoCapture(0) while (1): # 逐帧显示 ret, img = cap.read() # cv2.imshow("Image", img) discern(img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() # 释放摄像头 cv2.destroyAllWindows() # 释放窗口资源
联系邮箱:intdb@qq.com
我的GitHub: https://github.com/vipstone
作者: 王磊
出处: http://vipstone.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,请标明出处。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
亚马逊秘密研发家庭机器人,要革Echo的命!已有一支4.5万机器人军队
10年前,亚马逊推出Kindle,改变了人们阅读书籍的方式,也确立了在数字设备上阅读的吸引力。4年前,亚马逊推出Echo,数百万人开始与智能音箱对话。 现在,贝索斯启动了另一个大豪赌:家庭机器人。 彭博新闻今天援引知情人士消息称,这家零售和云计算巨头已经开始一项雄心勃勃的绝密计划,打算制造家庭机器人。 这个项目代号为“Vesta”(灶神星),取自罗马神话中掌管炉灶、火种和家庭的女神。Project Vesta由Lab 126硬件研发部门主管Gregg Zehr负责。 Lab126是成立于2004年的一个秘密实验室,从这里诞生了Kindle阅读器、Echo音箱、Fire TV机顶盒、Fire平板电脑,以及时运不济的Fire Phone。 Lab 126招聘页面 Vesta项目几年前就开始了,但今年亚马逊正在为这个项目大举招兵买马。Lab 12
- 下一篇
如何让机器理解汉字一笔一画的奥秘?
背景介绍 从智能客服到机器翻译,从文本摘要生成到用户评论分析,从文本安全风控到商品描述建模,无不用到自然语言技术,作为人工智能领域的一个重要分支,如何让机器更懂得人类的语言,尤其是汉字这种强表意文字,是一个具有极大挑战的事情。 词向量,是一种利用无监督学习方式(不需要人工数据标注),将词语映射到语义向量空间的技术。举个例子:在过去,计算机使用下标表示词语,比如“猫: 2123”,“狗: 142”,由于下标不一样,机器就只会认为是不同的词语,却不能像人一样感知词语间的语义关系。而词向量技术恰好弥补了这一点,使机器可以理解潜在的语义信息。实际上,现在很多自然语言处理的算法都是将其作为输入,进而建立端到端的算法模型。因此,设计出高质量的词向量生成算法是一个值得探讨的问题。 中文经过几千年的发展和演变,是一种强表意文字,对于我们而言,即使某个字
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8安装Docker,最新的服务器搭配容器使用