当前位置:首页> AI教程> 基于OpenCV的简单人脸识别实现指南

基于OpenCV的简单人脸识别实现指南

释放双眼,带上耳机,听听看~!
本文介绍了如何使用OpenCV和gradio库来实现简单的人脸识别,通过上传图片进行人脸检测和绘制方框的操作。

前言

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

自己也试试。

环境配置

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

实验原理

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

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

基于OpenCV的简单人脸识别实现指南

程序设计

# -*- 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.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()

基于OpenCV的简单人脸识别实现指南

完整代码

# -*- 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/…

本文正在参加「金石计划」

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

PaddleOCR实战经验:推理模型下载及使用教程

2023-12-18 9:54:14

AI教程

向量嵌入与解决大型语言模型幻觉问题

2023-12-18 9:58:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索