【OpenCV DNN】Flask 视频监控目标检测教程 03

news/2024/11/17 18:50:48/

欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中

【OpenCV DNN】Flask 视频监控目标检测教程 03

    • 3.3 上传本地图片进行人脸检测
      • 3.3.1 OpenCV 级联分类器类 cv::CascadeClassifier
      • 3.3.2 cvFlask03 项目的构建步骤


本系列从零开始,详细讲解使用 Flask 框架构建 OpenCV DNN 模型的 Web 应用程序。

上节介绍了 从URL地址读取图片进行处理 和 上传本地图片进行卡通处理,本节介绍上传本地图片进行人脸检测。


3.3 上传本地图片进行人脸检测

我们的第三个例程,在cvFlask02的基础上,使用OpenCV级联检测器检测上传图像中的人脸和人眼。

我们可以完全套用cvFlask02的项目结构和程序框架,只需要修改Python程序cvFlask02.py中的调用图像处理子程序,使用OpenCV级联检测器检测上传图像中的人脸和人眼。


3.3.1 OpenCV 级联分类器类 cv::CascadeClassifier

OpenCV 中定义了级联分类器类 cv::CascadeClassifier。在 Python 语言中,使用接口函数 cv.CascadeClassifier() 从文件加载级联分类器模型,成员函数 cv.CascadeClassifier.detectMultiScale() 对图像进行目标检测。

cv.CascadeClassifier(filename)
cv.CascadeClassifier.detectMultiScale(image[, scaleFactor=1.1, 
minNeighbors=3, flags=0, minSize=Size(), maxSize=Size()]) → objects

OpenCV 提供了 Haar 级联检测器的预训练模型如下,可以从 OpenCV 安装包 \data\haarcascades中提取,或者从【GitHub】opencv/data下载。

haarcascade_eye.xml, 眼睛
haarcascade_eye_tree_eyeglasses.xml, 戴眼镜的眼睛
haarcascade_frontalface_alt.xml, 正面人脸
haarcascade_frontalface_alt2.xml, 正面人脸
haarcascade_frontalface_alt_tree.xml, 正面人脸
haarcascade_frontalface_default.xml, 正面人脸
haarcascade_fullbody.xml, 人体
haarcascade_lefteye_2splits.xml, 左眼 
haarcascade_righteye_2splits.xml, 右眼
haarcascade_smile.xml, 笑脸

使用 Haar 级联检测器检测图片中的人脸的步骤如下:
(1)创建一个 CascadeClassifier 级联分类器对象,使用 load() 方法从 .xml 文件加载级联分类器模型。
(2)读取待检测的图片。
(3)使用detectMultiScale()函数检测图片,返回检测到的边界矩形。
(4)将检测到的边界矩形绘制到检测图片上。


3.3.2 cvFlask03 项目的构建步骤

项目cvFlask03的文件树如下。

---项目文件名\|---static\
|---templates\|    |---processed.html|    |---upload.html
|--- cvFlask03.py

cvFlask03.py中图像处理子程序的代码如下,其它部分的代码与cvFlask02.py相同。

# cvFlask03.py
def imageProcessing(filepath):  # 图片处理子程序:人脸检测+人眼检测imgCV = cv2.imread(filepath)  # 从 filepath 路径读取图片gray = cv2.cvtColor(imgCV, cv2.COLOR_BGR2GRAY)# 加载 Haar 级联分类器 预训练模型model_path = "../data/haarcascade_frontalface_alt2.xml"face_detector = cv2.CascadeClassifier(model_path)  # <class 'cv2.CascadeClassifier'>eye_path = "../data/haarcascade_eye.xml"  # 人眼检测器eye_detector = cv2.CascadeClassifier(eye_path)  # <class 'cv2.CascadeClassifier'># 使用级联分类器检测人脸faces = face_detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1,minSize=(40, 40), maxSize=(300, 300))# 绘制人脸检测框for x, y, w, h in faces:cv2.rectangle(imgCV, (x,y), (x+w,y+h), (0, 0, 255), 3)# 在人脸区域内检测人眼roi = gray[y:y+h, x:x+w]  # 提取人脸# 检测人眼eyes = eye_detector.detectMultiScale(roi, scaleFactor=1.1, minNeighbors=1,minSize=(15, 15), maxSize=(80, 80))# 绘制人眼for ex, ey, ew, eh in eyes:cv2.rectangle(imgCV, (x+ex,y+ey), (x+ex+ew,y+ey+eh), (255,0,0),2)return imgCV

cvFlask03的脚本运行过程也与cvFlask02完全相同,具体步骤如下。

(1)进入cvFlask03项目的根目录,运行程序cvFlask03.py,启动流媒体服务器。
(2)在浏览器输入URL(http://192.168.3.249:5000/upload),打开upload.html网页。在浏览器点击页面上的选择按钮,选择本地的图片上传,上传的图片保存到static\images目录。
(3)程序cvFlask03.py对上传的图片进行人脸检测和人眼检测,在图片上以红色和蓝色方框标记检测到的人脸和人眼。然后激活processed.html网页,显示原始图像和处理后的图像。

在这里插入图片描述

(4)手机连接到局域网,按照控制台显示的内容在浏览器输入IP地址(http://192.168.3.249:5000/upload),也可以上传手机中的图片进行处理,结果如图所示。

在这里插入图片描述


【本节完】

下节我们将讨论:使用Flask框架构建一个视频流服务器。


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:
【OpenCV DNN】Flask 视频监控目标检测教程 03(https://blog.csdn.net/youcans/article/details/130864216)
Copyright 2023 youcans, XUPT
Crated:2023-05-25

欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中
【OpenCV DNN】Flask 视频监控目标检测教程 01
【OpenCV DNN】Flask 视频监控目标检测教程 02


http://www.ppmy.cn/news/83971.html

相关文章

全网最详细,Selenium自动化测试问题总结+解决,跟着大佬上高速...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Selenium4自动化测…

写写shell中字符串的处理方法

在Shell中&#xff0c;字符串是最常见的数据类型之一。为了方便处理字符串&#xff0c;Shell提供了许多内置命令和语法。下面是一些常见的字符串处理方法&#xff1a; 字符串截取&#xff1a;可以使用${var:offset:length}语法来截取字符串。其中&#xff0c;var表示要截取的字…

Python操作XML教程:读取、写入、修改和保存XML文档

目录 导入所需模块解析XML文档获取元素遍历XML文档写入新的元素修改元素的内容和属性删除元素保存修改后的XML文档示例演示python操作xml的常用方法 XML是一种常见的数据交换格式&#xff0c;在许多应用中都被广泛使用。通过掌握Python操作XML的基础知识&#xff0c;您将能够轻…

mongodb-分片集群-搭建

分片集群 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。 为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。 垂直扩展&#xff1a;增加更多的…

Flink+hadoop部署及Demo

Hadoop集群高可用部署 下载hadoop包地址 https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz 上传并解压到3台服务器 配置3台主机的hosts和免密登录 1.修改.bash_profile vi .bash_profile # HADOOP_HOME export HADOOP_HOME/apps/svr/hadoop-3.2.…

【设计模式_七大原则_23种模式】

what is Design pattern&#xff1f;&#xff1f;&#xff1f; 是一套反复被使用的、经过分类编目的、家喻户晓的、代码设计经验的总结。 它是 软件工程的一块基石。 “ 设计模式是软件工程中一种通用的&#xff0c;可复用的一种解决方案&#xff0c;它是一种解决问题的通用模板…

阿里面试,HR说我不配21K,直接翻脸.....

好家伙&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测开岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装了&#xff0c;我说要21K&#xff0c;他说太高了&#xff0c;说…

day15 - 使用图像金字塔进行图像拼接

在我们之前的学习过程中&#xff0c;使用的都是恒定大小的图像&#xff0c;但是在某些情况下&#xff0c;我们需要使用不同分辨率的&#xff08;相同&#xff09;图像。例如&#xff0c;当在图像中搜索某些东西&#xff08;例如人脸&#xff09;时&#xff0c;我们不确定对象将…