• python调用astra进行人脸检测(使用CascadeClassifier)


    1、简述

    方法:使用opecv中,CascadeClassifier 级联分类器实现人脸检测,CascadeClassifier就是opencv下objdetect模块中用来做目标检测的级联分类器的一个类,它可以帮助我们检测例如车牌、眼睛、人脸等物体。它的大概原理就是判别某个物体是否属于某个分类。以人脸为例,我们可以把眼睛、鼻子、眉毛、嘴巴等属性定义成一个分类器,如果检测到一个模型符合定义人脸的所有属性,那么就认为它是一个人脸。
    当我们预测的是离散值时,进行的是“分类”。对于只涉及两个类别的“二分类”任务,我们通常将其中一个类称为“正类”(正样本),另一个类称为“负类”(反类、负样本)。在人脸检测中,主要任务是构造能够区分包含人脸实例和不包含人脸实例的分类器。这些实例被称为“正类”(包含人脸图像)和“负类”(不包含人脸图像)。

    2、基本步骤

    • 导入分类器文件

    我们这次实现的人脸识别功能,需要先导入一个后缀名为.xml的分类器文件,它是前人已经创建好的分类器,我们可以直接使用

    • 读入图片

    img1 = cv2.imread('Photos/MHT.png')

    • 转为灰度图

    imgGray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
     

    • 调用detectMultiScale()函数进行检测

    faces = face_cascade.detectMultiScale(cframe_data, 1.3, 5)

    • 绘制方框

            for (x, y, w, h) in faces:

                cframe_data = cv2.rectangle(cframe_data, (x, y), (x+w, y+h), (255, 0, 0), 2)

    3、代码

    1. from openni import openni2
    2. import numpy as np
    3. import cv2
    4. def mousecallback(event,x,y,flags,param):
    5. if event==cv2.EVENT_LBUTTONDBLCLK:
    6. print(y, x, dpt[y,x])
    7. if __name__ == "__main__":
    8. openni2.initialize()
    9. dev = openni2.Device.open_any()
    10. print(dev.get_device_info())
    11. depth_stream = dev.create_depth_stream()
    12. depth_stream.start()
    13. color_stream = dev.create_color_stream()
    14. color_stream.start()
    15. #cap = cv2.VideoCapture(0)
    16. cv2.namedWindow('depth')
    17. cv2.setMouseCallback('depth',mousecallback)
    18. cv2.namedWindow('color')
    19. cv2.setMouseCallback('color',mousecallback)
    20. #使用目标检测的级联分类器
    21. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#导入分类器文件
    22. while True:
    23. frame = depth_stream.read_frame()
    24. dframe_data = np.array(frame.get_buffer_as_triplet()).reshape([480, 640, 2])
    25. dpt1 = np.asarray(dframe_data[:, :, 0], dtype='float32')
    26. dpt2 = np.asarray(dframe_data[:, :, 1], dtype='float32')
    27. dpt2 *= 255
    28. dpt = dpt1 + dpt2
    29. cv2.imshow('depth', dpt)
    30. cframe = color_stream.read_frame()
    31. cframe_data = np.array(cframe.get_buffer_as_triplet()).reshape([480, 640, 3])
    32. R = cframe_data[:, :, 0]
    33. G = cframe_data[:, :, 1]
    34. B = cframe_data[:, :, 2]
    35. cframe_data = np.transpose(np.array([B, G, R]), [1, 2, 0])
    36. cframe_data = cframe_data.copy()
    37. #调用detectMultiScale()函数进行检测
    38. faces = face_cascade.detectMultiScale(cframe_data, 1.3, 5)
    39. #绘制矩形框标记人脸
    40. for (x, y, w, h) in faces:
    41. cframe_data = cv2.rectangle(cframe_data, (x, y), (x+w, y+h), (255, 0, 0), 2)
    42. cv2.imshow('color', cframe_data)
    43. key = cv2.waitKey(1)
    44. if int(key) == ord('q'):
    45. break
    46. depth_stream.stop()
    47. color_stream.stop()
    48. dev.close()

    4、截图

    感谢Musk美照,早晚高低提一辆特斯拉,respect!!

     

  • 相关阅读:
    PV操作经典例题
    9.FPN网络代码实现
    LeetCode-剑指22-链表中倒数第k个节点
    数据结构(顺序表)
    python学习--特殊方法和属性
    系统架构设计师学习笔记——软件工程_重点备忘录
    HTML视频背景(动态背景)
    springcloud微服务(一)(了解微服务、eureka注册中心、Ribbon负载均衡)
    新加坡国际学校年年IB成绩领先,到底有何优势?
    Tomcat 源码解析一EL表达式源码解析
  • 原文地址:https://blog.csdn.net/cangqiongxiaoye/article/details/133972720