自动提取OULP-C1V2_Pack步态数据库,并合成步态能量图

今天把以前用C++写的步态能量图算法改成用Python写的,以前做实验使用的是中科院的CASIA DatasetB,因为这个数据库里面的步态序列图并没有归一化,而且还存在寸黑色的图片,所以处理起来需要判断的情况比较多。但是在 OULP-C1V2_Pack数据库中,图片都是归一化好的,统一为128*88,所以处理起来比较轻松。Python里面提供了opencv的接口,所以实现起来比较方便

下面是代码讲解:仅以Gallery_set为例

第一部分:获取Gallery_Set所定义的详细范围

#获取OULP-C1V2_SubjectIDList(FormatVersion1.0)/IDList_OULP-C1V2-A-All_Gallery下的Gallery Set所定义的每个人的其实步态剪影的序列范围

idList=[]    # id的列表与star和end一一对应
start=[]    # 起始帧数
end=[]      # 结束帧数

def ReadInformation(path='E:\OULP-C1V2_Pack\OULP-C1V2_SubjectIDList(FormatVersion1.0)/IDList_OULP-C1V2-A-85_Gallery.csv', encoding='utf-8'):
     csv_reader = csv.reader(open(path))
     for row in csv_reader:
         idList.append(row[0])
         start.append(row[2])
         end.append(row[3])
ReadInformation()
print(idList)  # 调试用
print(start)   # 调试用
print(end)     # 调试用

第二部分:定义用于步态能量图合成的类

 # 用于存储步态能量图的类
  class GenerateGEI(object):
    """
    """
    def __init__(self,imagefolder): 
             self.gei_name = imagefolder[:-7]+imagefolder[-7:]+".png" 
             self.num=0
             self.gei=np.zeros((128, 88), dtype="uint8")

    def __del__(self):
        del self.gei_name

    def InsertImage(self,image):
         self.num=self.num+1
         show_gei = self.CalGei(image)
         cv2.imwrite(self.gei_name, show_gei)
         return 1    # 要加self.

    def CalGei(self,image):
        sp=image.shape
        if self.num==1:
            self.gei=image.copy()  # copy 函数不会影响原图
        else:
            for i in range(sp[0]):
                p_old_gei=self.gei[i]
                p=image[i]
                for j in range(sp[1]):
                    p_old_gei[j]=(p_old_gei[j]*(self.num-1)+p[j])/self.num
        return self.gei

第三部分:用于步态能量图合成的主程序

def load_data(path="E:/OULP-C1V2_Pack/OULP-C1V2_NormalizedSilhouette(88x128)/Seq00"):
    num = len(idList)
    for index, idx in enumerate(idList):  # 对所有人的文件夹进行遍历
        print(idx + "," + start[index] + "," + end[index])
        imagefolder=path+"/"+idx
        print(imagefolder)
        generate = GenerateGEI(imagefolder)
        for k in range(int(start[index]),int(end[index])+1):  # 个人文件夹下面的图片依据相应的列表
            pathimage = '0' * (8 - len(str(k))) + str(k)+".png"
            imagepath=imagefolder+"/"+pathimage #gei 图的存储位置就是文件夹+每个人的id.png
            img = cv2.imread(imagepath,0)
            print(imagepath)
            print(type(img))
            generate.InsertImage(img)
            # 按照csv配置文件读取相应的帧数,进行步态能量图的合成
        del generate    # 这里要释放内存,然后循环进行下一个人的步态能量图的合成

第四部分:测试程序

ReadInformation()
load_data()

大功告成!!整个程序大概跑了两个多小时。Probe_Set跑完也花了差不多两个多小时。

很开心,今天又有一个人发现了我的小缺点,这样我就有了改正错误的动力啦。关电脑!回去睡觉喽。明天! 你好!

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值