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

目录

基于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()

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值