开发者

基于OpenCV和Gradio实现简单的人脸识别详解

目录
  • 环境配置
  • 实验原理
  • 程序设计
    • 1.上传图片
    • 2.人脸识别
    • 3.绘制方框
    • 4.保存预测结果
    • 5.最后运行gradio的lauch
  • 完整代码

    环境配置

    • gradio 安装 pip install gradio
    • cv2 安装 pip install python-opencv

    实验原理

    cv2有预训练模型face_cascade,可以对编程人脸进行检测,检测到人脸,绘制框框标识。

    完成检测,调用cv2进行显示。

    基于OpenCV和Gradio实现简单的人脸识别详解

    程序设计

    # -*- coding: utf-8 -*-
    """
    Created on Sun Apr 10 17:11:06 2022
    
    @author: liujianjian
    """
    import gradio as gr
    import time
    import cv2
    
    #############这里需要添加绝对路径###################
    pathf = './haarcascades/haarcascade_frontalface_alt.XML'
    pathe = './haarcascades/haarcascade_eye.xml'
    ###########################################
    

    1.上传图片

    上传图片采用gradio,直接上传即可,或者可加入demo图片,供选择。

    demo = gr.Interface(
        face_rec,
        gr.Image(),
        "image",    
        examples=["images/1.jpg", "images/2.jpg", "images/3.jpg", "images/4.jpg"],
    )
    

    2.人脸识别

    人脸识别简单,复制配置文件到本地,加载进去即可。

        # 转为灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 创建人脸识别分类器
        face_cascade编程 = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
        face_cascade.load('./haarcascades/haarcascade_frontalface_default.xml')
        # 创建人眼识别分类器
        eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')
        face_cascade.loajsd('./haarcascades/haarcascade_eye.xml')
        # 检测人脸
        faces = face_cascade.detectMultiScale(gray,
                                              scaleFactor=1.15,
                                              minNeighbors=3,
                                              flags=cv2.IMREAD_GRAYSCALwww.devze.comE,
                                              minSize=(40, 40))

    3.绘制方框

    就是绘制方框了,绘制显示即可。

        # 在人脸周围绘制方框
        for (x, y, w, h) in faces:
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
        # 进行眼部检测
        eyes = eye_cascade.detectMultiScale(gray,
                                            scaleFactor=1.1,
                                            minNeighbors=3,
                                            flags=cv2.IMREAD_GRAYSCALE,
                                            minSize=(3, 3))
        for (ex, ey, ew, eh) in eyes:
            # 绘制眼部方框
            img = cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
    

    4.保存预测结果

    调用cv2.imwrite即可,注意图像转换。

    cv2.imwrite(f"result/{time.time_ns()}.jpg", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    

    5.最后运行gradio的lauch

    if __name__ == "__main__":
        demo.launch()
    

    基于OpenCV和Gradio实现简单的人脸识别详解

    完整代码

    # -*- coding: utf-8 -*-
    """
    Created on Sun April 4 17:11:06 2023
    
    @author: liujianjian
    """
    import gradio as gr
    import time
    import cv2
    
    #############这里需要添加绝对路径###################
    pathf = './haarcascades/haarcascade_frontalface_alt.xml'
    pathe = './haarcascades/haarcascade_eye.xml'
    ###########################################
    
    # 人脸检测函数
    def face_rec(img):
        # 转为灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 创建人脸识别分类器
        face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
        face_cascade.load('./haarcascades/haarcascade_frontalface_default.xml')
        # 创建人眼识别分类器
        eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')
        face_cascade.load('./haarcascades/haarcascade_eye.xml')
        # 检测人脸
        faces = face_cascade.detectMultiScale(gray,
                  android                            scaleFactor=1.15,
                                              minNeighbors=3,
                                              flags=cv2.IMREAD_GRAYSCALE,
                                              minSize=(40, 40))
    
        # 在人脸周围绘制方框
        for (x, y, w, h) in faces:
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
        # 进行眼部检测
        eyes = eye_cascade.detectMultiScale(gray,
                                            scaleFactor=1.1,
                                            minNeighbors=3,
                                            flags=cv2.IMREAD_GRAYSCALE,
                                            minSize=(3, 3))
        for (ex, ey, ew, eh) in eyes:
            # 绘制眼部方框
            img = cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
        
        cv2.imwrite(f"result/{time.time_ns()}.jpg", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        return img
    
    
    demo = gr.Interface(
        face_rec,
        gr.Image(),
        "image",    
        examples=["images/1.jpg", "images/2.jpg", "images/3.jpg", "images/4.jpg"],
    )
    
    if __name__ == "__main__":
       开发者_JAVA demo.launch()

    项目地址: https://github.com/livingbody/face_det_cv2

    以上就是基于OpenCV和Gradio实现简单的人脸识别详解的详细内容,更多关于OpenCV Gradio人脸识别的资料请关注我们其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜