机器学习:opencv--人脸检测以及微笑检测
目录
前言
一、人脸检测的原理
1.特征提取
2.分类器
二、代码实现
1.图片预处理
2.加载分类器
3.进行人脸识别
4.标注人脸及显示
三、微笑检测
前言
人脸检测是计算机视觉中的一个重要任务,旨在自动识别图像或视频中的人脸。它可以用于多种应用,如安全监控、身份验证、人机交互等。
一、人脸检测的原理
1.特征提取
-
Haar特征:
- 基于Haar小波变换,通过简单的矩形特征(如眼睛、鼻子、嘴巴的对比)来识别图像中的人脸。
- Haar特征计算速度快,适合实时应用。
2.分类器
这里使用的是python自带的库的分类器模型,是一种级联分类器
- 分类器需要对图像的多个特征进行识别。
- 例如,在识别一个动物是狗(正类)还是其他动物(负类)时,直接根据多个条件进行判断,流程是非常烦琐的。
- 如果先判断该动物有几条腿。有四条腿的动物被判断为可能为狗,并对此范围内的对象继续进行分析和判断。
- 没有四条腿的动物直接被否决,即不可能是狗。
- 只通过比较腿的数目就能排除样本集中大量的负类(如鸡、鸭、鹅等不是狗的动物的实例)。
- 级联分类器就是基于这种思路将多个简单的分类器按照一定的顺序级联而成的。
二、代码实现
1.图片预处理
import cv2image = cv2.imread('quanjiafu2.jpg')
image = cv2.resize(image, None, fx=0.4, fy=0.4)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
2.加载分类器
"""-----------------加载分类器----------------"""
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
3.进行人脸识别
"""------------------- 分类器检测实现人脸识别--------------"""
# objects = cv2.CascadeClassifier,detectMultiscale( imagel, scaleFactor[,minNeighbors[,flags[,minsize[, maxsize]]]]])
# 其中,各个参数及返回值的含义如下:
# image:待检测图像,通常为灰度图像。
# scaleFactor:表示在前后两次相继扫描中搜索窗口的缩放比例。识别,扫描,按照不同比例来进行扫描
# minNeighbors:表示构成检测目标的相邻矩形的最小个数。在默认情况下,该参数的值为 3,
# 表示有 3 个以上的检测标记存在时才认为存在人脸。如果希望提高检测的准确率可以将该参数的值设置得更大。
# 但这样做可能会让一些人脸无法被检测到。
# flags: 该参数通常被省略。在使用低版本 OpencV(opencV 1.X 版本)时,该参数可能会被设置为
# CV_HAAR_DO_CANNY_PRUNING,表示使用 Canny 边缘检测器拒绝一些区域。
# minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略。
# maxSize: 目标的最大尺寸,大于这个尺寸的目标将被忽略。通常情况下,将该可选参数省略即可
# 若 maxsize 和 minsize 大小一致,则表示仅在一个尺度上食找目标。
# objects: 返回值. 目标对象的矩形框向量组。该值是一组矩形信息.
# 包含每个检测到的人脸对应的矩形框的信息(x轴方向位置、y轴方向位置、宽度、高度)faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=5, minSize=(8, 8))
print("发现{0}张人脸!".format(len(faces)))
print("其位置分别是:", faces)
4.标注人脸及显示
"""---------------标注人脸及显示------------------"""
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:

三、微笑检测
- 微笑检测是在人脸检测的基础上进行的
- 加载微笑检测分类器
- 打开摄像头
- 检测一帧图片
- 进行人脸检测
- 提取出每张人脸所在的矩形区域
- 对该矩形区域进行微笑检测
- 微笑时,在矩形框的左上角表上smile
- 按下esc结束
import cv2faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
smile = cv2.CascadeClassifier('haarcascade_smile.xml')cap = cv2.VideoCapture(0)
while True:ret, frame = cap.read()frame = cv2.flip(frame, 1) # 图片翻转 水平翻转if not ret:breakgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=10, minSize=(5, 5))"""--------处理每张人脸-------"""for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)# 提取人脸所在区域 多通道形式# roiColorFace = frame[y:y+h,x:x+w]# 单通道形式roi_gray_face = gray[y:y + h, x:x + w]# 微笑检测smiles = smile.detectMultiScale(roi_gray_face, scaleFactor=1.5, minNeighbors=10, minSize=(50, 50))for (sx, sy, sw, sh) in smiles:cv2.putText(frame, "smile", (x, y), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255, 255), 2)cv2.imshow('result', frame)a = cv2.waitKey(100)if a == 27:breakprint(frame.shape)
# 释放摄像头赟源
cap.release()
# 关闭所有openCV创建的窗口
cv2.destroyAllWindows()
相关文章:
机器学习:opencv--人脸检测以及微笑检测
目录 前言 一、人脸检测的原理 1.特征提取 2.分类器 二、代码实现 1.图片预处理 2.加载分类器 3.进行人脸识别 4.标注人脸及显示 三、微笑检测 前言 人脸检测是计算机视觉中的一个重要任务,旨在自动识别图像或视频中的人脸。它可以用于多种应用࿰…...
linux系统挂载硬盘
参考链接:https://www.cnblogs.com/wenhainan/p/12292823.html (1)lsblk命令查看磁盘挂载情况 (2)使用fdisk分区新磁盘 如果要分多个分区需指定每个分区的大小 (3)格式化新分区 mkfs命令格…...
MySQL实现主从同步
一、首先我们准备3台mysql 分别为: 主服务器:test-mysql-master,端口3306 从服务器:test-mysql-slave1,端口3307 从服务器:test-mysql-slave2,端口3308 注意:如果防火墙是开着的记得把关掉,并且重启docker…...
人工智能--数学基础
目录 编辑2.1 线性代数基础 2.2 微积分及优化理论 2.3 概率论与统计学 2.4 信息论简介 2.1 线性代数基础 线性代数是处理向量空间(包括有限维或无限维)以及这些空间上的线性映射的一门数学分支。在线性代数中,最核心的概念包括向量、矩…...
2024人工智能技术的普及 如何看待AI技术的应用前景
AI 技术的应用前景十分广阔,但也面临着一些挑战,以下是对其应用前景的一些看法: 积极方面: 多行业深度融合与效率提升5: 医疗领域:AI 在医疗影像分析、辅助诊断、疾病预测等方面具有巨大潜力。例如…...
日常记录:springboot 2.2.5 + es 6.8.12
前言 最近有用到搜索引擎的功能,这不得把之前的es过程实践一遍,但发现过程坎坷,因为版本太低了。 一、安装es 6.8.12 安装过程跟之前写那章日常记录:elasticsearch 在linux安装_elasticsearch linux安装-CSDN博客一样࿰…...
MySQL数据库备份与恢复详解
文章目录 一、为什么需要备份数据库?二、MySQL数据库的备份方式1. 逻辑备份2. 物理备份3. 二进制日志备份 三、恢复数据库1. 使用mysqldump备份文件恢复2. 使用物理备份恢复3. 使用二进制日志恢复 四、备份与恢复的最佳实践五、结语 在日常的数据库运维中࿰…...
10.22 MySQL
存储过程 存储函数 存储函数是有返回值的存储过程,存储函数的参数只能是in类型的。具体语法如下: characteristic 特性 练习: 从1到n的累加 create function fun1(n int) returns int deterministic begindeclare total i…...
「AIGC」n8n AI Agent开源的工作流自动化工具
n8n AI Agent 是一个利用大型语言模型(LLMs)来设计和构建智能体(agents)的工具,这些智能体能够执行一系列复杂的任务,如理解指令、模仿类人推理,以及从用户命令中理解隐含意图。n8n AI Agent 的核心在于构建一系列提示(prompts),使 LLM 能够模拟自主行为。 传送门→ …...
Android 中获取和读取短信验证码
方法一:通过 SMS Retriever API SMS Retriever API 是 Google 提供的一种安全的方式,可以从系统中获取不需要权限的短信验证码。这种方式不需要请求 READ_SMS 权限,非常适合处理短信验证码的情况。 1. 在 build.gradle 中添加依赖 dependen…...
SQL语句高级查询(适用于新手)
SQL查询语句的下载脚本链接!!! 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 本文旨在为那些编程基础相对薄弱的朋友们提供一份详尽的指南,特别聚…...
main.ts中引入App.vue报错,提示“Cannot find module ‘./App.vue’ or its corresponding type
原因 代码编辑器:vscode ,使用vue3,所以安装了 Volar 插件,可以使 vue 代码高亮显示,不同颜色区分代码块,以及语法错误提示等 提示:如果使用的是vue2,则使用 Vetur 插件࿱…...
Android15音频进阶之组音量调试(九十)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…...
【Java】常用方法合集
以 DemoVo 为实体 import lombok.Data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;Data ExcelIgnoreUnannotated public class ExportPromoteUnitResult {private String id;ExcelProperty(value &qu…...
深入了解Vue Router:基本用法、重定向、动态路由与路由守卫的性能优化
文章目录 1. 引言2. Vue Router的基本用法2.1 基本配置 3. 重定向和命名路由的使用3.1 重定向3.2 命名路由 4. 在Vue Router中如何处理动态路由4.1 动态路由的概念4.2 如何处理动态路由4.3 动态路由的懒加载 5. 路由守卫的实现与性能影响5.1 什么是路由守卫?5.2 路由…...
深入理解InnoDB底层原理:从数据结构到逻辑架构
💡 无论你是刚刚踏入编程世界的新人,还是希望进一步提升自己的资深开发者,在这里都能找到适合你的内容。我们共同探讨技术难题,一起进步,携手度过互联网行业的每一个挑战。 📣 如果你觉得我的文章对你有帮助,请不要吝啬你的点赞👍分享💕和评论哦! 让我们一起打造…...
Linux介绍及操作命令
Linux 是一种开源的操作系统,具有以下特点和优势: 一、稳定性和可靠性 内核稳定 Linux 内核经过多年的发展和优化,具有高度的稳定性。它能够长时间运行而不出现崩溃或故障,适用于服务器和关键任务应用。内核的稳定性得益于其严格的开发流程和质量控制,以及全球开发者社区…...
JS | 详解图片懒加载的6种实现方案
一、什么是懒加载? 懒加载是一种对网页性能优化的方式,比如,当访问一个网页的时候,优先显示可视区域的图片而不是一次加载全部的图片,当需要显示时,再发送请求加载图片。 懒加载 :延迟加载&…...
Java | Leetcode Java题解之第502题IPO
题目: 题解: class Solution {public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {int n profits.length;int curr 0;int[][] arr new int[n][2];for (int i 0; i < n; i) {arr[i][0] capital[i];arr[i][1] profi…...
JavaWeb学习(3)
目录 一、9大内置对象 二、JavaBean 三、MVC三层架构 Model View Controller(Servlet) 四、Filter(过滤器) 应用一:处理中文乱码 应用二:登录验证 五、监听器 六、JDBC 一、9大内置对象 PageCont…...
Awesome-AITools:AI开发者必备的开源工具聚合地图
1. 项目概述:一份AI工具的“藏宝图”如果你是一名AI开发者、研究者,或者只是一个对AI工具充满好奇的探索者,那么你肯定经历过这样的时刻:面对网络上浩如烟海的AI工具,从聊天机器人、代码助手到图像生成、模型训练平台&…...
机器学习知识产权保护:从数据到模型的立体防御策略
1. 机器学习投资保护的核心挑战与思路 在上一篇文章中,我们探讨了机器学习(ML)项目从构思到部署过程中,知识产权(IP)保护的基本框架和初步策略。今天,我们深入到更具体、也更棘手的层面…...
告别报错!保姆级教程:在PyCharm 2023.3上完美安装ManimCE(附国内镜像加速)
在PyCharm 2023.3中零失败安装ManimCE的终极指南 当数学可视化遇上Python,ManimCE无疑是当前最强大的工具之一。但对于许多开发者来说,从环境配置到成功运行第一个动画,这段旅程往往充满坎坷。本文将彻底解决安装过程中的所有痛点,…...
WeChatFerry:基于RPC与DLL注入的微信PC端自动化框架深度解析
1. 项目概述与核心价值 最近在折腾微信自动化相关的东西,发现了一个挺有意思的项目——WeChatFerry。这名字起得挺形象,“Ferry”是渡轮的意思,感觉就像是在你的程序和微信客户端之间搭了一座桥,让数据可以安全、稳定地“摆渡”过…...
CMU开源localPlanner避坑指南:从仿真到实车,ROS小车部署的5个关键步骤
CMU开源localPlanner避坑指南:从仿真到实车,ROS小车部署的5个关键步骤 当学术论文中的算法终于有了开源实现,那种跃跃欲试的心情每个机器人开发者都懂。但真正把代码下载到本地,准备部署到自己的ROS小车上时,才发现从理…...
面试题:文本表示方法详解——One-hot、Word2Vec、上下文表示、BERT词向量全解析(NLP基础高频考点)
1. 为什么面试官总爱问“文本表示方法”?1.1 这个问题的本质是什么任何 NLP 系统,不管是情感分析、文本分类、搜索推荐、智能客服,还是今天的大模型应用,本质上都绕不开一个前提:机器并不真正认识“文字”,…...
Windows上的APK安装革命:如何用开源工具无缝运行安卓应用
Windows上的APK安装革命:如何用开源工具无缝运行安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows和安卓生态之间的鸿沟而烦恼吗&…...
基于Tauri与Rust构建跨平台Claude桌面客户端:架构设计与工程实践
1. 项目概述:一个为Claude设计的“圣杯”级桌面应用 如果你和我一样,在日常开发、写作或信息处理中重度依赖Anthropic的Claude模型,那么你肯定也经历过在浏览器标签页间反复横跳、复制粘贴、以及管理冗长对话历史的烦恼。 CoderLuii/HolyCla…...
HDLbits实战解析:从异步复位到同步复位,掌握三段式FSM的核心差异与设计要点
1. 异步复位与同步复位的本质区别 在数字电路设计中,复位信号就像电脑的重启按钮,它能将电路恢复到初始状态。但很多初学者第一次在HDLbits上做FSM练习题时,会被"asynchronous reset"和"synchronous reset"这两个概念搞…...
收藏!普通人零基础转行AI,3-5个月实现高薪就业的进阶指南
本文指出AI行业对非计算机专业人才的需求激增,半路转行者因具备行业经验而更具竞争力。文章澄清了转行AI的常见误区,强调“技术懂业务”是关键,并提供了普通人转行AI的3步走策略:选择AI算法、自然语言或应用工程师等低门槛岗位&am…...
