zoukankan      html  css  js  c++  java
  • 使用OpenCV训练好的级联分类器识别人脸

    一、使用OpenCV训练好的级联分类器来识别图像中的人脸

    当然还有很多其他的分类器,例如表情识别,鼻子等,具体可在这里下载:

    OpenCV分类器

    import cv2
    # 矩形颜色和描边
    color = (0,0,255)       # 红色框
    strokeWeight = 1        # 线宽为 1
    windowName = "Object Detection"
    img = cv2.imread("lena.jpg")
    
    # 加载检测文件
    cascade = cv2.CascadeClassifier("F:/opencv-master/data/haarcascades/haarcascade_frontalface_alt.xml")
    
    rects = cascade.detectMultiScale(img)
     
    # 获取矩形列表
    for x,y, width,height in rects:
        cv2.rectangle(img, (x,y), (x+width, y+height), color, strokeWeight)
    
    # 显示
    cv2.imshow(windowName, img)
    cv2.waitKey(0)

    效果如图所示:

    二、检测摄像头视频中的人脸

    原理和在图片中检测出人脸差不多,都是加载训练好的分类器。

    import cv2
    import time
    import numpy as np
    print('Press Esc to exit')
    
    # 加载分类器
    faceCascade = cv2.CascadeClassifier('F:/opencv-master/data/haarcascades/haarcascade_frontalface_default.xml')
    imgWindow = cv2.namedWindow('FaceDetect', cv2.WINDOW_NORMAL)
    def detect_face():
        capInput = cv2.VideoCapture(0)
        # 避免处理时间过长造成画面卡顿
        nextCaptureTime = time.time()
        faces = []
        
        # 检测摄像头是否读取数据
        if not capInput.isOpened(): 
            print('Capture failed because of camera')
        while 1:
            ret, img = capInput.read()
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            if nextCaptureTime < time.time():
                nextCaptureTime = time.time() + 0.1
                
                # 使用模板匹配图形
                faces = faceCascade.detectMultiScale(gray, 1.3, 5)
            if np.all(faces != None):
                for x, y, w, h in faces:
                    # 用蓝色框框出
                    # 函数的参数分别为:图像,左上角坐标、右下角坐标、颜色、宽度
                    img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
            cv2.imshow('FaceDetect', img)
            # 这是简单的读取键盘输入,27即Esc的acsii码
            if cv2.waitKey(1) & 0xFF == 27: break
        capInput.release()
        cv2.destroyAllWindows()
    
    detect_face()

    效果不错,就不展示图了(不想展示脸。。。。)

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10697193.html
Copyright © 2011-2022 走看看