从视频中获取发丝都能看见的人体步态轮廓图

简介: 从视频中获取发丝都能看见的人体步态轮廓图

学习前言


        最近在研究步态识别,复现了相关的论文算法:比较火的GaitSet等,也从网上下载了中科大开源的数据集CASIA-B进行训练,当我自己制作了视频数据集之后,却不知道怎么转换为CASIA-B中一样的二值人体轮廓图,网上告知的是用实例分割办法,我尝试使用Mask-RCNN搭建了实例分割平台,并且进行了测试,最终的效果却非常的不尽人意:转换出来的二值轮廓图轮廓模糊不清晰,完全无法与05年的CASIA-B比较,更别说更新的数据集了。深度学习这个方法行不通之后,我把目光放在了机器学习,最后发现了一个非常棒的办法:背景减除法。


我所做的工作


在这过程中,我使用了以下方法进行了实验:


· ❥ Mask-RCNN实例分割、


· ❥ BackgroundSubtractorCNT、


· ❥ BackgroundSubtractorGMG、


· ❥ BackgroundSubtractorGSOC、


· ❥ BackgroundSubtractorLSBP、


· ❥ BackgroundSubtractorMOG、


· ❥ BackgroundSubtractorMOG2、


· ❥ BackgroundSubtractorKNN


最终实验结果表明,对于人体轮廓图的提取,表现效果最好的是BackgroundSubtractorMOG。


先附上一张效果动态图:

20191105100746502.gif

       可以看到,效果非常的nice!实际上如果是画中的人头发够飘逸,我们甚至可以看到发丝的飘动! 警告:拍摄的摄像头不可以动!具体原因是因为背景减除法的原理就是把不动的东西删掉!


实现代码


       大家看到这里,会不会觉得如果效果和博主说的一样好的话,那代码是不是非常复杂?其实不用,在此感谢方便的OpenCv,只需要简单的一个调用。就可以实现我上述的功能!


提醒一句:上述的Opencv是opencv_contrib!


       由于机器学习的这个代码有个缺陷就是前面几张乃至十几张效果有时候会非常不好,所以我们只选用中间30%到70%的质量比较高的图片。(当然这个范围也可以手动调整)


import os.path
import cv2
# ---------------------------
def from_video_get_img(video_path):
    print(video_path)
    print(video_path + ' Is Loading...')
    # 创建存放结果图片的文件
    save_file_name = video_path.split('/')[-1].split('.')[0]
    save_fgmask_path = 'Package/Fgmask/' + save_file_name + '/'
    if not os.path.exists(save_fgmask_path):
        os.makedirs(save_fgmask_path)
    # 读取视频
    cap = cv2.VideoCapture(video_path)
    if cap.isOpened():
        # best>MOG
        fgbg = cv2.bgsegm.createBackgroundSubtractorMOG()
        fgmask_img_list = []
        id = 0
        flag = True
        while flag:
            ret, frame = cap.read()
            if ret:
                fgmask = fgbg.apply(frame)
                fgmask_img_list.append(fgmask)
                id += 1
                cv2.imshow('frame', fgmask)
                cv2.waitKey(1)
            else:
                break
    cap.release()
    cv2.destroyAllWindows()
    # 写入中间30%-70%的图片张以确保质量
    length = len(fgmask_img_list)
    for i in range(int(length*0.3), int(length*0.7)+1):
        cv2.imwrite(save_fgmask_path+str(i)+'.png', fgmask_img_list[i])
if __name__ == "__main__":
    # 在此强调 video 一定要改名为:名字代号_走路状态_序号.视频类型 的格式,不然程序会报错
    # 如果想要不报错 请修改 save_file_name 这个变量的赋值过程
    from_video_get_img('video/2/tds_nm_03.MOV')

完毕!  


相关文章
|
2月前
|
机器学习/深度学习 算法 计算机视觉
作物叶片病害识别系统
作物叶片病害识别系统
65 0
|
2月前
|
机器学习/深度学习 编解码 监控
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
166 1
|
2月前
|
机器学习/深度学习 算法 计算机视觉
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A路径规划+单目测距与测速+行人车辆计数等)
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A路径规划+单目测距与测速+行人车辆计数等)
59 2
|
2月前
|
机器学习/深度学习 算法 计算机视觉
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
|
2月前
|
机器学习/深度学习 算法 安全
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-2
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-2
113 1
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-2
|
2月前
|
机器学习/深度学习 传感器 算法
植保机器人目标检测与识别
植保机器人目标检测与识别
29 1
|
2月前
|
机器人
[贴装专题] 基于多目视觉的手眼标定
[贴装专题] 基于多目视觉的手眼标定
47 0
|
机器学习/深度学习 传感器 安全
【红绿灯识别】基于计算机视觉红绿灯识别附Matlab代码
【红绿灯识别】基于计算机视觉红绿灯识别附Matlab代码
|
机器学习/深度学习 传感器 安全
【目标检测】基于背景差分实现运动车辆检测附Matlab代码
【目标检测】基于背景差分实现运动车辆检测附Matlab代码
|
传感器 数据采集 人工智能
人体行为足力特征分析及其应用研究_kaic
随着社会现代化的发展和科技的不断进步,我国航天事业蓬勃发展,与此同时产生了很多亟待解决的难题,康复医疗成为航天医学和康复领域的重要课题之一。载人航天实践证明,失重对航天员生理功能有很大影响,这不仅涉及到航天员完成任务的安全性,同时会制约航天员返回地球后的再适应能力。这种因失重产生的生理问题与老年人的生理机能退化有相似之处,老年人摔倒是社会迫切需要面对的另一重大社会问题。老年人群体的跌倒发生率最高且后果严重,这不仅会导致高龄老年人安全感的严重缺失,还会大量消耗医疗服务资源。因此,开展助老防摔装备的研究是目前医疗和社会领域的必要发展方向,它有助于减少老年人跌倒所带来的生命危险.。