OpenCV:人脸检测。
时间:2022-07-26
本文章向大家介绍OpenCV:人脸检测。,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前段时间断更了好久,一部分原因就是学习OpenCV去了。
OpenCV是一个开源、跨平台的计算机视觉库,可以用于各种图像和视频处理操作。
比如最近写的一篇文章里就发现了计算机视觉的内容。
但基于什么小F就不得而知,毕竟弱鸡...
破冰行动的场景分类以及具体片段。
可以看到都是医疗场景的片段。
所以接下来会分享一些关于OpenCV有趣的小案例,毕竟要让学习变得有趣。
本次就来了解一下,如何通过OpenCV对人脸进行检测。
其中OpenCV有C++和Python两种,这里当然选用Python啦。
环境什么的,就靠大伙自己去百度了。
/ 01 / 图片检测
先来看一下图片检测,原图如下。
是谁我就不说了。律师函,不存在的。
训练数据是现成的,利用现成的数据,通过训练进而来检测人脸。
代码如下。
import cv2
# 图片名
filename = 'cxk.png'
def detect(filename):
# cv2级联分类器CascadeClassifier,xml文件为训练数据
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 读取图片
img = cv2.imread(filename)
# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行人脸检测
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 绘制人脸矩形框
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 命名显示窗口
cv2.namedWindow('people')
# 显示图片
cv2.imshow('people', img)
# 保存图片
cv2.imwrite('cxks.png', img)
# 设置显示时间,0表示一直显示
cv2.waitKey(0)
detect(filename)
最终结果如下。
图片好了,那么接下来就来看视频。
/ 02 / 视频检测
视频用的抖音的上的视频。
这里只截取检测效果比较好的视频段作为例子。
毕竟训练数据的质量摆在那里,有的时候会出现一些错误。
如想提高检测的精度,便需要一个高质量的人脸数据库。
由于资源有限,我就直接偷懒了。
import cv2
def face_rec():
# 加载视频
cameraCapture = cv2.VideoCapture('video.mp4')
# cv2级联分类器CascadeClassifier,xml文件为训练数据
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 读取数据
success, frame = cameraCapture.read()
while success and cv2.waitKey(1) == -1:
# 读取数据
ret, img = cameraCapture.read()
# 进行人脸检测
faces = face_cascade.detectMultiScale(img, 1.3, 5)
# 绘制矩形框
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 设置显示窗口
cv2.namedWindow('camera', 0)
cv2.resizeWindow('camera', 840, 480)
# 显示处理后的视频
cv2.imshow('camera', img)
# 读取数据
success, frame = cameraCapture.read()
# 释放视频
cameraCapture.release()
# 释放所有窗口
cv2.destroyAllWindows()
if __name__ == '__main__':
face_rec()
最终视频结果如下。
小姐姐的脸全被圈起来了!
- HTML5 直播协议之 WebSocket 和 MSE
- IoC在ASP.NET Web API中的应用
- 跟鹅厂老司机学技术之一:“遇见” Kotlin
- 简单的 H5 视频推流解决方案
- 来腾讯云开发者实验室学习.NET
- 跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
- 使用腾讯云 GPU 学习深度学习系列之六:物体的识别与定位
- npm5 新版功能特性解析及与 yarn 评测对比
- H5直播避坑指南
- 龙门阵之 DevOps 门外汉须知
- 全面进阶 H5 直播(上)
- 这年头,不会斗图都毕不了业?
- 龙妈也会死?《权力的游戏》 AI 算法预测丹妮女王危在旦夕
- 腾讯云 GAME-TECH 沙龙干货回顾:海外网络拓展及质量把控
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法