基于深度学习的单人步态识别系统(目前数据集大小17人,准确率99.98%)

简介: 基于深度学习的单人步态识别系统(目前数据集大小17人,准确率99.98%)

一、数据预处理


       a、步态轮廓图


               先使用Opencv对采集到的视频进行处理,得到一帧帧图像,而后通过背景减除法(


               cv2.bgsegm.createBackgroundSubtractorMOG()

               )从一组图像中得到图中人的轮廓图:


1dc618a0ed9580ce8bfa6facb208c08f.png

5d4c6812c8535adbb050f4ddf2e1bce8.png


核心代码:


def from_video_get_img(video_path):
    print(video_path)
    print(video_path + ' Is Loading...')
    cap = cv2.VideoCapture(video_path)
    if cap.isOpened():
        # best>MOG
        fgbg = cv2.bgsegm.createBackgroundSubtractorMOG()
        origrial_path_list = []
        id = 0
        flag = True
        while flag:
            ret, frame = cap.read()
            if ret:
                fgmask = fgbg.apply(frame)
                save_file_name = video_path.split('/')[-1].split('.')[0]
                save_origrial_path = 'Package/Origrial/' + save_file_name + '/'
                save_normalPic_path = 'Package/Normal/' + save_file_name + '/'
                if not os.path.exists(save_origrial_path):
                    os.makedirs(save_origrial_path)
                if not os.path.exists(save_normalPic_path):
                    os.makedirs(save_normalPic_path)
                a, b = fgmask.shape
                origrial_path_list.append(fgmask)
                #cv2.imwrite(save_origrial_path+format_id(id)+'.png', fgmask)
                #cv2.imwrite(save_normalPic_path+format_id(id)+'.png', frame)
                id += 1
                cv2.imshow('frame', fgmask)
                cv2.waitKey(1)
            else:
                break
    cap.release()
    cv2.destroyAllWindows()


       b、头部轮廓图


               在得到人体轮廓后,我们通过分析数据集可以发现每一个人的头部轮廓差距非常明显!下面几张图片可以说明:


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


               实现方式:


                       1、从人体轮廓图中把人给裁剪出来,效果图如下:


1dc618a0ed9580ce8bfa6facb208c08f.png

                       2、从裁剪的图片中二次裁剪出人的头部轮廓


  核心代码:


def get_cImg(path, cut_path, size):
    '''
    剪切图片
    :param path: 输入图片路径
    :param cut_path: 剪切图片后的输出路径
    :param size: 要剪切的图片大小
    :return:
    '''
    dirs_list = os.listdir(path)
    for dir in dirs_list:
        files_list = os.listdir(os.path.join(path, dir))
        firstId, lastId = 10000000000000000, 0
        for pic in files_list:
            firstId = min(int(pic.split('.')[0]), firstId)
            lastId = max(int(pic.split('.')[0]), lastId)
        midId = (firstId+lastId)>>1
        for id in range(midId-30, midId+30):
            img_name = str(id) + '.png'
            img = Image.open(os.path.join(path, dir, img_name))
            image, flag = cut(img)
            goal_dir = os.path.join(cut_path, dir)
            create_file(goal_dir)
            if not flag:
                Image.fromarray(image).convert('L').resize((size, size)).save(os.path.join(goal_dir, img_name))
        print(dir + ' is Cuted!')
def cut(image):
    '''
    通过找到人的最小最大高度与宽度把人的轮廓分割出来,、
    因为原始轮廓图为二值图,因此头顶为将二值图像列相加后,形成一列后第一个像素值不为0的索引。
    同理脚底为形成一列后最后一个像素值不为0的索引。
    人的宽度也同理。
    :param image: 需要裁剪的图片 N*M的矩阵
    :return: temp: 裁剪后的图片 size*size的矩阵。flag:是否是符合要求的图片
    '''
    image = np.array(image)
    # 找到人的最小最大高度与宽度
    height_min = (image.sum(axis=1) != 0).argmax()
    height_max = ((image.sum(axis=1) != 0).cumsum()).argmax()
    width_min = (image.sum(axis=0) != 0).argmax()
    width_max = ((image.sum(axis=0) != 0).cumsum()).argmax()
    head_top = image[height_min, :].argmax()
    # 设置切割后图片的大小,为size*size,因为人的高一般都会大于宽
    size = height_max - height_min
    temp = np.zeros((size, size))
    # 将width_max-width_min(宽)乘height_max-height_min(高,szie)的人的轮廓图,放在size*size的图片中央
    # l = (width_max-width_min)//2
    # r = width_max-width_min-l
    # 以头为中心,将width_max-width_min(宽)乘height_max-height_min(高,size)的人的轮廓图,放在size*size的图片中央
    l1 = head_top-width_min
    r1 = width_max-head_top
    # 若宽大于高,或头的左侧或右侧身子比要生成图片的一般要大。则此图片为不符合要求的图片
    flag = False
    if size <= width_max-width_min or size//2 < r1 or size//2 < l1:
        flag = True
        return temp, flag
    # centroid = np.array([(width_max+width_min)/2,(height_max+height_min)/2],dtype='int')
    temp[:, (size//2-l1):(size//2+r1)] = image[height_min:height_max, width_min:width_max]
    return temp, flag
def get_humanHead(root_path):
    save_img_path = 'DetectDataSetsget\Head'
    create_file(save_img_path)
    for dir_name in os.listdir(root_path):
        src_dir = os.path.join(root_path, dir_name)
        #print(src_dir)
        dst_dir = src_dir.replace(root_path, save_img_path)
        #print(dst_dir)
        create_file(dst_dir)
        for img_name in os.listdir(src_dir):
            img = cv.imread(os.path.join(src_dir, img_name))
            x, y, w, h = 50, 0, 120, 40
            croped_img = img[y: y+h, x: x+w]
            cv.imwrite(os.path.join(dst_dir, img_name), croped_img)
            cv.waitKey(0)


       c、骨架图


5d4c6812c8535adbb050f4ddf2e1bce8.png


二、提取步态特征


       提取的特征分为角度特征、下肢特征和头部特征;


        a、角度特征


               实现概述:使用姿态估计算法得到人体各个关节点的坐标,并通过这些坐标信息从一系列图像中提取到角度的变化特征。


1dc618a0ed9580ce8bfa6facb208c08f.png


        b、步态特征


               实现概述:


       1、将步态轮廓图投入GaitSet网络训练,得到泛化模型。


       2、使用图像处理算法对一系列步态轮廓图处理得到人体双腿和双手的摆动周期,上下起伏的波动,和左右增缩的波动


        c、头部特征


               实现概述:使用mobilent轻量级卷积神经网络做图像识别,把预测目标的头部特征数据放入模型中训练,最后通过模型预测的分数作为参考做身份识别。


三、特征匹配


       a.特征模型(头部轮廓)


               使用之前训练好的图像识别网络进行对未知人物的识别,得到他与数据库中已经录入的人物信息的相似程度,选取相似程度最大的人物,提取出他的标签。


       b.特征数据(下肢特征,角度特征)


               利用特征模型中提取出来的标签,在特征数据库中依照标签进行哈希匹配,将时间复杂度从O(n)下降到O(1)。


四、搭建GUI可视化界面


5d4c6812c8535adbb050f4ddf2e1bce8.png


         功能一、录入数据

             

1dc618a0ed9580ce8bfa6facb208c08f.png


          功能二、匹配检测


5d4c6812c8535adbb050f4ddf2e1bce8.png46a9d80a6e05e4e3b19d57a0ee70bcdf.png66ba272a0bfc97be54a5fa679e3d5482.png88b9988b40447cb37c7e3c492d49867f.png

相关文章
|
1月前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【2月更文挑战第29天】 随着人工智能技术的飞速发展,深度学习作为其核心分支之一,在图像识别领域取得了显著成就。本文聚焦于探讨深度学习技术在自动驾驶系统中的应用,重点分析了卷积神经网络(CNN)在车辆环境感知中的关键作用。文章首先概述了深度学习的基础理论和关键技术,随后详细阐述了CNN如何通过多层次特征提取实现精确的图像分析,以及这些技术如何帮助自动驾驶系统实时理解复杂道路情况。最后,文章讨论了当前技术面临的挑战与未来的发展方向,为相关领域的研究提供参考。
|
1月前
|
机器学习/深度学习 数据采集 监控
基于深度学习的图像识别技术在智能监控系统中的应用
随着人工智能技术的飞速发展,深度学习作为其核心分支之一,在图像处理和分析领域取得了显著成就。本文将探讨一种基于深度学习的图像识别技术,并分析其在智能监控系统中的应用。该技术通过构建复杂的神经网络模型,实现了对监控视频中异常行为的准确识别与实时反应。实验结果表明,与传统算法相比,该方法在准确率和处理速度上都有明显提升,有效增强了监控系统的智能化水平。
18 3
|
1月前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【2月更文挑战第31天】 随着人工智能技术的飞速发展,深度学习已成为推动自动驾驶系统革新的核心动力之一。特别是在图像识别领域,深度学习模型已经显示出了卓越的性能和广阔的应用前景。本文旨在探讨基于深度学习的图像识别技术如何被集成进自动驾驶系统中,以及这一集成对提高系统准确性、可靠性的影响。我们将详细分析卷积神经网络(CNN)等先进深度学习架构在处理车载摄像头捕获的复杂交通场景中的作用,并讨论数据增强、迁移学习等策略在提升模型泛化能力方面的重要性。此外,我们还将评估这些技术在真实世界条件下的性能及其面临的挑战。
|
2天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第24天】 随着人工智能技术的飞速发展,深度学习在图像处理领域取得了显著成果,特别是在自动驾驶系统中的应用。本文首先介绍了深度学习的基本概念和关键技术,然后详细阐述了卷积神经网络(CNN)在图像识别中的优势和应用,最后探讨了深度学习在自动驾驶系统中的挑战和未来发展趋势。
|
4天前
|
机器学习/深度学习 数据采集 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第21天】 本文章深入探讨了深度学习技术在自动驾驶车辆图像识别领域的应用。不同于传统的摘要方式,本文将直接点出研究的核心价值和实际应用成果。我们专注于卷积神经网络(CNN)的创新设计,其在复杂道路场景下的行人和障碍物检测中的高效表现,以及这些技术如何整合到自动驾驶系统中以增强安全性和可靠性。通过实验验证,我们的模型在公开数据集上达到了行业领先水平的准确率,并且在真实世界的测试场景中展现了卓越的泛化能力。
|
6天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用研究
【4月更文挑战第20天】 本研究聚焦于深度学习技术在图像识别领域的应用,并探讨其在自动驾驶系统中的实际效用。文章首先回顾了深度学习与图像处理技术的基础知识,随后详细分析了卷积神经网络(CNN)在车辆环境感知中的关键作用。通过实验数据对比分析,本文验证了所提出算法在提高自动驾驶车辆对周围环境的识别准确性和实时性方面的有效性。最后,讨论了目前技术的局限性及未来可能的研究方向,旨在为进一步的技术突破提供参考。
|
7天前
|
机器学习/深度学习 传感器 人工智能
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第18天】 随着人工智能的快速发展,深度学习技术在图像处理和识别领域取得了显著进展。特别是在自动驾驶系统中,基于深度学习的图像识别技术已成为关键技术之一。本文将探讨深度学习在自动驾驶系统中的应用,重点关注卷积神经网络(CNN)和循环神经网络(RNN)在车辆检测、行人识别和交通标志识别等方面的应用。通过对比传统图像识别方法,我们将展示深度学习技术如何提高自动驾驶系统的准确性和鲁棒性。
|
8天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第18天】 随着人工智能的快速发展,特别是深度学习技术的突破性进步,图像识别已成为自动驾驶领域的核心组成部分。本文旨在探讨基于深度学习的图像识别技术如何优化自动驾驶系统的性能,并分析其在实时交通场景中处理复杂视觉信息的能力。文中将介绍几种主要的深度学习模型,包括卷积神经网络(CNN)和递归神经网络(RNN),以及它们在图像分类、目标检测和语义分割中的应用。同时,文章还将讨论当前技术面临的挑战和未来的发展方向。
|
17天前
|
机器学习/深度学习 自动驾驶 算法
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第9天】 随着人工智能技术的不断进步,深度学习已成为推动多个领域革新的核心动力。特别是在图像识别领域,通过模仿人类视觉系统的处理机制,深度学习模型已展现出超越传统算法的性能。本文将探讨深度学习在图像识别中的关键技术,并重点分析这些技术如何被应用于自动驾驶系统中以实现车辆环境的实时理解与决策。我们将从卷积神经网络(CNN)的基础结构出发,讨论其在特征提取、物体检测和分类中的作用,以及如何通过增强学习和迁移学习等策略来优化模型性能。此外,我们还将评估当前技术面临的挑战,如数据集偏差、实时处理需求以及模型泛化能力,并提出可能的解决方案。
11 1
|
18天前
|
机器学习/深度学习 并行计算 监控
基于深度学习的电动自行车头盔佩戴检测系统
基于深度学习的电动自行车头盔佩戴检测系统
25 0