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

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

  • 相关阅读:
    基于alphalens对qlib的alpha158做单因子分析
    设置Google浏览器在点击网站时,在新页面打开
    AJAX 简介
    Docker的基础命令
    基于Python+Django的开药系统【源码+LW+PPT+部署讲解】
    java计算机毕业设计专业主任排课系统源码+数据库+系统+lw文档+mybatis+运行部署
    .NET 6 跨服务器联表查询, MySql、Oracle、SqlServer等相互联表
    Spring Framework 黑马程序员-学习笔记
    开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)
    给出用数字数组表示的一个非负整数,请对该整数加1。
  • 原文地址:https://blog.csdn.net/newlw/article/details/127047197