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

news/2024/7/21 6:59:59 标签: opencv, dnn, flask, 人工智能, 图像处理

欢迎关注『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.niftyadmin.cn/n/359551.html

相关文章

CSDN铁粉攻略

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

企业级信息系统开发——初探Spring AOP

文章目录 一、提出游吟诗人唱赞歌任务&#xff08;一&#xff09;采用传统方式实现&#xff08;二&#xff09;采用传统方式实现的缺点 二、采用配置方式使用AOP&#xff08;一&#xff09;创建本讲所需子包&#xff08;二&#xff09;创建杀龙任务类&#xff08;三&#xff09…

jetson nano python socket传输opencv图像

jetson nano socket传输opencv图像 测试摄像头是否可用CSI摄像头测试USB摄像头测试开启socket服务端方式一 : opencv开启CSI摄像头csi 摄像头 python opencv代码方式二 : 利用Jetcam通道打开摄像头 [推荐]安装traitlets安装Jetcamcsi 摄像头 python Jetcam代码方式三 : usb 摄像…

技术笔记:默默耕耘,赢得铁粉的秘密策略!

目录 第一步&#xff1a;真实实践&#xff0c;价值分享第二步&#xff1a;高质量文章的撰写第三步&#xff1a;积极互动&#xff0c;回复评论和留言第四步&#xff1a;定期更新和持续学习第五步&#xff1a;参与技术社区第六步&#xff1a;社区问答和问题解答总结 导语&#xf…

Jmeter性能测试 -3数据驱动实战

什么是数据驱动&#xff1f; 从数据文件中读取测试数据&#xff0c;驱动测试过程的一种测试方法。数据驱动可以理解为更高级的参数化。 特点&#xff1a;测试数据与测试代码分离&#xff1b;数据控制过程 好处&#xff1a;降低开发和维护成本&#xff0c;减少代码量&#xf…

软件测试:功能测试----测试范围和测试策略

一、前言 什么是软件测试&#xff1f;测试能够给我们带来什么&#xff1f;对于企业有什么好处&#xff1f; 软件测试&#xff0c;说的直白就是找bug&#xff0c;而针对的就是我们使用的一些app&#xff0c;网页&#xff0c;系统等等。与之而来的还有硬件测试&#xff0c;这里…

Nginx配置文件

四.Nginx配置 1.位置 /usr/local/nginx/conf/nginx.conf2.内容 Nginx的主配置文件是nginx.conf&#xff0c;这个配置文件一共由三部分组成&#xff0c;分别为全局块、events块和http块。在http块中&#xff0c;又包含http全局块、多个server块。每个server块中&#xff0c;可…

C++11 call_once 和 once_flag

文章目录 一、简介二、原理2.1 示例2.2 call_once源码详解2.3 once_flag源码详解 三、Linux内核中的 DO_ONCE 机制 一、简介 std::call_once 和 std::once_flag 是 C11 中引入的线程安全的函数和类型&#xff0c;用于确保某个函数只被调用一次。 std::once_flag 是一个类型&a…