基于python的视频中的人脸识别系统设计与实现(代码片段)

biyezuopin biyezuopin     2023-04-04     154

关键词:

目录
一:问题描述 2
二:实现思路 2
2.1 切换点 2
2.1.2 镜头切换点 3
2.1.2 音频切换点。 3
2.2 嘉宾识别 = 人脸识别 & 声纹识别 4
2.2.1 人脸识别 4
2.2.2 声纹识别 5
三:实验环境 5
四:分帧 6
4.1 直方图计算法 6
4.2 图像指纹:hash 7
4.3 SSIM法 8
4.4 实验输出及结果 8
五:人脸识别 10
5.1 数据集的构建 10
5.2 训练集和测试集的构建 12
5.3 数据的处理 15
5.4 人脸识别的历程 17
5.4.1 早期 模板匹配技术 17
5.4.2 中期 voila-jonesVJ框架 17
5.4.3 现在 深度学习 17
5.5 配置神经网络 17
5.5.1 CNN 17
5.5.3 VGG 20
5.5.3 定义损失函数和准确率 21
5.5.4 定义优化方法 22
5.6 训练网络和保存模型 22
5.6.1创建Executor 22
5.6.2展示模型训练曲线 23
5.6.3训练并保存模型 23
5.7 模型评估 25
5.7.1CNN 25
5.7.2VGG 26
5.8 对视频进行识别并且进行可视化输出 27
5.8.1 对视频进行识别 27
5.8.2 将结果可视化输出 30
5.9 实验结果及分析 32
六:音频识别 34
6.1 分段式声纹识别 34
6.2 说话人日志 35
6.2.1 说话人日志原理 35
6.2.2 说话人日志结果分析 36
6.3 数据可视化 37
七:代码查看方式 37
7.1 视频识别: 37
7.2 音频识别: 37
九:参考文献 37

二:实现思路
一开始拿到这个题目是有点懵的,因为我们组里都是信安,并没有学习过机器学习类似的课程,但是这道题目是一定要用到机器学习。再加上这道题老师并没有给出参考代码,所以可以说是完全是“从头开始”。不过功夫不负有心人并且老师给了我们最后一个选题充裕的时间,所以我们才可以将其做出来。
2.1 切换点
而根据问题的描述:根据声音或者视频,给出镜头的切换点,按照时间段给出时间起点和终点。
我们所理解的切换点为两种:镜头切换点和音频切换点。
2.1.2 镜头切换点
对于镜头切换点:对于这个视频来说,可以很明显的看到这个视频的拍摄并不是一个机位拍摄的,而是多机位进行拍摄。每个机位对着一个嘉宾或者主持人。如下图所示:

所以我们想到如果说我们可以找到这个视频的镜头切换点或者说剪辑点,对于一个视频而言后期剪辑会将不同机位拍摄的视频剪辑在一起,而这个剪辑点是很好找的,所以只要找到这视频的剪辑点就相当于找到了这个视频的镜头切换点,就可以将一段视频分段,分成一段只有一个主持人的样子,并且将每一段所对应的时间记录下来生成一个列表,这样就可以达到选题给出的要求。
至于如何找这个剪辑点在之后的第三段:分帧中会提到,这里就不赘述了。
2.1.2 音频切换点。
对比寻找视频切换点,音频切换点就显得不是友好了。
这是我们用来测试的波形图
对于这段音频,当一个人停止说话时就是波谷,然后后面一个人又接话这样就可以判断音频的切换点。
虽然说理论上这样是没有错的,但是实际实现上是有很多纰漏的:当一个人说完了一句话,其实就有停顿,这个时候如果说时音频切换点的话那么一段视频中就有很多很多个切换点,如上图,本文转载自http://www.biyezuopin.vip/onews.asp?id=14818其实里面实际的音频切换点没有几个,但是可以观察到波谷有二十来个左右,所以这种方法一开始就被我们摒弃了,但是不无参考价值。
对于这个切换点我们给出了两种方案:
1:设定相应的步长,分块进行声纹识别,得出说话人队列。
2:说话人日志(Speaker Diarization):基于深度学习的说话人日志,通过深度学习的方法,从训练数据中学习语音和说话人的特征,从而实现说话人“谁在什么时候说话”的目标。
2.2 嘉宾识别 = 人脸识别 & 声纹识别
2.2.1 人脸识别
对于人脸识别这方面,现在技术上已经做的很发达了。比如说图书馆和宿舍用的人脸识别系统:可以说秒识别了。而且识别准确率特别高。
我们在这里先假设我们的人脸识别准确率可以达到90%以上,实际上我们也达到了90%以上。但是在这里我们假设人脸识别是成功的,是可移植的。如果说分帧做好了的话,对于人脸识别的话我们就可以在一段视频中取多帧图片,对其进行人脸识别,然后取匹配结果中的最匹配的那一项作为结果,成为那个片段的标签用来标记这个片段中是哪个嘉宾。
这样我们就可以将嘉宾识别出来。
具体的人脸识别是怎么样实现的之后会有详细的介绍。
2.2.2 声纹识别
对于声纹识别这方面,通过对市面上的调研,声纹识别的应用场景并没有人脸识别广泛。所以对于声纹识别这方面的实现来说,并不是一件简单的事情。
所以对于声纹识别这个部分,我们也像人脸识别一样假设,我们实现的声纹识别准确率可以达到90%以上,(实际上可能最高只有80%)。
通过上面介绍的两种找音频切换点的方案:这样也可以像人脸识别一样得到一项列表,也可以将嘉宾实现出来。
具体的声纹识别是怎么样实现的在之后会有所涉及。
三:实验环境
操作系统:Windows 10 pro
编译环境: Python 3.7.4 + Pychram 2019.3 + Jupyter Notebook
视频播放器:potplayer Mini

from pyaudio import PyAudio, paInt16
import numpy as np
from datetime import datetime
import wave

class recoder:
    NUM_SAMPLES = 2000      #pyaudio内置缓冲大小
    SAMPLING_RATE = 8000    #取样频率
    LEVEL = 500         #声音保存的阈值
    COUNT_NUM = 20      #NUM_SAMPLES个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音
    SAVE_LENGTH = 8         #声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES 个取样
    TIME_COUNT = 60     #录音时间,单位s

    Voice_String = []



    def savewav(self,filename):
        wf = wave.open(filename, 'wb')
        wf.setnchannels(1)
        wf.setsampwidth(2)
        wf.setframerate(self.SAMPLING_RATE)
        wf.writeframes(np.array(self.Voice_String).tostring())
        # wf.writeframes(self.Voice_String.decode())
        wf.close()

    def recoder(self):
        pa = PyAudio()
        stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True,
            frames_per_buffer=self.NUM_SAMPLES)
        save_count = 0
        save_buffer = []
        time_count = self.TIME_COUNT

        while True:
            time_count -= 1
            # print time_count
            # 读入NUM_SAMPLES个取样
            string_audio_data = stream.read(self.NUM_SAMPLES)
            # 将读入的数据转换为数组
            audio_data = np.fromstring(string_audio_data, dtype=np.short)
            # 计算大于LEVEL的取样的个数
            large_sample_count = np.sum( audio_data > self.LEVEL )
            print(np.max(audio_data))
            # 如果个数大于COUNT_NUM,则至少保存SAVE_LENGTH个块
            if large_sample_count > self.COUNT_NUM:
                save_count = self.SAVE_LENGTH
            else:
                save_count -= 1

            if save_count < 0:
                save_count = 0

            if save_count > 0 :
            # 将要保存的数据存放到save_buffer中
                #print  save_count > 0 and time_count >0
                save_buffer.append( string_audio_data )
            else:
            #print save_buffer
            # 将save_buffer中的数据写入WAV文件,WAV文件的文件名是保存的时刻
                #print "debug"
                if len(save_buffer) > 0 :
                    self.Voice_String = save_buffer
                    save_buffer = []
                    print("Recode a piece of  voice successfully!")
                    return True
            if time_count==0:
                if len(save_buffer)>0:
                    self.Voice_String = save_buffer
                    save_buffer = []
                    print("Recode a piece of  voice successfully!")
                    return True
                else:
                    return False

if __name__ == "__main__":
    r = recoder()
    r.recoder()
    r.savewav("test.wav")





















基于python的人脸互换系统设计与实现(代码片段)

数据可视化FinalProject目录数据可视化FinalProject1项目介绍11.1.人脸互换(faceswap)21.2人脸融合(facemorph)21.3本征脸(eigenface)2算法结构与处理过程22.1人脸变换22.1.1人脸关键点检测22.1.2计算凸包32.1.3德劳内&#x... 查看详情

图像处理——基于机器视觉技术的人脸在线识别系统设计(代码片段)

  基于机器视觉技术的人脸在线识别系统设计  本设计研究人脸检测与识别技术,在基于机器视觉技术上,构建了一套人脸在线检测识别系统,系统将由以下几个部分构成:计算机图像预处理、数据收集和预处理、人脸... 查看详情

1000个大数据/人工智能毕设选题推荐

...毕业设计题目选择方向。大数据/人工智能毕设选题:基于社交大数据的用户画像系统设计与实现基于TF-IDF和朴素贝叶斯方法的海量文本分类研究基于卷积神经网络的图像修复系统设计与实现智慧校园语音交互系统的设计与实... 查看详情

人脸识别完整项目实战:完整项目案例运行演示

...节的代码设计、运行演示和执行结果输出;模型训练篇:基于人脸识别区域检测和人俩识别特征点标定两个应用场景,介绍数据样本采集、算法模型训练和算法模型测试的过程,让大家都人脸识别有一个完整的直观的认识;算法... 查看详情

python基于tensorflow的水果识别软件设计与实现.rar(论文+项目源码+视频演示)(代码片段)

第1章主要技术和工具介绍…21.1TensorFlow…21.2微信小程序…21.3Node.js…21.4VantWeapp…21.5MySql数据库…31.6前后端分离技术…3第2章需求分析…52.1系统功能需求分析…52.1.1需求概述…52.1.2用例分析…62.2系统业务流程分析…7第3章系统设... 查看详情

python基于opencv的人脸表情识别系统[源码&部署教程](代码片段)

...别技术的发展方向。2.识别效果展示3.识别视频演示Python基于OpenCV的人脸表情识别系统[源码&部署教程]_哔哩哔哩_bilibili4.实现方法分析人脸表情识别中需要运用人脸检测技术,识别人脸之后,再对表情图像做预处理&#x... 查看详情

camera基于深度学习的车牌检测与识别系统实现(课程设计)

基于深度学习的车牌检测与识别系统实现(课程设计)代码+数据集下载地址:下载地址用python3+opencv3做的中国车牌识别,包括算法和客户端界面,只有2个文件,surface.py是界面代码,predict.py是算法代码,界面不是重点所以用tkint... 查看详情

基于c++qt设计的人脸考勤打卡签到系统(代码片段)

...较慢等问题,利用华为云的人脸识别技术实现了一种基于QT框架设计的在线考勤系统。该系统可大大提高考勤效率,满足各类场环境景下的考勤需求,具有识别度高、检测速度快、操作简单的特点,能够为用户提... 查看详情

基于opencv的人脸识别自助商店(源码&部署视频)(代码片段)

...人脸并截取。并输入编号和余额。2.视频演示[项目分享]基于OpenCV的人脸识别自助商店(源码&部署视频)_哔哩哔哩_bilibili3.效果展示4.第三方包的安装opencv的安装,输入:pipinstallopencv-python。注:numpy与OpenC... 查看详情

linux下基于gtk人脸识别界面设计

Linux下基于GTK人脸识别界面设计1.人脸识别简介    人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而... 查看详情

基于面部识别的日志系统的设计与实现

基于面部识别的日志系统的设计与实现@(GUI程序开发)[PyQt,信号,面部识别,多线程,媒体播放,opencv][TOC]需求与设计使用面部识别技术,识别进出重要通道的人员,并对人员进出动作进行记录。在人员进出时,在摄像机前采集画面,... 查看详情

人脸表情识别系统的设计与实现(含ui界面,有完整代码)

人脸表情识别系统的设计与实现(含UI界面,有完整代码)这是之前本科做的毕设,当时使用的是keras搭建了一个简单的神经网络作为入门实现了在fer2013人脸表情数据集上的表情分类,并移植到了树莓派上,但是当时... 查看详情

毕业设计/matlab系列基于pca和bp神经网络的人脸识别系统(基于ar人脸库)

...lab代码前言在大学毕业设计的时候,在毕业设计中实现了基于PCA和BP神经网络的人脸识别系统,采用matlab语言,采用复杂的AR人脸库,准确率达到了75%以上。AR人脸库的人脸存在光线变化和遮挡,相对ORL人脸库更加复杂。注:需要... 查看详情

毕业设计/matlab系列基于pca和bp神经网络的人脸识别系统(基于ar人脸库)

...lab代码前言在大学毕业设计的时候,在毕业设计中实现了基于PCA和BP神经网络的人脸识别系统,采用matlab语言,采用复杂的AR人脸库,准确率达到了75%以上。AR人脸库的人脸存在光线变化和遮挡,相对ORL人脸库更加复杂。注:需要... 查看详情

人脸表情识别系统介绍——上篇(python实现,含ui界面及完整代码)

摘要:这篇博文介绍基于深度卷积神经网络实现的人脸表情识别系统,系统程序由Keras,OpenCv,PyQt5的库实现,训练测试集采用fer2013表情库。如图系统可通过摄像头获取实时画面并识别其中的人脸表情,也可以通过读取图片识别,... 查看详情

基于qt设计的人脸识别门禁系统(录入识别对比删除)(代码片段)

一、前言随着现代科技的不断发展,现在的中国已经迈入5G时代,人工智能技术也正逐步广泛运用到了各行各业中,尤其人脸识别技术,已在各大行业中广泛使用。人脸识别门禁系统,可以防止陌生人尾随进入... 查看详情

基于opencv的人脸识别,翻车了居然识别错误。(代码片段)

前言我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,人脸解锁手机。人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多... 查看详情

python基于opencv+face_recognition实现人脸捕捉与人脸识别(照片对比)(代码片段)

1.安装包依赖与上篇通过摄像头动态识别人脸一样,先下载好opencv-python、face-recognition,这里因为使用的是照片对比的方式,特意使用tkinter画了一个简单的GUI方便操作。在python3以上版本tkinter是环境自带的,所以这... 查看详情