#coding=utf-8
import re
import sys
import struct
import array
import numpy as np
define=8000*3
if __name__ =='__main__':
sourceFileName=r'C:\Users\Sophie\Desktop\AllFea_Basedon_2194_LocalConv3_Normalized.txt'
sourcefile=open(sourceFileName,'r')
feature = []
person_feat = {}
print "start"
for i, line in enumerate(sourcefile.readlines()):
if i % 8000 == 0 :
#if i % 8000 == 0 and i != 0:
feature.append(person_feat) # 存放数据
person_feat = {}
if i>=define:
break
L=line.strip('\n')
k=L.split(' ')
person_num=k[0]
#tmp = np.array([float(x) for x in k[1:]]) # 一行的数据
tmp=np.array(k[1:])
if person_num not in person_feat:
person_feat[person_num] = []
person_feat[person_num].append(tmp)
#写入准备
sample=[] #每个人对应的样本个数
number=0 #for test 总人数
print "start write"
#print feature
for feat in feature:
pernum=len(feat)
number+=pernum
for (nump,pfeat) in feat.items():
tmplen=len(pfeat)
print tmplen
sample.append(tmplen)
featurelen=256
outFileName=r'outfile.txt'
outfile=open(outFileName,'wb')
outfile.write(struct.pack("ii",featurelen,number))
for ii in range(len(sample)):
outfile.write(struct.pack('i',sample[ii]))
for feat in feature:
for (nump,pfeat) in feat.items():
for jj in range(len(pfeat)):
pfeat[jj].tofile(outfile)
背景:
人脸识别项目中,提取出了很多数据,需要提取合适的数据供人脸识别用。
人脸识别中,需要一个二进制文件,格式是:特征长度,总共人数,每个人对应的样本数,相应的特征
特征长度是256,总共人数和样本数需要计算,特征是float类型的数据。
现在的文件格式是:
每8000行是一部电视剧的人脸特征,一共有10多部电视剧。
文件每一行有257维数据,第一维是标示不同的人,剩下的都是特征。
这里巧妙的用到了python中的字典,和numpy数组。
其实这里面是有漏洞的,下次再说。