• opencv-python识别人脸


    转自:https://www.cnblogs.com/neo-T/p/6430583.html

    OpenCV已经帮我们做了,我们只需调用对应的API函数即可,先给出代码:

     1 # -*- coding: utf-8 -*-
     2 
     3 ##关键字无法关闭 摄像头,可能是代码缩进问题。显示图像 在for 里面是无法推出的
     4 import sys
     5 from PIL import Image
     6 import cv2
     7 
     8 def AICatchVideo(v_name, camera_index):
     9     # 打开摄像头 ,视频来源,也可以使用已存的视频
    10     cap = cv2.VideoCapture(0)
    11     # 创建窗口
    12     cv2.namedWindow(v_name)
    13     # 加载人脸数据(人脸特征),#告诉OpenCV使用人脸识别分类器
    14     face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_alt2.xml')
    15     while True:
    16         ret, frame = cap.read()
    17         if not ret:
    18             # 等待用户操作
    19             cv2.waitKey(30)
    20         # 得到每一帧-》图像计算
    21         # 灰度转换:转换成灰度的图计算强度得以减低
    22         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    23         # 对比 摄像头采集到的数据-》人脸特征训练集
    24         faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5,minSize=(32,32))
    25         if len(faces)>0:
    26 
    27             for (x, y, w, h) in faces:
    28                 # 在窗口中识别人脸,画一个矩形
    29                 frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
    30         #显示图像
    31         cv2.imshow(v_name, frame)
    32         key = cv2.waitKey(20)
    33         if key & 0xFF == ord('q'):
    34             break
    35 
    36     # 窗口释放:缓存-》内存条
    37     cap.release()
    38     cv2.destroyAllWindows()
    39 
    40 
    41 if __name__ == '__main__':
    42     # print(len(sys.argv))
    43     # print('内容是'+ sys.argv[0])
    44     # if len(sys.argv) != 2:
    45     #     print('Usage:%s camera_id:{}'.format(sys.argv[0]))
    46     # else:
    47     AICatchVideo('识别人脸区域', sys.argv[0])

    #告诉OpenCV使用人脸识别分类器
    classfier = cv2.CascadeClassifier("./haarcascade_frontalface_alt2.xml")

    这行代码指定OpenCV选择使用哪种分类器(注意,一定习惯分类这个说法,ML的监督学习研究的就是各种分类问题),OpenCV提供了多种分类器:

    对同一个画面有可能出现多张人脸,因此,我们需要用一个for循环将所有检测到的人脸都读取出来,然后逐个用矩形框框出来,这就是接下来的for语句的作用。Opencv会给出每张人脸在图像中的起始坐标(左上角,x、y)以及长、宽(h、w),我们据此就可以截取出人脸。其中,cv2.rectangle()完成画框的工作,在这里我有意识的外扩了10个像素以框出比人脸稍大一点的区域。cv2.rectangle()函数的最后两个参数一个用于指定矩形边框的颜色,一个用于指定矩形边框线条的粗细程度。  

  • 相关阅读:
    Solo 博客系统 1.7.0 发布
    <Android 基础(二十九)> Fragment (2) ~ DialogFragment
    2016最新Java学习计划
    <Android 基础(二十八)> Fragment (1)
    2016最新前端学习计划
    Android 学习路线图
    C/C++学习路线图
    小学数学题,你会吗?
    劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)
    劣质代码评析——《写给大家看的C语言书(第2版)》》附录B之21点程序(七)
  • 原文地址:https://www.cnblogs.com/yexiaoyanzi/p/12595657.html
Copyright © 2020-2023  润新知