zoukankan      html  css  js  c++  java
  • Python使用OpenCV实现简单的人脸检测

    文章目录:

    本文使用的环境是:Windows+Python3.x+Anaconda

    安装Python以及Anaconda的步骤本文不予以讲解了,下面主要讲的是OpenCV的安装以及使用。

    OpenCV安装

    安装numpy

    如果没有numpy的话要先下载numpy,一般安装完Anaconda后就会自带很多库,这也是我推荐使用Anaconda的原因。(通过conda list命令可以查看Anaconda已经安装完成的库)

    pip install numpy

    安装opencv

    pip install opencv-python

    如果通过上述命令无法安装,可以直接下载whl包安装,安装whl包依然使用pip
    下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
    如果不想下载可以直接使用我下载好的(里面包含了人脸训练模型)。

    百度网盘链接:https://pan.baidu.com/s/1yuxaHjH0mw7wXqHI169Y0A
    密码:q0m7

    下载完成后可以使用下列命令安装

    pip install 包的位置(如:pip install D:whlopencv_python-3.4.1-cp36-cp36m-win_amd64.whl)

    可能存在的错误

    (1) Script file ‘D:Anaconda3Scriptspip-script.py’ is not present.
    输入下列命令

    easy_install pip

    (2)缺少ipykernel库
    缺少ipykernel库
    运行下列命令下载

    pip install ipykernel

    OpenCV使用

    OpenCV测试

    #导入cv模块
    import cv2 as cv
    #读取图像,支持 bmp、jpg、png、tiff 等常用格式
    img = cv.imread("D:\picture\318394.jpg")
    #输出OpenCV的版本号
    print(cv.__version__)
    #创建窗口并显示图像
    cv.namedWindow("Image")
    cv.imshow("Image",img)
    cv.waitKey(0)
    #释放窗口
    cv.destroyAllWindows()

    效果图:

    效果图

    注意:

    如果在使用Opencv的过程中出现OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file ……..opencvmoduleshighguisrcwindow.cpp, line 261,则是文件路径有误,
    应将图片路径:“D:pics est.png”改为“D:pics est.png”

    图片人脸检测

    程序要求:

    识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下:
    效果图

    技术实现思路

    • 图片转换成灰色(降低为一维的灰度,减低计算强度)
    • 图片上画矩形
    • 使用训练分类器查找人脸

    注意

    在使用OpenCV的人脸检测之前,需要一个人脸训练模型,格式是xml的,我们这里使用OpenCV提供好的人脸分类模型xml,下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 可全部下载到本地。我之前分享的网盘里提供了,要使用的人脸训练模型。

    百度网盘链接:https://pan.baidu.com/s/1yuxaHjH0mw7wXqHI169Y0A
    密码:q0m7

    完整代码:

    import cv2 
    filepath = "D:\picture\318394.jpg" 
    img = cv2.imread(filepath) # 读取图片 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换灰色 
    # OpenCV人脸识别分类器 
    classifier = cv2.CascadeClassifier( "D:openvchaarcascade_frontalface_default.xml" ) 
    color = (0, 255, 0) # 定义绘制颜色 
    # 调用识别人脸 
    faceRects = classifier.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) 
    if len(faceRects): # 大于0则检测到人脸 
        for faceRect in faceRects: # 单独框出每一张人脸 
            x, y, w, h = faceRect 
            # 框出人脸 
            cv2.rectangle(img, (x, y), (x + h, y + w), color, 2) 
            # 左眼 
            cv2.circle(img, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8), color) 
            #右眼 
            cv2.circle(img, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8), color) 
            #嘴巴 
            cv2.rectangle(img, (x + 3 * w // 8, y + 3 * h // 4), (x + 5 * w // 8, y + 7 * h // 8), color) 
    cv2.imshow("image", img) # 显示图像 
    c = cv2.waitKey(10) 
    cv2.waitKey(0) 
    cv2.destroyAllWindows()
    
  • 相关阅读:
    Wannafly挑战赛21A
    luoguP4000 斐波那契数列
    关于斐波那契数模意义下的循环节问题
    Codeforces Round #501 (Div. 3) F. Bracket Substring
    1257: [CQOI2007]余数之和
    51nod1380 夹克老爷的逢三抽一
    51nod1423 最大二"货" 单调栈
    51nod1624 取余最长路 前缀和 + set
    51nod1437 迈克步 单调栈
    51nod1515 明辨是非 并查集 + set
  • 原文地址:https://www.cnblogs.com/snailclimb/p/9086329.html
Copyright © 2011-2022 走看看