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


    1.安装包依赖

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

    1. pip install opencv-python
    2. pip install face-recognition

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

    2.代码示例

    1. import os
    2. import cv2
    3. import face_recognition
    4. import tkinter as tk
    5. import tkinter.filedialog
    6. from PIL import Image,ImageTk
    7. #选择一个图片并显示在界面上
    8. def choosepic():
    9. choosepath = tkinter.filedialog.askopenfilename()
    10. path.set(choosepath)
    11. img_open = Image.open(entry.get()).resize((530,750))
    12. img = ImageTk.PhotoImage(img_open)
    13. lableShowImage.config(image=img)
    14. lableShowImage.image = img
    15. lableShowImage.place(x=30, y=70, width=530, height=750)
    16. showHandledImg(choosepath)
    17. #处理人脸特征
    18. def handleFacialFeatures(image, face_marks):
    19. for marks_dict in face_marks:
    20. for marks_key in marks_dict.keys():
    21. for point in marks_dict[marks_key]:
    22. cv2.circle(image, point, 2, (0,0,255), -1)
    23. return image
    24. #显示处理后的照片
    25. def showHandledImg(choosepath):
    26. frame=cv2.imread(choosepath)
    27. frame=cv2.resize(src=frame,dsize=(530,750))
    28. #转成RGB灰度图
    29. frameRGB=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2RGB)
    30. #获取人脸关键点
    31. face_marks = face_recognition.face_landmarks(frameRGB, None, "large")
    32. #返回处理后的结果
    33. imgHandledArr = handleFacialFeatures(frame, face_marks)
    34. #将处理后的照片数组转成图片
    35. imgHandled = Image.fromarray(imgHandledArr)
    36. img = ImageTk.PhotoImage(imgHandled)
    37. lableShowImage2.config(image=img)
    38. lableShowImage2.image = img
    39. lableShowImage2.place(x=630, y=70, width=530, height=750)
    40. if __name__ == '__main__':
    41. app = tk.Tk()
    42. #窗体标题
    43. app.title("show pictue")
    44. #窗体大小
    45. app.geometry("1200x900+200+50")
    46. path = tk.StringVar()
    47. #将路径展示框只读
    48. entry = tk.Entry(app, state='readonly', text=path,width = 100)
    49. entry.pack()
    50. #显示原图
    51. lableShowImage = tk.Label(app)
    52. lableShowImage.pack()
    53. #显示处理后的效果图
    54. lableShowImage2 = tk.Label(app)
    55. lableShowImage2.pack()
    56. #点击选择图片触发choosepic()方法
    57. buttonSelImage = tk.Button(app, text='choose picture', command=choosepic)
    58. buttonSelImage.pack()
    59. 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.实现效果 

     

     

     

  • 相关阅读:
    CAD for JS:VectorDraw web library 10.1004.1 Crack
    containerd 源码分析:启动注册流程
    Elasticsearch 开放 inference API 增加了对 Azure OpenAI 嵌入的支持
    32FLASH闪存
    java基于springboot +vue的图书馆图书借阅系统
    您的Vue3学习指南,请查收!!!
    Python的Pandas库(一)基础使用
    SQL库的相关操作
    中位数C++题解
    『互联网架构』kafka发展历程和安装部署
  • 原文地址:https://blog.csdn.net/qq_17486399/article/details/126666919