当前位置:   article > 正文

基于python+opencv深度学习之人脸检测_人脸检测灰度图

人脸检测灰度图

一、软件准备

(一)软件需要

1、python
2、pycharm

(二)依赖库

1、opencv
2、tensorflow
3、numpy
4、matplotlib

(三)下载
1、python
最新版:官网
老板:python3.6.6 (我认为最好用的)
链接:https://pan.baidu.com/s/1uyJcpis6AyKsox_n6BRIGQ
提取码:1249
2、pycharm
官网
3、依赖库
opencv
cmd进入终端输入

pip install opencv-python
  • 1

根据自己需要下载各种版本:

opencv_python_headless‑4.5.2+dummy‑py3‑none‑any.whl
opencv_python‑4.5.2‑cp39‑cp39‑win_amd64.whl
opencv_python‑4.5.2‑cp39‑cp39‑win32.whl
opencv_python‑4.5.2‑cp38‑cp38‑win_amd64.whl
opencv_python‑4.5.2‑cp38‑cp38‑win32.whl
opencv_python‑4.5.2‑cp37‑cp37m‑win_amd64.whl
opencv_python‑4.5.2‑cp37‑cp37m‑win32.whl
opencv_python‑4.4.0‑cp36‑cp36m‑win_amd64.whl
opencv_python‑4.4.0‑cp36‑cp36m‑win32.whl
opencv_python‑4.1.2‑cp35‑cp35m‑win_amd64.whl
opencv_python‑4.1.2‑cp35‑cp35m‑win32.whl
opencv_python-4.1.2+contrib-cp35-cp35m-win_amd64.whl
opencv_python-4.1.2+contrib-cp35-cp35m-win32.whl
opencv_python‑3.1.0‑cp34‑cp34m‑win_amd64.whl
opencv_python‑3.1.0‑cp34‑cp34m‑win32.whl
opencv_python‑2.4.13.7‑cp27‑cp27m‑win_amd64.whl
opencv_python‑2.4.13.7‑cp27‑cp27m‑win32.whl
opencv_contrib_python_headless‑4.5.2+dummy‑py3‑none‑any.whl

tensorflow

pip install tensorflow==1.14.0 --user
  • 1

注意自己是cpu还是gpu版本
还要与python版本对匹配:在这里插入图片描述
numpy:下载tensorflow时会自动下载与之相对应的版本
matplotlib:可在pycharm里面直接添加

File -->Settings --> Project–>Python Interpreter–>加号搜索添加

二、数据集准备

1、我整理的人脸识别数据集
百度网盘:https://pan.baidu.com/s/1KF5pUDBRn8eMSMJ0fz1tvQ
提取码:1249
2、文件解压后,选择到自己需要的xml文件
在这里插入图片描述
3、把xml文件复制粘贴到你自己的项目中去,并记住他的位置,后面引用数据集路径时需要。

三、代码准备

(一)图片人脸识别

import cv2 as cv
import numpy as np

def face_detect_demo():#人脸检测函数
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)#把图片变成灰度图片,因为人脸的特征需要在灰度图像中查找
    #以下分别是HAAR和LBP特征数据,任意选择一种即可,注意:路径中的‘/’和‘\’是有要求的
    # 通过级联检测器 cv.CascadeClassifier,加载特征数据
    # face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
    face_detector = cv.CascadeClassifier(
        "D:\cv_move\data/haarcascade_frontalface_alt_tree.xml")
    #在尺度空间对图片进行人脸检测,第一个参数是哪个图片,第二个参数是向上或向下的尺度变化,是原来尺度的1.02倍,第三个参数是在相邻的几个人脸检测矩形框内出现就认定成人脸,这里是在相邻的5个人脸检测框内出现,如果图片比较模糊的话建议降低一点
    faces = face_detector.detectMultiScale(gray, 1.02, 5)
    for x, y, w, h in faces:#绘制结果图
        #rectangle参数说明,要绘制的目标图像,矩形的第一个顶点,矩形对角线上的另一个顶点,线条的颜色,线条的宽度
        cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 2)
        cv.imshow("result", src)#输出结果图

src = cv.imread("D:\cv_move\data/1.jpg")#图片是JPG和png都可以
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)#创建绘图窗口
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常关闭绘图窗口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

结果展示:
在这里插入图片描述
在这里插入图片描述
(二)视频人脸识别

import cv2 as cv
import numpy as np

def face_detect_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
    face_detector = cv.CascadeClassifier("D:\cv_move\data/haarcascade_frontalface_alt_tree.xml")
    faces = face_detector.detectMultiScale(gray, 1.02, 5)
    for x, y, w, h in faces:
        cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv.imshow("result", image)


capture = cv.VideoCapture("D:\cv_move\data/4.mp4")
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while (True):
    #按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
    ret, frame = capture.read()
    # cv.flip函数表示图像翻转,沿y轴翻转, 0: 沿x轴翻转, <0: x、y轴同时翻转
    frame = cv.flip(frame, 1)
    face_detect_demo(frame)
    #waitKey()方法本身表示等待键盘输入,参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
    c = cv.waitKey(10)
    if c == 27:#当键盘按下‘ESC’退出程序
        break

#cv.waitKey(0)参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常关闭绘图窗口

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

结果展示:
在这里插入图片描述
(三)摄像头实时检测

import cv2 as cv
import numpy as np

def face_detect_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
    face_detector = cv.CascadeClassifier("D:\cv_move\data/haarcascade_frontalface_alt_tree.xml")
    faces = face_detector.detectMultiScale(gray, 1.02, 5)
    for x, y, w, h in faces:
        cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv.imshow("result", image)


capture = cv.VideoCapture(0)#其中的0表示电脑中的第一个相机
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while (True):
    #按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
    ret, frame = capture.read()
    # cv.flip函数表示图像翻转,沿y轴翻转, 0: 沿x轴翻转, <0: x、y轴同时翻转
    frame = cv.flip(frame, 1)
    face_detect_demo(frame)
    #waitKey()方法本身表示等待键盘输入,参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
    c = cv.waitKey(10)
    if c == 27:#当键盘按下‘ESC’退出程序
        break

#cv.waitKey(0)参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常关闭绘图窗口

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

结果展示:
在这里插入图片描述
我做的工程获取:
链接:https://pan.baidu.com/s/1Ll3Me0yM49GW_MNhDZn__w
提取码:1249

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/729920
推荐阅读
相关标签
  

闽ICP备14008679号