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

  1. import tensorflow as tf
  2. from PIL import Image
  3. from glob import glob
  4. import os
  5. import progressbar
  6. import time
  7.  
  8. class TFRecord():
  9. def __init__(self, path=None, tfrecord_file=None):
  10. self.path = path
  11. self.tfrecord_file = tfrecord_file
  12.  
  13. def _convert_image(self, idx, img_path, is_training=True):
  14. label = idx
  15.  
  16. with tf.gfile.FastGFile(img_path, 'rb') as fid:
  17. img_str = fid.read()
  18.  
  19. # img_data = Image.open(img_path)
  20. # img_data = img_data.resize((224, 224))
  21. # img_str = img_data.tobytes()
  22.  
  23. file_name = img_path
  24.  
  25. if is_training:
  26. feature_key_value_pair = {
  27. 'file_name': tf.train.Feature(bytes_list=tf.train.BytesList(
  28. value=[file_name.encode()])),
  29. 'img': tf.train.Feature(bytes_list=tf.train.BytesList(
  30. value=[img_str])),
  31. 'label': tf.train.Feature(int64_list=tf.train.Int64List(
  32. value=[label]))
  33. }
  34. else:
  35. feature_key_value_pair = {
  36. 'file_name': tf.train.Feature(bytes_list=tf.train.BytesList(
  37. value=[file_name.encode()])),
  38. 'img': tf.train.Feature(bytes_list=tf.train.BytesList(
  39. value=[img_str])),
  40. 'label': tf.train.Feature(int64_list=tf.train.Int64List(
  41. value=[-1]))
  42. }
  43.  
  44. feature = tf.train.Features(feature=feature_key_value_pair)
  45. example = tf.train.Example(features=feature)
  46. return example
  47.  
  48. def convert_img_folder(self):
  49.  
  50. folder_path = self.path
  51. tfrecord_path = self.tfrecord_file
  52. img_paths = []
  53. for file in os.listdir(folder_path):
  54. for img_path in os.listdir(os.path.join(folder_path, file)):
  55. img_paths.append(os.path.join(folder_path, file, img_path))
  56.  
  57. with tf.python_io.TFRecordWriter(tfrecord_path) as tfwrite:
  58. widgets = ['[INFO] write image to tfrecord: ', progressbar.Percentage(), " ",
  59. progressbar.Bar(), " ", progressbar.ETA()]
  60. pbar = progressbar.ProgressBar(maxval=len(img_paths), widgets=widgets).start()
  61.  
  62. cate = [folder_path + '/' + x for x in os.listdir(folder_path) if
  63. os.path.isdir(folder_path + '/' + x)]
  64.  
  65. i = 0
  66. for idx, folder in enumerate(cate):
  67. for img_path in glob(folder + '/*.jpg'):
  68. example = self._convert_image(idx, img_path)
  69. tfwrite.write(example.SerializeToString())
  70. pbar.update(i)
  71. i += 1
  72.  
  73. pbar.finish()
  74.  
  75. def _extract_fn(self, tfrecord):
  76. feautres = {
  77. 'file_name': tf.FixedLenFeature([], tf.string),
  78. 'img': tf.FixedLenFeature([], tf.string),
  79. 'label': tf.FixedLenFeature([], tf.int64)
  80. }
  81. sample = tf.parse_single_example(tfrecord, feautres)
  82. img = tf.image.decode_jpeg(sample['img'])
  83. img = tf.image.resize_images(img, (224, 224), method=1)
  84. label = sample['label']
  85. file_name = sample['file_name']
  86. return [img, label, file_name]
  87.  
  88. def extract_image(self, shuffle_size, batch_size):
  89. dataset = tf.data.TFRecordDataset([self.tfrecord_file])
  90. dataset = dataset.map(self._extract_fn)
  91. dataset = dataset.shuffle(shuffle_size).batch(batch_size)
  92. print("---------", type(dataset))
  93. return dataset
  94.  
  95. if __name__=='__main__':
  96.  
  97. # start = time.time()
  98. # t = GenerateTFRecord('/')
  99. # t.convert_img_folder('/media/xia/Data/emo', '/media/xia/Data/emo.tfrecord')
  100. # print("Took %f seconds." % (time.time() - start))
  101.  
  102. t =TFRecord('/media/xia/Data/emo', '/media/xia/Data/emo.tfrecord')
  103. t.convert_img_folder()
  104. dataset = t.extract_image(100, 64)
  105. for(batch, batch_data) in enumerate(dataset):
  106. data, label, _ = batch_data
  107. print(label)
  108. 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. PTA编程总结三

    7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块 ...

  2. 将数据库中带出的列,在gridview中影藏起来

    前台增加事件:OnRowCreated="GridView1_RowCreated" protected void GridView1_RowCreated(object send ...

  3. C#调用windows API实现 smallpdf客户端程序进行批量压缩

    一.背景 Smallpdf 网站针对PDF文件提供了非常齐全的功能:PDF 与 Word.PPT.Excel.JPG 的相互转化.PDF 的压缩.编辑.合并.分割.解密.加密等功能,用户无需注册即可免 ...

  4. oracle em启动问题

    这种情况出现的可能性是(1)主机IP地址改变,(2)主机名改变,(3)移植到全新的主机,(4)监听程序未启动,5)oracle服务也检查一下 关于orcl的启动: emctl start dbcons ...

  5. Design a stack that supports getMin() in O(1) time and O(1) extra space

    Question: Design a Data Structure SpecialStack that supports all the stack operations like push(), p ...

  6. webpack的安装和运行

    webpack依赖于node,为了可以正靠运行,必须依赖node环境.node环境为了可以真正的执行很多代码,必须其中包含各种依赖的包npm工县(node packages manager)所以在进行 ...

  7. python对象的引用

    1 利用 * 星号生成二维及二维以上的list时,特别要注意有的量引用是相同的.如果后面要给list赋值,最好不要这样生成list. 可以先这样生成,再打印输出后,粘贴到程序中重新赋值. a = [[ ...

  8. 【Linux 应用编程】基础知识

    错误提示 Linux 提供的系统调用API,通常会在失败的时候返回 -1.如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数: #include <stdio. ...

  9. SPA(single page application)

    一.SPA的概述 SPA(single page application)单页面应用程序,在一个完成的应用或者站点中,只有一个完整的html页面,这个页面有一个容器,可以把需要加载的代码片段插入到该容 ...

  10. ELK7.4.0分析nginx json日志

    ELK7.4.0单节点部署 环境准备 安装系统,数据盘设置为/srv 内核优化参考 我们需要创建elk专用的账号,并创建所需要的目录并授权 useradd elk; mkdir /srv/{app,d ...