Python 基于OpenCV+face_recognition+tkinter实现人脸特征监测

1.安装包依赖

安装好依赖包opencv-python、face-recognition、tkinter

pip install opencv-python
pip install face-recognition

安装可以参考之前的文章:Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别。由于python3以上版本已经将tkinter内置到环境,所以这里不需要单独安装依赖。

2.代码示例

import os
import cv2
import face_recognition
import tkinter as tk  
import tkinter.filedialog
from PIL import Image,ImageTk 

#选择一个图片并显示在界面上
def choosepic():
    choosepath = tkinter.filedialog.askopenfilename()
    path.set(choosepath)
    img_open = Image.open(entry.get()).resize((530,750))
    img = ImageTk.PhotoImage(img_open)
    lableShowImage.config(image=img)
    lableShowImage.image = img
    lableShowImage.place(x=30, y=70, width=530, height=750)
    showHandledImg(choosepath)

#处理人脸特征
def handleFacialFeatures(image, face_marks):
    for marks_dict in face_marks:
        for marks_key in marks_dict.keys():
            for point in marks_dict[marks_key]: 
                cv2.circle(image, point, 2, (0,0,255), -1)
    return image

#显示处理后的照片
def showHandledImg(choosepath):
    frame=cv2.imread(choosepath)
    frame=cv2.resize(src=frame,dsize=(530,750))
    #转成RGB灰度图
    frameRGB=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2RGB)
    #获取人脸关键点
    face_marks = face_recognition.face_landmarks(frameRGB, None, "large")
    #返回处理后的结果
    imgHandledArr = handleFacialFeatures(frame, face_marks)
    #将处理后的照片数组转成图片
    imgHandled = Image.fromarray(imgHandledArr)
    img = ImageTk.PhotoImage(imgHandled)
    lableShowImage2.config(image=img)
    lableShowImage2.image = img
    lableShowImage2.place(x=630, y=70, width=530, height=750)

if __name__ == '__main__':
    app = tk.Tk()  
    #窗体标题
    app.title("show pictue")  
    #窗体大小
    app.geometry("1200x900+200+50")
    path = tk.StringVar()
    #将路径展示框只读
    entry = tk.Entry(app, state='readonly', text=path,width = 100)
    entry.pack()
    #显示原图
    lableShowImage = tk.Label(app)
    lableShowImage.pack()
    #显示处理后的效果图
    lableShowImage2 = tk.Label(app)
    lableShowImage2.pack()
    #点击选择图片触发choosepic()方法
    buttonSelImage = tk.Button(app, text='choose picture', command=choosepic)
    buttonSelImage.pack()
    app.mainloop()

3.说明

整个源码中核心就是face_recognition.face_landmarks来获取人脸特征点集合。

face_landmarks(face_imageface_locations=Nonemodel='large')参数说明:

  • face_image:要处理的图像
  • face_locations:可选提供要检查的脸部位置列表,none 表示不确定人脸所在的位置,自动找。
  • model:模型,large获取68个点集合,small获取5个点集合,small处理速度快

将图片数据数组转成图片有9种不同的方式,大家可以一一去尝试

modes描述
11位像素,黑和白,存成8位的像素
L8位像素,黑白
P8位像素,使用调色板映射到任何其他模式
RGB3× 8位像素,真彩
RGBA4×8位像素,真彩+透明通道
CMYK4×8位像素,颜色隔离
YCbCr3×8位像素,彩色视频格式
I32位整型像素
F32位浮点型像素

4.实现效果 

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【项目介绍】 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 人脸识别考勤系统 本项目是一个基于 Python人脸识别考勤系统,主要使用了 `dlib`、`opencv`、`tkinter`、`PIL`、`pymysql` 等库,并使用了 KNN 算法进行人脸识别。 环境安装 在运行本项目之前,请确保已经安装了以下环境和库: - Python - PyCharm - dlib(需要 Cmake、Visual Basic、C++ 依赖环境) - opencv 库 - tkinter 库 - pymysql - PIL - threading - time 功能介绍 本项目具有以下功能: - 打开系统按钮:打开摄像头捕获人脸。 - 注册按钮:将人脸、学号、姓名信息存储到数据库中。 - 查看缺勤名单:将没有识别签到的学生学号和姓名导出到打开的名单界面。 - 是否开始训练:点击“是”按钮进行人脸模型的训练。 - 帮助按钮:查看使用软件的注意事项。 注意事项 在使用本项目之前,请注意以下事项: 1. 请先打开系统。 2. 注册时请对准人脸,光线充足。 3. 训练时禁止进行其他操作。 文件说明 本项目包含以下文件: - `recognition.py`:主文件。 - `db.py`:数据库文件。 - `help_tip.py`:帮助窗口文件。 - `precamera.py`:预处理文件。 - `late_name.py`:缺勤名单文件。 - `trained_knn_model.clf`:KNN 算法模型文件。 - `knn_examples` 文件夹:包含了训练集和测试集,仅供学习交流探讨使用。
下面是一个基于PythonOpenCVface_recognition库的简单人脸识别代码示例: ```python import cv2 import face_recognition # 加载已知的人脸图像和对应的名字 obama_image = face_recognition.load_image_file("obama.jpg") obama_face_encoding = face_recognition.face_encodings(obama_image)[0] biden_image = face_recognition.load_image_file("biden.jpg") biden_face_encoding = face_recognition.face_encodings(biden_image)[0] known_face_encodings = [ obama_face_encoding, biden_face_encoding ] known_face_names = [ "Barack Obama", "Joe Biden" ] # 打开摄像头 cap = cv2.VideoCapture(0) while True: # 读取一帧图像 ret, frame = cap.read() # 转换为RGB图像 rgb_frame = frame[:, :, ::-1] # 检测人脸 face_locations = face_recognition.face_locations(rgb_frame) face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) # 遍历每个检测到的人脸 for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): # 判断是否和已知人脸匹配 matches = face_recognition.compare_faces(known_face_encodings, face_encoding) name = "Unknown" # 如果匹配到了已知人脸,则获取对应的名字 if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index] # 在图像上绘制人脸矩形和名字 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1) # 显示图像 cv2.imshow('Video', frame) # 按下q键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头和窗口资源 cap.release() cv2.destroyAllWindows() ``` 注意,这个代码示例需要在已经安装了face_recognition库和OpenCV库的Python环境中运行,还需要把`obama.jpg`和`biden.jpg`两个已知人脸图像放在代码所在目录下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值