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

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
简介: 基于OpenCV和Gradio实现简单的人脸识别

前言


本周学习了文章 基于openCV实现简单的人脸识别【juejin.cn/post/720291…

自己也试试。


环境配置


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


实验原理


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

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

image.png


程序设计


# -*- 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'
###########################################



上传图片采用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.load('./haarcascades/haarcascade_eye.xml')
    # 检测人脸
    faces = face_cascade.detectMultiScale(gray,
                                          scaleFactor=1.15,
                                          minNeighbors=3,
                                          flags=cv2.IMREAD_GRAYSCALE,
                                          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()

image.png


完整代码


# -*- 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,
                                          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__":
    demo.launch()

项目地址: github.com/livingbody/…



目录
相关文章
|
6月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
218 7
|
3月前
|
机器学习/深度学习 算法 机器人
|
3月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
5月前
|
人工智能 计算机视觉 Python
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
|
4月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
6月前
|
人工智能 算法 计算机视觉
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
人工智能视觉:基于OpenCV的人脸识别技术的深度解析
|
5月前
|
机器学习/深度学习 监控 算法
使用Python和OpenCV实现简单的人脸识别系统
使用Python和OpenCV实现简单的人脸识别系统
67 0
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
329 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
49 4
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制

热门文章

最新文章