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

这篇文章主要为大家详细介绍了如何基于OpenCV和Gradio实现简单的人脸识别功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

环境配置

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

实验原理

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

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

程序设计

# -*- 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-600", "images/2.jpg-600", "images/3.jpg-600", "images/4.jpg-600"], ) 

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-600", cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 

5.最后运行gradio的lauch

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

完整代码

# -*- 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-600", cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) return img demo = gr.Interface( face_rec, gr.Image(), "image", examples=["images/1.jpg-600", "images/2.jpg-600", "images/3.jpg-600", "images/4.jpg-600"], ) if __name__ == "__main__": demo.launch()

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

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

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

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python