• 树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别


     今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)

     本人所用树莓派4B 装载的系统与版本如下:

     版本可用命令 (lsb_release -a) 查询:

     Opencv 版本是4.5.1:

     Python 版本3.7.3:

    今日学习:OpenCV_haar人脸识别

    文章提供测试代码讲解,整体代码贴出、测试效果图、完整测试工程下载

    目录

     整体代码贴出:

    测试效果图:

    整体工程下载:

    网上学习资料网址贴出:


     

    基于Haar特征和AdaBoost算法训练而成的xml

     以下有XML关特征分类集的知识为AI生成:

    1. 文件用途

    • 人脸检测:该文件能够识别并标记出图像或视频帧中的正面人脸区域。
    • 应用场景:广泛应用于人脸识别、安防监控、人脸支付等领域。

    2. 算法原理

    • Haar特征:Haar特征是一种图像局部特征描述子,通过计算图像中特定区域的特征值(如黑白矩形框内的像素和之差)来描述图像的局部结构。这些特征能够有效地捕捉图像中的边缘、纹理等信息,适用于面部检测等任务。
    • AdaBoost算法:AdaBoost是一种集成学习算法,用于构建多个弱分类器,并将它们组合成一个强分类器。在Haarcascade算法中,AdaBoost算法用于优化级联分类器的性能,通过不断地对分类器进行训练和调整,提高分类器的准确性和鲁棒性。
    • 级联分类器:级联分类器是一种常用的分类器结构,它将多个弱分类器组合在一起,形成一个强分类器。在Haarcascade算法中,级联分类器用于将图像中的面部区域与非面部区域进行区分。

    3. 文件位置

    • OpenCV安装目录:在OpenCV的安装目录下,通常可以在data/haarcascades文件夹中找到该文件。具体位置可能因OpenCV的安装方式和版本而有所不同。
    • GitHub仓库:OpenCV的GitHub仓库中也包含了该文件,可以在opencv/data/haarcascades路径下找到。

    4. 使用方法

    OpenCV中,可以通过cv2.CascadeClassifier()函数加载haarcascade_frontalface_default.xml文件,创建一个人脸检测器对象。然后,使用该对象对图像或视频帧进行人脸检测。

    5. 注意事项

    • 检测效果:虽然haarcascade_frontalface_default.xml文件在大多数情况下能够取得较好的检测效果,但在某些复杂场景下(如光照变化、遮挡、姿态变化等)可能会出现误检或漏检的情况。
    • 性能优化:为了提高检测性能和准确性,可以根据具体应用场景对模型进行调优或选择其他更适合的模型。

     

    cv2.CascadeClassifier 是 OpenCV 库中用于对象检测(尤其是面部、眼睛、车辆等)的一个非常有效的工具。它基于 Viola-Li 积分图像和 AdaBoost 算法,能够快速地从图像中检测出预先训练好的对象。在你给出的例子中,haarcascade_frontalface_default.xmlhaarcascade_eye.xml 是两个预训练的 Haar 特征分类器文件,分别用于检测正面人脸和眼睛。

    关于训练你自己的 Haar 特征分类器

    可以训练你自己的 Haar 特征分类器,但这通常是一个相对复杂和耗时的过程,需要大量的标记数据(即带有标注的图像)和一定的机器学习知识。以下是训练 Haar 特征分类器的一般步骤:

    1. 收集数据集
      • 你需要收集大量的图像,这些图像应该包含你想要检测的对象(例如,不同角度、光照条件下的面部或眼睛)。
      • 这些图像需要被手动标注,指出每个对象的确切位置(通常是矩形框)。
    2. 准备数据
      • 将你的数据集转换为 OpenCV 需要的格式。这通常涉及到将图像和对应的标注信息组织成一定的文件结构。
    3. 训练分类器
      • 使用 OpenCV 的 opencv_traincascade 工具或类似的库来训练你的分类器。这个工具会读取你的数据集,提取 Haar 特征,并使用 AdaBoost 算法来训练一个分类器。
      • 训练过程可能需要多次迭代和调整参数,以达到最佳的检测效果。
    4. 评估分类器
      • 使用一个独立的测试集来评估你的分类器的性能。
      • 检查准确率、召回率和误报率等指标。
    5. 优化和部署
      • 根据测试结果优化你的分类器(例如,调整训练参数、收集更多数据等)。
      • 一旦你满意了分类器的性能,就可以将其部署到你的应用程序中。

    注意事项

    • 训练 Haar 特征分类器需要大量的计算资源(CPU 时间和内存)。
    • 收集高质量、多样化的数据集对于训练出好的分类器至关重要。
    • Haar 特征分类器对于光照变化、遮挡和角度变化等因素比较敏感,可能需要在这些方面进行优化。

    由于这些原因,许多开发者选择使用预训练的 Haar 特征分类器,或者探索其他更现代的对象检测方法,如基于深度学习的模型(如 YOLO、SSD、Faster R-CNN 等),这些方法在检测精度和效率方面通常表现更好。

     整体代码贴出:

    这个代码展示了识别人脸以及人眼:

    引用预先训练好的XML文件,XML文件要与python文件在同一目录!

    1. # -*- coding: utf-8 -*-
    2. import numpy as np
    3. import cv2
    4. # 这两行代码加载了Haar特征分类器,用于检测人脸和眼睛。
    5. # haarcascade_frontalface_default.xml和haarcascade_eye.xml是预先训练好的XML文件,包含了检测人脸和眼睛所需的特征数据。
    6. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    7. eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
    8. cap = cv2.VideoCapture(0)
    9. while 1:
    10. ret, img = cap.read()
    11. #cv2.flip(img,1)将图像水平翻转,因为摄像头捕获的图像通常是镜像的。
    12. img = cv2.flip(img,1)
    13. #cv2.cvtColor将图像从BGR颜色空间转换为灰度图像,因为Haar特征分类器在灰度图像上工作得更好。
    14. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    15. #使用人脸分类器在灰度图像上检测多个人脸。detectMultiScale方法返回检测到的面部的边界框列表。
    16. faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    17. #遍历检测到的每个人脸,x,y,w,h分别是边界框的左上角坐标、宽度和高度。
    18. for (x,y,w,h) in faces:
    19. #使用cv2.rectangle在原始图像上绘制人脸的矩形框
    20. cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    21. #从人脸区域中裁剪出ROI(Region of Interest,感兴趣区域),并在灰度图像和原始图像上分别进行裁剪
    22. roi_gray = gray[y:y+h, x:x+w]
    23. roi_color = img[y:y+h, x:x+w]
    24. print (int(x+w/2), int(y+h/2))
    25. #在人脸ROI上检测眼睛,并在检测到的眼睛位置绘制绿色矩形框
    26. eyes = eye_cascade.detectMultiScale(roi_gray)
    27. for (ex,ey,ew,eh) in eyes:
    28. cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
    29. #显示处理后的图像
    30. cv2.imshow('img',img)
    31. key = cv2.waitKey(1) & 0xFF
    32. if key == ord("q"):
    33. break
    34. cap.release()
    35. cv2.destroyAllWindows()

    测试效果图:

    这里我在自己的PC电脑上也配置了python3.8 含有OpenCv 4.5.1的环境,

    因此这第一张图先在 Pycharm 中测试了:

    这是在树莓派远程连接测试的效果:

    整体工程下载:

    https://download.csdn.net/download/qq_64257614/89525385

    网上学习资料网址贴出:

    [树莓派基础]13.树莓派OpenCV人脸识别视频讲解_哔哩哔哩_bilibili

     https://download.csdn.net/download/qq_64257614/89525385

  • 相关阅读:
    WPF界面设计学习
    SpringBoot SpringBoot 原理篇 3 核心原理 3.2 启动流程【1】
    设计模式-04-原型模式
    Goby 漏洞更新|锐捷网络 NBR路由器 webgl.data 信息泄露漏洞
    Kamiya艾美捷抗胸腺嘧啶二聚体单抗(环丁烷嘧啶二聚体CPD)说明书
    基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32
    JavaSE 第五章 面向对象基础(上)
    ERR_PNPM_LINKING_FAILED Error: EPERM: operation not permitted, rename
    Google Earth Engine(GEE)——利用行列号进行影像去云,使用研究区大于单景影像的研究区范围
    夜神模拟器+Fiddler抓包测试App
  • 原文地址:https://blog.csdn.net/qq_64257614/article/details/140271533