基于MTCNN的实时人脸检测方法及系统

发布于:2022-12-07 ⋅ 阅读:(416) ⋅ 点赞:(0)

目录

基于MTCNN的实时人脸检测方法及系统 II
目录 III
第1章 引言 1
1.1背景介绍与研究意义 1
1.2研究内容与目标 4
第2章 深度学习及MTCNN深度级联神经网络原理 5
2.1 深度学习简介 5
2.1.1 Proposal Network (P-Net)层 5
2.1.2 Refine Network (R-Net)层 5
2.1.3 Output Network (O-Net)层 6
2.2小结 6
第3章 人脸检测算法 7
3.1 人脸检测算法 7
3.1.1 面部分类: 7
3.1.2 边界框回归 7
3.1.3 面部地标定位 7
3.1.4 多源训练 8
3.2 小结 8
第4章 系统设计与实验结果分析 9
4.1系统框架设计 9
4.2前端界面设计 9
4.3系统实现 9
4.3.1 环境配置 9
4.3.2 前端界面实现 10
4.3.4功能逻辑实现 11
4.4实验步骤与分析 12
4.4.1 实验设置 12
4.4.2 数据集 12
4.4.3 评估指标 13
4.4.4 实验结果分析 14
4.4.4.1多种方法对比 14
4.4.4.2多种环境对比 14
4.5小结 17
结 论 18
参考文献 19
1.2研究内容与目标
本课题研究内容主要是基于级联神经网络优化人脸检测模型,提升人脸检测精度。一是在公开的大规模人脸数据集上训练人脸检测模型;二是采用三层级联神经网络提取特征和对损失函数进行优化。三是基于人脸检测实现的定制人脸检测系统。
本课题目标主要有两个:一方面是,在数据集上基于级联神经网络训练出一个好的人脸检测模型;另一方面是, 在Python上开发构建出一个人脸检测系统,实现对图片或视频中人脸进行实时人脸检测,并显示人脸置信度。

第2章 深度学习及MTCNN深度级联神经网络原理
2.1 深度学习简介
深度学习(Deep Learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行特征学习的算法。目前,深度学习结构已有数种,经典代表有深度神经网络、卷积神经网络、递归神经网络等。深度目前已经广泛应用于计算机视觉、自然语言处理、语音识别等领域,并取得了巨大的成果。2016年3月,AlphaGo的表现,展现了深度学习在围棋领域的重大突破。
2.1.1 Proposal Network (P-Net)层
该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。
系统框架决定系统开发、维护和扩展的效率。图4-1描述了整个人脸检测系统的框架设计,包括数据源、人脸检测、结果呈现三个模块,用户通过GUI界面进行交互。整个系统首先通过数据源获取图片信息,数据源来自摄像头、本地照片。人脸检测模块是本系统核心模块,将预训练的模型存储在系统中,本文转载自http://www.biyezuopin.vip/onews.asp?id=14877然后通过提取图片或者视频帧中的人脸特征,将结果呈现在GUI界面中。
4.2前端界面设计
系统的GUI设计采用Tkinter实现,主要分为两部分,一部分是图片检测模式,通过上传本地图片完成检测。另外一部分是摄像头检测模式,支持本地摄像头采集人脸信息并实时检测。

from tkinter import *
from tkinter import messagebox
from tkinter import simpledialog
from tkinter import filedialog
from PIL import Image, ImageTk
from test import oneImg
from test import openCma
import cv2
import os
Flag = True #控制摄像头的变量
capture = cv2.VideoCapture(0)#摄像头对象作为全局变量会更快些


def ui_process():
    root =Tk()
    root.title("人脸检测系统")
    root.geometry("1000x850")

    tempImg=Image.open("D:/working/tensorflow_mtcnn_zip/tensorflow-MTCNN-master/bg.jpg")
    tempImg=tempImg.resize((1000,900))
    bgImg=ImageTk.PhotoImage(tempImg)
    theLabel = Label(root,image=bgImg,compound=CENTER)
    theLabel.pack()

#标签
    L_titile = Label(root,text='基于MTCNN的实时人脸检测系统',)
    L_titile.config(font='Helvetica -15 bold',fg='blue')
    L_titile.place(x=150,y=20,anchor="center")
    L_author = Label(root, text='作者:刘佳昇')
    L_author.config(font='Helvetica -10 bold')
    L_author.place(x=920,y=830)
    S_title = Label(root,text='图片识别模式')
    S_title.config(font='Helvetica -20 bold',fg='red')
    S_title.place(x=40,y=50)
    S_title = Label(root, text='摄像头实时识别模式')
    S_title.config(font='Helvetica -20 bold', fg='red')
    S_title.place(x=40, y=450)
    S_title = Label(root, text='图片识别结果')
    S_title.config(font='Helvetica -15 bold', fg='red')
    S_title.place(x=740, y=100)

#图区
    canvas = Canvas(root, bd=2, relief=SUNKEN)
    canvas.place(x=40,y=140)
    resultCanvas = Canvas(root,bd=2,relief=SUNKEN)
    resultCanvas.place(x=600,y=140)
    #摄像头
    cmaCanvas = Canvas(root,bd=2,relief=SUNKEN,height=350,width=580)
    cmaCanvas.place(x=400,y=470)



#按钮

    B_NO1 = Button(root, text="打开一张图片",command=lambda :OpenFile(canvas,resultCanvas))
    B_NO1.place(x=40, y=100)
    B_NO2 = Button(root, text="打开输出文件夹", command=lambda: openOutPut())
    B_NO2.place(x=600, y=100)
    B_OpenCma = Button(root,text="打开摄像头",command=lambda :openGuiCma(cmaCanvas,root))
    B_OpenCma.place(x=40,y=500)
    B_OpenCma = Button(root, text="关闭摄像头", command=lambda: closeGuiCma())
    B_OpenCma.place(x=140, y=500)


#菜单栏
    menubar = Menu(root)
    filemenu = Menu(menubar, tearoff=0)
    filemenu.add_command(label="Open", command=lambda :openOutPut())
    mainloop()



def openOutPut():
    os.system("start explorer D:\working\\tensorflow_mtcnn_zip\\tensorflow-MTCNN-master\\output")




#文件操作的对话框
def OpenFile(canvas,resultCanvas):
    File = filedialog.askopenfilename(title='打开图片', filetypes=[ ('All Files', '*')])
    print(type(File))
    # resultImg = ImageTk.PhotoImage(Image.fromarray(oneImg(File).astype('uint8')).convert('RGB')) #这个转换方式会导致颜色异常
    resultImg = ImageTk.PhotoImage(Image.fromarray(cv2.cvtColor(oneImg(File),cv2.COLOR_BGR2RGB)))  #这里需要把cv的图像格式转换成PIL.img
    filename = Image.open(File)
    # filename.resize((3500,300))
    filename = ImageTk.PhotoImage(filename)
    print(type(Image.open(File)))
    canvas.image = filename  # <--- keep reference of your image
    canvas.create_image(0, 0, anchor='nw', image=filename)
    resultCanvas.image = resultImg
    resultCanvas.create_image(0,0,anchor='nw',image=resultImg)
    print(File)


def closeGuiCma():
    global Flag
    print(Flag)
    Flag = False


def openGuiCma(resultCanvas,root):
    # 摄像头
    if(messagebox.askokcancel('Python Tkinter', '确认打开摄像头?')==True):
        global Flag
        Flag=True
        while Flag==True:
            ref, frame = capture.read()
            cvimage = cv2.cvtColor(openCma(frame), cv2.COLOR_BGR2RGBA)
            pilImage = Image.fromarray(cvimage)
            tkImage = ImageTk.PhotoImage(image=pilImage)
            resultCanvas.create_image(0, 0, anchor='nw', image=tkImage)
            root.update()
            root.after(100)



if __name__ == "__main__":
    print("开始")
    ui_process()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到