CK+表情数据库转换为python数据格式保存(.pkl)

编程入门 行业动态 更新时间:2024-10-24 18:21:51

CK+表情数据库<a href=https://www.elefans.com/category/jswz/34/1771419.html style=转换为python数据格式保存(.pkl)"/>

CK+表情数据库转换为python数据格式保存(.pkl)

CK+数据库的下载及介绍上一个博文已经介绍过,本博文主要介绍将CK+表情数据库转换为python数据格式保存(.pkl)

注:此代码运行前已经将数据库处理为64*64的照片
详细讲解请见代码注释,如有疑问,欢迎交流

下图是CK数据库的部分表情图片







下面附代码


1. 读取图片保存为.pkl文件

#-*- coding: utf-8 -*- 
import os
import numpy
from PIL import Image   
from pylab import * 
import cPickle      def get_imlist(path):   #此函数读取特定文件夹下的png格式图像return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.png')]x=[]    #存放图片路径
len_data=0  #图片个数
for i in range(8):img_path=get_imlist('D:\\CK\\'+str(i))  #字符串连接#print neutral  #这里以list形式输出bmp格式的所有图像(带路径)for j in range(len(img_path)):x.append(img_path[j])
#   print len(img_path)len_data=len_data+len(img_path) #这可以以输出图像个数
# print len_data
#print len(x)
d=len_data
data=numpy.empty((d,64*64)) #建立d*(64*64)的矩阵
while d>0:img=Image.open(x[d-1])  #打开图像 #img_ndarray=numpy.asarray(img)img_ndarray=numpy.asarray(img,dtype='float64')/256  #将图像转化为数组并将像素转化到0-1之间data[d-1]=numpy.ndarray.flatten(img_ndarray)    #将图像的矩阵形式转化为一维数组保存到data中d=d-1
# print len_data
# print shape(data)[1]  #输出矩阵大小data_label=numpy.empty(len_data)
for label in range(len_data):if label<924:data_label[label]=0elif (label>=905 and label<1180):data_label[label]=1elif (label>=1180 and label<1291):data_label[label]=2elif (label>=1291 and label<1619):data_label[label]=3elif (label>=1619 and label<1780):data_label[label]=4elif (label>=1780 and label<2289):data_label[label]=5elif (label>=2289 and label<2477):data_label[label]=6else:data_label[label]=7data_label=data_label.astype(numpy.int)  #将标签转化为int类型
# print data_label[924]
# print data_label[1638]#保存data以及data_label到data.pkl文件  
write_file=open('D:\\CK\\data.pkl','wb')    
cPickle.dump(data,write_file,-1)    
cPickle.dump(data_label,write_file,-1)    
write_file.close()   

2. 从.pkl数据中读取图像显示并存入.txt文件中

#-*- coding: utf-8 -*- 
import cPickle  
import pylab  
from pylab import *     #导入savetxt模块read_file=open('D:\\CK\\data.pkl','rb')    
faces=cPickle.load(read_file)  
read_file.close()   
img=faces[0].reshape(64,64)
savetxt('faces.txt',img,fmt="%.0f") #将矩阵保存到txt文件中
pylab.imshow(img)  
pylab.gray()  
pylab.show() 

3. 将数据库分为训练集,验证集,测试集

#-*- coding: utf-8 -*- import numpy
import pylab  
#读取data.pkl文件,分为训练集(2072个样本),验证集(444个样本),测试集(444个样本)  
import cPickle  
import random
read_file=open('D:\\CK\\data.pkl','rb')  
faces=cPickle.load(read_file)    
label=cPickle.load(read_file)    
read_file.close()   train_data=numpy.empty((2072,4096))  
train_label=numpy.empty(2072)  
valid_data=numpy.empty((444,4096))  
valid_label=numpy.empty(444)  
test_data=numpy.empty((444,4096))  
test_label=numpy.empty(444)  li=range(2960)
random.shuffle(li)print li[1]
train_data[1]=faces[li[1]]
train_label[1]=label[li[1]]  #测试是否正确
# img=train_data[1].reshape(64,64)
# pylab.imshow(img)  
# pylab.gray()  
# pylab.show() 
# print train_label[1]for i in range(2960):if (i<2072):train_data[i]=faces[li[i]]train_label[i]=label[li[i]]  elif (i>=2072 and i<2516):valid_data[i-2072]=faces[li[i]]  valid_label[i-2072]=label[li[i]]else:  test_data[i-2516]=faces[li[i]]  test_label[i-2516]=label[li[i]] #另外一种实现
# random.seed(1)
# random.shuffle(faces)
# random.seed(1)
# random.shuffle(label)

更多推荐

CK+表情数据库转换为python数据格式保存(.pkl)

本文发布于:2024-02-13 04:41:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690725.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:转换为   数据格式   表情   数据库   CK

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!