今天小编给大家分享一下基于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 grimport timeimport 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()
完整代码
# -*- coding: utf-8 -*-"""Created on Sun April 4 17:11:06 2023@author: liujianjian"""import gradio as grimport timeimport 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 imgdemo = 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()
以上就是“基于OpenCV和Gradio怎么实现简单的人脸识别”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。