python实现人脸检测的简单实例
作者:wh来啦 发布时间:2023-02-17 16:08:20
标签:python,人脸,检测
OpenCV
OpenCV 是计算机视觉领域最受欢迎的开源库,起初它由 C/C ++ 编写,现在用 Python 也能使用。
OpenCV 可以使用机器学习算法搜索图像中的人脸。由于人脸比较复杂,所以并没有一种简单的测试可以告诉我们它是否发现了人脸。但是,算法能够匹配到数千个很小的模式和特征。算法会将识别人脸的任务分解为几千个非常非常小的任务,像这种很小的任务,解决起来就比较容易了。这样的微小任务就被称为分类器。
代码结果:
方法如下:
寻找导入的xml文件
import cv2
print(cv2.__file__)
找到cv2安装的路径,在该路径下找到/data文件。
里面默认下载了一部分xml文件,不是全部的xml文件。如果需要的xml文件不在里面,需要自行在网上下载,然后放到该目录下,以备调用。比如自行安装('haarcascade_mcs_nose.xml','haarcascade_mcs_mouth.xml')
导入包:
import cv2
导入xml文件,可以根据任务需要,自行选择需要导入的xml文件
#人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
#眼睛检测器
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
#嘴巴检测器
mouth_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_mcs_mouth.xml')
#鼻子检测器
nose_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_mcs_nose.xml')
设置窗口:
cv2.namedWindow('mytest', 0);
cv2.resizeWindow('mytest', 1500, 1000)
打开摄像头,人脸识别:
#获取摄像头
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
#打开摄像头
cap.open(0)
while cap.isOpened():
#获取画面
flag, frame = cap.read()
#人脸检测
faces = face_cascade.detectMultiScale(frame, 1.3, 2)
img = frame
for (x, y, w, h) in faces:
#根据人脸坐标和长度,宽度画出矩形
img = cv2.rectangle(img, (x, y), (x+w, y+h),(255, 0 ,0), 2)
#确定人脸范围,在人脸上搜索其他特征
face_area = img[y:y+h, x:x+w]
#人眼检测
eyes = eye_cascade.detectMultiScale(face_area, 1.3, 2)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(face_area, (ex, ey), (ex + ew, ey + eh), (255, 0 ,0), 1)
#嘴巴检测
mouth = mouth_cascade.detectMultiScale(face_area, 1.5, 2)
for (mx, my, mw, mh) in mouth:
cv2.rectangle(face_area, (mx, my), (mx + mw, my + mh), (0, 0, 255), 2)
# 鼻子检测
nose = nose_cascade.detectMultiScale(face_area, 1.2, 5)
for (nx, ny, nw, nh) in nose:
cv2.rectangle(face_area, (nx, ny), (nx + nw, ny + nh), (255, 0, 255), 2)
#画面显示
cv2.imshow('mytest', img)
#设置退出按钮
key_pressed = cv2.waitKey(100)
print('单机窗口,输入按键,电脑按键为',key_pressed,'按esc键结束')
if key_pressed == 27:
break
#关闭摄像头
cap.release()
#关闭图像窗口
cv2.destroyAllWindows()
完整代码:
import cv2
#人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
#眼睛检测器
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
#嘴巴检测器
mouth_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_mcs_mouth.xml')
#鼻子检测器
nose_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_mcs_nose.xml')
#获取摄像头
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
#打开摄像头
cap.open(0)
cv2.namedWindow('mytest', 0);
cv2.resizeWindow('mytest', 1500, 1000)
while cap.isOpened():
#获取画面
flag, frame = cap.read()
#人脸检测
faces = face_cascade.detectMultiScale(frame, 1.3, 2)
img = frame
for (x, y, w, h) in faces:
#根据人脸坐标和长度,宽度画出矩形
img = cv2.rectangle(img, (x, y), (x+w, y+h),(255, 0 ,0), 2)
#确定人脸范围,在人脸上搜索其他特征
face_area = img[y:y+h, x:x+w]
#人眼检测
eyes = eye_cascade.detectMultiScale(face_area, 1.3, 2)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(face_area, (ex, ey), (ex + ew, ey + eh), (255, 0 ,0), 1)
#嘴巴检测
mouth = mouth_cascade.detectMultiScale(face_area, 1.5, 2)
for (mx, my, mw, mh) in mouth:
cv2.rectangle(face_area, (mx, my), (mx + mw, my + mh), (0, 0, 255), 2)
# 鼻子检测
nose = nose_cascade.detectMultiScale(face_area, 1.2, 5)
for (nx, ny, nw, nh) in nose:
cv2.rectangle(face_area, (nx, ny), (nx + nw, ny + nh), (255, 0, 255), 2)
#画面显示
cv2.imshow('mytest', img)
#设置退出按钮
key_pressed = cv2.waitKey(100)
print('单机窗口,输入按键,电脑按键为',key_pressed,'按esc键结束')
if key_pressed == 27:
break
#关闭摄像头
cap.release()
#关闭图像窗口
cv2.destroyAllWindows()
来源:https://blog.csdn.net/qq_52200688/article/details/122712361
0
投稿
猜你喜欢
- 任何一个交互过程的操作,对于用户来说都有学习成本,谁也不能保证所有人都可以准确无误地走完一个流程。交互设计师在设计时应该考虑适时地给用户相应
- 表单的验证是开发WEB应用程序中常遇到的一关。有时候我们必须保证表单的某些项必须填写、必须为数字、必须是指定的位数等等,这时候就要用到表单验
- 本文实例讲述了JS实现简易图片轮播效果的方法。分享给大家供大家参考。具体如下:这里使用JS制作简易图片轮播效果:制作比较粗糙,使用的图片是w
- header() 函数向客户端发送原始的 HTTP 报头。<?php//200 正常状态header('HTTP/1.1 20
- 使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows 版本上面直
- 本文实例讲述了vue+php实现的微博留言功能。分享给大家供大家参考,具体如下:html部分:<!doctype html>&l
- 有时会被问到“看看XXX网站如何?”之类的问题。谈到评估,通常都是指产品级的网站,如果模式很新,了解需要花一定时间。于是,很多人又问“那么你
- 动机: 查询功能是我们在网站上见过的最普遍也是最常用的一个功能模块了。以往的信息查询都是连接到数据库的,每一次点击都必须要后台数据库的支持。
- 今天网页调试的时候在线订单出现错误:Server 对象 错误 'ASP 0178
- 本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别。兼容 IE 和 FF 的
- 前言文接上回,我们已经使用gojs实现了一个最最最基本的树形布局。这次我们开始对图形的骨架进行一个内容展示上的丰富和显示风格上的美化。可以说
- mktime()方法是localtime()反函数。它的参数是struct_time或全9元组,它返回一个浮点数,为了兼容时ti
- 什么是pyc文件pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有
- Xajax是PHP一个不用刷新或者跳到其他页面,就能通过点击组件等与后台后台数据库交互的技术Xajax是php的一个插件,要想使用Xajax
- ASP里两种常用的生成文件的方式是:利用ADODB.Stream生成文件和利用Scripting.FileSystemObject生成文件1
- 00. 什么是 freecache?freecache 是一个用 go 语言实现的本地缓存系统(类似于 lru)。相关的 github 地址
- SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它 同时引入了更强的程序逻辑。 PL/SQL支持DML命令和
- 注:本文的所有数据请移步—— 参考数据一、水平堆叠图堆叠图其实就是柱状图的一种特殊形式fr
- 1. go的依赖管理发展GOPATH 所有的依赖都放置在同一路径下,可以复用下载的依赖,但是当不同项目需要依赖不同版本的依赖时,就很容易出现
- 学习目的: 掌握文本框的用法 初次接触try…catch…语法 今天内容很轻松,用一个例子,输入年月日,判断输入是否正确 图片如下: 用个