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()

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

  • 相关阅读:
    SpringBoot异步处理请求
    5本最佳的 Java 面向对象理论和设计模式的书籍
    彻底弄懂 HTTP 缓存机制 —— 基于缓存策略三要素分解法
    Java 性能优化的五大技巧
    Java 8 最佳技巧
    Java 并发的四种风味:Thread、Executor、ForkJoin 和 Actor
    在 Java 8 中避免 Null 检查
    关于创建java线程池问题的思考
    LuoguP1858 多人背包(DP)
    Luogu[YNOI2019]排序(DP,线段树)
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10697193.html
Copyright © 2011-2022 走看看