假设emo文件夹下,有1,2,3,4等文件夹,每个文件夹代表一个类别

 import tensorflow as tf
from PIL import Image
from glob import glob
import os
import progressbar
import time class TFRecord():
def __init__(self, path=None, tfrecord_file=None):
self.path = path
self.tfrecord_file = tfrecord_file def _convert_image(self, idx, img_path, is_training=True):
label = idx with tf.gfile.FastGFile(img_path, 'rb') as fid:
img_str = fid.read() # img_data = Image.open(img_path)
# img_data = img_data.resize((224, 224))
# img_str = img_data.tobytes() file_name = img_path if is_training:
feature_key_value_pair = {
'file_name': tf.train.Feature(bytes_list=tf.train.BytesList(
value=[file_name.encode()])),
'img': tf.train.Feature(bytes_list=tf.train.BytesList(
value=[img_str])),
'label': tf.train.Feature(int64_list=tf.train.Int64List(
value=[label]))
}
else:
feature_key_value_pair = {
'file_name': tf.train.Feature(bytes_list=tf.train.BytesList(
value=[file_name.encode()])),
'img': tf.train.Feature(bytes_list=tf.train.BytesList(
value=[img_str])),
'label': tf.train.Feature(int64_list=tf.train.Int64List(
value=[-1]))
} feature = tf.train.Features(feature=feature_key_value_pair)
example = tf.train.Example(features=feature)
return example def convert_img_folder(self): folder_path = self.path
tfrecord_path = self.tfrecord_file
img_paths = []
for file in os.listdir(folder_path):
for img_path in os.listdir(os.path.join(folder_path, file)):
img_paths.append(os.path.join(folder_path, file, img_path)) with tf.python_io.TFRecordWriter(tfrecord_path) as tfwrite:
widgets = ['[INFO] write image to tfrecord: ', progressbar.Percentage(), " ",
progressbar.Bar(), " ", progressbar.ETA()]
pbar = progressbar.ProgressBar(maxval=len(img_paths), widgets=widgets).start() cate = [folder_path + '/' + x for x in os.listdir(folder_path) if
os.path.isdir(folder_path + '/' + x)] i = 0
for idx, folder in enumerate(cate):
for img_path in glob(folder + '/*.jpg'):
example = self._convert_image(idx, img_path)
tfwrite.write(example.SerializeToString())
pbar.update(i)
i += 1 pbar.finish() def _extract_fn(self, tfrecord):
feautres = {
'file_name': tf.FixedLenFeature([], tf.string),
'img': tf.FixedLenFeature([], tf.string),
'label': tf.FixedLenFeature([], tf.int64)
}
sample = tf.parse_single_example(tfrecord, feautres)
img = tf.image.decode_jpeg(sample['img'])
img = tf.image.resize_images(img, (224, 224), method=1)
label = sample['label']
file_name = sample['file_name']
return [img, label, file_name] def extract_image(self, shuffle_size, batch_size):
dataset = tf.data.TFRecordDataset([self.tfrecord_file])
dataset = dataset.map(self._extract_fn)
dataset = dataset.shuffle(shuffle_size).batch(batch_size)
print("---------", type(dataset))
return dataset if __name__=='__main__': # start = time.time()
# t = GenerateTFRecord('/')
# t.convert_img_folder('/media/xia/Data/emo', '/media/xia/Data/emo.tfrecord')
# print("Took %f seconds." % (time.time() - start)) t =TFRecord('/media/xia/Data/emo', '/media/xia/Data/emo.tfrecord')
t.convert_img_folder()
dataset = t.extract_image(100, 64)
for(batch, batch_data) in enumerate(dataset):
data, label, _ = batch_data
print(label)
print(data.shape)

ps: tf.enable_eager_execution()

tf.__version__==1.8.0

参考:https://zhuanlan.zhihu.com/p/30751039

https://lonepatient.top/2018/06/01/tensorflow_tfrecord.html

https://zhuanlan.zhihu.com/p/51186668

将数据转为tfrecord格式的更多相关文章

  1. 关于多条数据转为json格式单次传输的问题 2017.05.27

    数据形式如下: var mycars = [];//定义数组存放多条数据 for(var i=0;i<2;i++){ var jsonData = {};//定义变量存放单条数据 jsonDat ...

  2. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  3. excel将百分比数据转为数值格式

    由于于原给定的数据是百分比格式的, 所以先在excel中将数据格式改为数值 修改步骤: 单纯更改单元格格式为数值没用,先在空白单元格输入数值格式的1,复制该数字,选中要转换格式的数据, 右键 ---- ...

  4. 将excel中的数据转为json格式

    ---恢复内容开始--- 用来总结工作中碰导一些错误,可以让自己在碰到相同错误的时候不至于重新走一遍.... 昨天导入数据的时候,碰到了一个问题是将一个大数组里面的每一个元素中的一些不要的去提出掉,本 ...

  5. axios——post请求时把对象obj数据转为formdata格式

    转载自:https://blog.csdn.net/feizhong_web/article/details/80514436  在调用后台接口的时候,上传报名信息,利用axios 的post请求,发 ...

  6. .net接收post请求并把数据转为字典格式

    public SortedDictionary<string, string> GetRequestPost() { int i = 0; SortedDictionary<stri ...

  7. 目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练

    将目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练. import xml.etree.ElementTree as ET import numpy as ...

  8. 读取mysql数据库的数据,转为json格式

    # coding=utf-8 ''' Created on 2016-10-26 @author: Jennifer Project:读取mysql数据库的数据,转为json格式 ''' import ...

  9. mha格式的CT体数据转为jpg切片

    mha格式的CT体数据转为jpg切片 mha格式 .mha文件是一种体数据的存储格式,由一个描述数据的头和数据组成,一般我们拿到的原始医学影像的数据是.dcm也就是dicom文件,dicom文件很复杂 ...

随机推荐

  1. long poll、ajax轮询和WebSocket

    websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享.废话这么多了,最后再赞一个~ WebSocket是出的东西(协 ...

  2. How jQuery UI Works

    https://learn.jquery.com/jquery-ui/how-jquery-ui-works/ jQuery UI contains many widgets that maintai ...

  3. Python可变数据类型list填坑一则

    前提概要 最近写业务代码时遇到一个列表的坑,在此记录一下. 需求 现在有一个普通的rule列表: rule = [["ID",">",0]] 在其他地方经 ...

  4. 线性时间求取第 K 大数

    求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 \(O(nlogK)\).借助于分治思想,以及快速排序的区间划分,我们可以做到 \(O(n)\) 时间复杂度.具体算法 ...

  5. Monkey测试:启动adb shell失败

    1.在dos环境下输入adb shell 2.遇到adb server version doesn't match this client:killing错误 如: 3.在遇到如上问题时,输入adb ...

  6. Jmeter接口测试系列之测试用例变量参数化处理

    在进行接口测试时,一组完整的接口测试用例,存在后一个测试用例使用前一个用例的请求结果中的数据,此时就需要参数化测试用例中值.直接使用变量调用会存在问题,此时就需要用到beanshell去改变. 举例说 ...

  7. python 接口测试时,后端报错no String-argument constructor/factory method

    解决方法: 1.先将字典转化为序列化的数据类型 data = {"pageNo":0,"pageSize":10,"shopId":15,& ...

  8. JavaScript —— 实现简单计算器【带有 开/关机 清零 退格 功能】

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. Java多线程学习——死锁的一个容易理解的例子

    发生死锁的情况:多个线程需要同时占用多个共享资源而发生需要互相死循环等待的情况 public class Mirror { //镜子 } public class Lipstick { //口红 } ...

  10. idea中配置tomcat详细

    1:首先要添加一个tomcat流程 2:配置tomcat: 3:配置tomcat中的deployment(就是配置你需要部署的工程) 4:配置tomcat中需要输出的日志logs 5:启动 tomca ...