Baidu AI Studio李宏毅课程-生成对抗网络>项目1 基于openCV的人脸检测

任务描述

使用OpenCV中的CascadeClassifier进行人脸检测,下载预训练权重,权重文件格式为xml。在安装opencv的时候在其目录下data文件夹内,存放着权重描述文件。
下方是一个检测的例子,阅读代码并尝试修改,上传任务图像,完成检测。

输入图片:

识别后结果:

图片来源google搜索“毕业照”,若侵删。

代码如下

import cv2
import sys
import os.path

def detect(filename, cascade_file = "/opt/conda/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_alt.xml"):
    if not os.path.isfile(cascade_file):
        raise RuntimeError("%s: not found" % cascade_file)

    cascade = cv2.CascadeClassifier(cascade_file)
    path = 'work/faces1.png'
    image = cv2.imread(path, cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.equalizeHist(gray)

    faces = cascade.detectMultiScale(gray,
                                     # detector options
                                     scaleFactor = 1.005,
                                     minNeighbors = 1,
                                     minSize = (18, 18),
                                     maxSize = (26,26))

    print(faces)
    print("Detect {} faces".format(len(faces)))
    if len(faces) >= 20:
        print("Pass !")
    else:
        print("Fail !")

    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)

    cv2.imwrite("baseline_result.png", image)
    
path = 'work/faces1.png'
detect(path)

代码详解

python3基础语法(错误与异常)

raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

更多请参见:https://www.runoob.com/python3/python3-errors-execptions.html
cv2中的函数语法(只写了上述代码用到的功能和参数,更多功能请参加该block最下方链接)

1.CascadeClassifier(filename)

从文件中装载一个分类器。(Loads a classifier from a file.)

2.cv2.cvtColor(src, code[, dst[, dstCn]])

参数:

src: 颜色空间将被转换的图片。(It is the image whose color space is to be changed.)

code: 颜色空间转换代码。(It is the color space conversion code.)【BGR2GRAY是从BGR空间变为黑白的GRAY灰度空间】

Return Value: 返回一个图片。(It returns an image.)

3.equalizeHist()

均衡灰度图像的直方图Equalizes the histogram of a grayscale image.

均衡前

均衡后

4.detectMultiScale ( InputArray image,
std::vector< Rect > & objects,
std::vector< int > & numDetections,
double scaleFactor = 1.1,
int minNeighbors = 3,
int flags = 0,
Size minSize = Size(),
Size maxSize = Size()
)

参数:

scaleFactor 每次图片尺寸减小的比例数(Parameter specifying how much the image size is reduced at each image scale.)

minNeighbors 候选框需要保留的临近框数量(Parameter specifying how many neighbors each candidate rectangle should have to retain it.)

minSize 识别人脸框的最小尺寸

maxSize 识别人脸框的最大尺寸

更多请参见:
https://www.geeksforgeeks.org/python-opencv-cv2-cvtcolor-method/
https://docs.opencv.org/master/d5/daf/tutorial_py_histogram_equalization.html
https://docs.opencv.org/3.4/d1/de5/classcv_1_1CascadeClassifier.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值