• Python实现人脸检测(个人、多人、视频)


    我们先逐步进行学习。我将人脸检测的学习步骤分为如下几个方面。
    (1—4是一些小步骤。5—7是具体实现的案例)
    关于代码的相关意义我已经在程序中写上了备注(已经尽可能详细了!!)

    1、加载图片:

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-15:00
    """
    #导入模块
    import cv2 as cv
    #读取图片(注意路径不要有中文,否则会报错)
    img = cv.imread("C:\Users\26301\Desktop\2.jpg")
    #显示图片(这时的照片会一闪而过)
    cv.imshow('read_img',img)
    #设置等待键盘输入(保证上边显示的照片可以停留)
    #传入0表示无限等待,直到有东西输入(单位是毫秒)
    cv.waitKey(3000)
    #释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
    cv.destroyAllWindows()

    运行结果如下:

    在这里插入图片描述

    2、图片灰度转换:

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-15:25
    """
    #导入模块
    import cv2 as cv
    #读取图片(注意路径不要有中文,否则会报错)
    BGR_img = cv.imread("C:\Users\26301\Desktop\2.jpg")
    #显示图片(这时的照片会一闪而过)
    cv.imshow('BGR_img',BGR_img)
    
    #图片灰度转换
    gray_img = cv.cvtColor(BGR_img,cv.COLOR_BGR2GRAY)
    cv.imshow('gray_img',gray_img)
    
    #保存图片
    cv.imwrite('gray_img.jpg',gray_img)
    
    #设置等待键盘输入(保证上边显示的照片可以停留)
    #传入0表示无限等待,直到有东西输入(单位是毫秒)
    cv.waitKey(0)
    #释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
    cv.destroyAllWindows()

    运行结果如下:

    在这里插入图片描述
    在这里插入图片描述

    3、修改图片尺寸(在此次人脸检测案例中未用到):

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-15:30
    """
    # 导入模块
    import cv2 as cv
    
    # 读取图片(注意路径不要有中文,否则会报错)
    img = cv.imread("C:\Users\26301\Desktop\2.jpg")
    # 显示图片(这时的照片会一闪而过)
    cv.imshow('img', img)
    print("原来图片的形状:",img.shape)
    # 修改图片尺寸(宽度,高度)
    resize_img = cv.resize(img, dsize=(200, 240))
    print("修改后图片的形状:",resize_img.shape)
    # 显示图片(这时的照片会一闪而过)
    cv.imshow('resize_img', resize_img)
    # 设置等待键盘输入(保证上边显示的照片可以停留)
    # 传入0表示无限等待,直到有东西输入(单位是毫秒)
    #设置只有输入q的时候、退出
    while True:
        #ord('q')表示q对应的ascall
        if ord('q') == cv.waitKey(0):
            break
    
    # 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
    cv.destroyAllWindows()

    运行结果如下:

    在这里插入图片描述

    4、绘制矩形-圆形(只是简单地在图片上随便画一个):

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-15:39
    """
    # 导入模块
    import cv2 as cv
    
    # 读取图片(注意路径不要有中文,否则会报错)
    img = cv.imread("C:\Users\26301\Desktop\2.jpg")
    # 画矩形(x,y指的是矩形左上角的哪个点)
    x, y, w, h = 50, 50, 80, 80
    # color变量里参数的顺序是BGR,thickness表示的是宽度
    # (x,y,x+w,y+h)左上和右下两个点
    cv.rectangle(img, (x, y, x + w, y + h), color=(0, 255, 0), thickness=2)
    
    #画圆center元组指的是原点的坐标
    x,y,r = 200,200,100
    cv.circle(img,center=(x,y),radius=r,color=(0,0,255),thickness=3)
    
    # 显示图片(这时的照片会一闪而过)
    cv.imshow('img', img)
    # 设置等待键盘输入(保证上边显示的照片可以停留)
    # 传入0表示无限等待,直到有东西输入(单位是毫秒)
    cv.waitKey(0)
    # 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
    cv.destroyAllWindows()

    运行结果如下:

    在这里插入图片描述

    5、图像单个人脸检测:

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-16:30
    """
    # 导入库
    import cv2 as cv
    
    
    def face_detect_demo():
        # 将图片转换为灰度图片
        gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
        # 加载特征数据
        face_detector = cv.CascadeClassifier('D:/wen10/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
        #进行检测人脸操作
        faces = face_detector.detectMultiScale(gray)
        #得到的daces可能是多组x,y,h,w
        print("faces 的数值:",faces)
        for x, y, w, h in faces:
            cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
        # 显示图片(这时的照片会一闪而过)
        cv.imshow('result', img)
    
    
    if __name__ == '__main__':
        # 读取图片(注意路径不要有中文,否则会报错)
        img = cv.imread("C:\Users\26301\Desktop\1.jpg")
        face_detect_demo()
        # 设置等待键盘输入(保证上边显示的照片可以停留)
        # 传入0表示无限等待,直到有东西输入(单位是毫秒)
        cv.waitKey(0)
        # 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
        cv.destroyAllWindows()

    运行结果如下:

    在这里插入图片描述
    在这里插入图片描述

    6、图像多个人脸检测:

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-16:49
    """
    # 导入库
    import cv2 as cv
    
    
    def face_detect_demo():
        # 将图片转换为灰度图片
        gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
        # 加载特征数据
        face_detector = cv.CascadeClassifier('D:/wen10/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
        #进行检测人脸操作(参数也可以不写)
        faces = face_detector.detectMultiScale(gray,scaleFactor=1.01,minNeighbors=50)
        #得到的daces可能是多组x,y,h,w
        print("faces 的数值:",faces)
        for x, y, w, h in faces:
            #画矩形
            cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
            #画圆
            cv.circle(img, center=(x + w // 2, y + h // 2),radius=w//2,color=(0,0,255),thickness=1)
        # 显示图片(这时的照片会一闪而过)
        cv.imshow('result', img)
    
    
    if __name__ == '__main__':
        # 读取图片(注意路径不要有中文,否则会报错)
        img = cv.imread("C:\Users\26301\Desktop\5.jpg")
        face_detect_demo()
        # 设置等待键盘输入(保证上边显示的照片可以停留)
        # 传入0表示无限等待,直到有东西输入(单位是毫秒)
        cv.waitKey(0)
        # 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
        cv.destroyAllWindows()

    运行结果如下:

    在这里插入图片描述

    7、视频中的人脸检测:

    源程序代码如下:

    """
       __author__="dazhi"
        2021/3/20-17:10
    """
    #导入依赖
    import cv2 as cv
    def face_detect_demo(img):
        #将图片灰度
        gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
        #加载特征数据
        face_detector = cv.CascadeClassifier('D:/wen10/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
        #进行检测人脸操作(参数也可以不写)
        faces = face_detector.detectMultiScale(gray)
        for x,y,w,h in faces:
            #画矩形
            cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
            #画圆
            cv.circle(img,center=(x+w//2,y+h//2),radius=(w//2),color=(0,255,0),thickness=2)
        # 显示图片(这时的照片会一闪而过)
        cv.imshow('result',img)
    #读取视频
    cap=cv.VideoCapture('video.mp4')
    #播放进行读取(一帧一帧的走)
    while True:
        #flag表示是否在播放(布尔类型)
        flag,frame=cap.read()
        #判断是否在播放
        if not flag:
            break
        face_detect_demo(frame)
        #输入q的时候进行关闭
        if ord('q') == cv.waitKey(10):
            break
    #释放内存
    cv.destroyAllWindows()
    #释放视频的空间
    cap.release()

    运行结果如下:

    (这个可以实现视频播放过程中识别,但是博主忘记怎么在csdn里放视频了,所以就在视频的播放过程中截了几张图。如下~~~~~)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    给Linux添加google搜索命令
    安卓设置脚本开机自启动
    重读The C programming Lanuage 笔记四:c预处理
    重读The C programming Lanuage 笔记三:简单计算器程序
    重读The C programming Lanuage 笔记二:运算符优先级
    重读The C programming Lanuage 笔记一:类型转换
    【 转】 C/C++结构体和联合体的区别
    python 柯里化 和装饰器
    qq bug 一个
    网站收集
  • 原文地址:https://www.cnblogs.com/dazhi151/p/14941315.html
Copyright © 2020-2023  润新知