引言:

在做TensorFlow案例时发现好多的图片数据集都是处理好的,直接在库中调用的。比如Mnist,CIFAR-10等等。但是在跑自己项目的时候如何去读取自己的数据集呢?其实,一方面TensorFlow官方已经给出方法,那就是将图片制作成tfrecord格式的数据,供TensorFlow读取。另一方面Python以及Python的图像处理第三方库都有读取制作的方法,种类繁杂。

下面我将介绍两种方法:1.用python制作数据集2.基于TensorFlow制作tfrecord格式的数据集

一 用python制作数据集

代码比较简单这里做一下简单的说明:

1.一定要把.py文件放到图片所在的文件夹内,因为程序获取的路径是.py文件下的路径,但是你的源图片路径也得有图片否则回报错(目前是什么原因造成的还没发现,以后补充)。

2.程序已经写成函数了,所以只需要把图片路径以及将图片放到.py文件下就行了。参数有路径path和需要制作的标签Lables。

直接上代码:

import os
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as npdef make_data(path,labels):def getAllimages(folder):assert os.path.exists(folder)assert os.path.isdir(folder)imageList = os.listdir(folder)imageList = [os.path.abspath(item) for item in imageList if os.path.isfile(os.path.join(folder, item))]return imageListImageList=getAllimages(path)TrainList=[]Lable=[]Img_data=[]for i in range(len(ImageList)):string=str(ImageList[i])List=mpimg.imread(string)TrainList.append(List)Lable1=labelsLable.append(Lable1)Img = np.hstack((TrainList, Lable))Img_data=Img[:len(TrainList)]Img_lable=Img[len(TrainList):]return Img_data,Img_lable
path=(r'/home/wcy/图片')
img,lable=make_data(path,0)
print(lable)

注意:/home/wcy/图片目录下有需要制作的图片以及.py文件夹下也应该有图片。

二 基于TensorFlow制作tfrecord格式的数据集

整个程序分为两部分一个是make_image_TFRecord另一部分是read_Tfrecord。

1.make_image_TFRecord.py

import os
import tensorflow as tf
from PIL import Image
import numpy as np
import pandas as pd
# 原始图片的存储位置
orig_picture = os.getcwd()+'\\image\\test'
# 生成图片的存储位置
gen_picture = os.getcwd()+'\\image'
# 需要的识别类型
classes = {'0', '1'}
# 样本总数
num_samples = 40
# 制作TFRecords数据
def create_record():writer = tf.python_io.TFRecordWriter("test.tfrecords")for index, name in enumerate(classes):class_path = orig_picture + "/" + name + "/"for img_name in os.listdir(class_path):img_path = class_path + img_nameimg = Image.open(img_path)img = img.resize((32, 32))  # 设置需要转换的图片大小###图片灰度化####################################################################### img=img.convert("L")##############################################################################################img_raw = img.tobytes()  # 将图片转化为原生bytesexample = tf.train.Example(features=tf.train.Features(feature={"label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))}))writer.write(example.SerializeToString())writer.close()
# =======================================================================================
def read_and_decode(filename,is_batch):# 创建文件队列,不限读取的数量    filename_queue = tf.train.string_input_producer([filename])# create a reader from file queue    reader = tf.TFRecordReader()# reader从文件队列中读入一个序列化的样本    _, serialized_example = reader.read(filename_queue)# get feature from serialized example    # 解析符号化的样本    features = tf.parse_single_example(serialized_example,features={'label': tf.FixedLenFeature([], tf.int64),'img_raw': tf.FixedLenFeature([], tf.string)})label = features['label']img = features['img_raw']img = tf.decode_raw(img, tf.uint8)img = tf.reshape(img, [32, 32, 3])# img = tf.cast(img, tf.float32) * (1. / 255) - 0.5label = tf.cast(label, tf.int32)if is_batch:batch_size = 3min_after_dequeue = 10capacity = min_after_dequeue + 3 * batch_sizeimg, label = tf.train.shuffle_batch([img, label],batch_size=batch_size,num_threads=3,capacity=capacity,min_after_dequeue=min_after_dequeue)return img, label
# =======================================================================================

2.read_Tfrecord.py

import tensorflow as tf
import os
import pandas as pd
from make_image_TFRecord import create_record
from make_image_TFRecord import read_and_decode
from PIL import Imagenum_samples = 40
create_record()
train_image, train_label = read_and_decode('test.tfrecords', is_batch=False)
# 初始化变量
init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
# 创建一个session用于run输出结果
with tf.Session() as sess:  # 开始一个会话sess.run(init_op)coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(coord=coord)data = pd.DataFrame()for i in range(num_samples):example, lab = sess.run([train_image, train_label])  # 在会话中取出image和labelimg = Image.fromarray(example, 'RGB')  # 这里Image是之前提到的# img.save(gen_picture + '/' + str(i) + 'samples' + str(lab) + '.jpg')  # 存下图片;注意cwd后边加上‘/’# img.save( '/' + str(i) + 'samples' + str(lab) + '.jpg')  # 存下图片;注意cwd后边加上‘/’# print(example, lab)print(lab)coord.request_stop()coord.join(threads)sess.close()  # 关闭会话# ========================================================================================

第一个程序运行完之后会生成一个.tfrecords格式的文件,然后再第二个程序中直接读取调用就行。

TensorFlow下如何将图片制作成数据集相关推荐

  1. tensorflow 1.10下Mask RCNN实现自己数据集

    tensorflow 下Mask RCNN实现自己数据集 本文win10 tensorflow1.10 CUDA 9.0 python3.6 尽量保持一致 非常有用的网站 https://blog.c ...

  2. Tensorflow下用自己的数据集对Faster RCNN进行训练和测试(二)1

    原 Tensorflow下用自己的数据集对Faster RCNN进行训练和测试(二) 2018年08月21日 22:20:38 子季鹰才 阅读数:1811 对于Tensorflow版本的Faster ...

  3. slim php dd model,第二十四节,TensorFlow下slim库函数的使用以及使用VGG网络进行预训练、迁移学习(附代码)...

    在介绍这一节之前,需要你对slim模型库有一些基本了解,具体可以参考第二十二节,TensorFlow中的图片分类模型库slim的使用.数据集处理,这一节我们会详细介绍slim模型库下面的一些函数的使用 ...

  4. python制作训练集_利用Tensorflow简单实现VGGNet,从数据集制作到训练完成测试

    VGGNet_TF 利用Tensorflow简单实现VGGNet,从数据集制作到训练完成测试 参考:<Tensorflow实战><Tensorflow 实战Google深度学习框架& ...

  5. 基于tensorflow 批量修改自己的图片数据集 (附代码)

    转载自:地址 现在网上有很多关于Deeplearning的教程,不过这些教程的数据集都是已经做好的,并且格式名字什么的都已经整理好了.特别是很多入门的教程都是Mnist 的数据集,这都已经非常的完善了 ...

  6. 图片二维码,如何将图片制作成二维码

    想要将图片做成二维码? 其实很简单. 你只需要一个二维码生成器就能做到. 比如,这个业界小有名声的二维彩虹二维码生成器. 比如企业活动中,要展示多张图片:比如你想要将喜欢的插画作品保存并分享:比如你要 ...

  7. TensorFlow下用自己的数据训练Fater-RCNN

    环境:Linux系统,GPU 1.首先在GitHub上找到这个源码 ,然后根据下面的ReadMe教程一步步跑通,建议先用VOC2007数据集训练,可以先把迭代次(在/FRCN_ROOT/experim ...

  8. win10下yolov3训练自己的数据集

    在win10下用yolov3训练自己的数据集 1.  在darknet-master\build\darknet\x64 新建yolo-obj.cfg文件(可以直接复制yolov3.cfg,然后重命名 ...

  9. 怎样在php中制作电子相册,制作电子相册 如何将图片制作成视频并配上合适的音乐?电脑制作电子相册的方法...

    现在很多的朋友都喜欢将照片制作成视频,这样就可以发送到朋友圈啦~那么如何电脑制作电子相册呢?就是电脑怎么制作电子相册?此教程不是3d电子相册制作教程,而是将电脑本地的图片制作成电子相册哦.操作很简单, ...

最新文章

  1. 【神经网络】(14) MnasNet 代码复现,网络解析,附Tensorflow完整代码
  2. 关于tcp、http可能你想知道的那些事
  3. LeetCode Reconstruct Itinerary(欧拉回路)
  4. IDEA 连接 GIT OSCHINA 提交本地已存在的项目
  5. 牛逼的python代码_牛逼了!Python代码补全利器,提高效率告别996!
  6. docker基本组成
  7. Python实例 -- 如何快速获取列表中最大的三个元素
  8. 经典C语言程序100例之十七
  9. CentOS7 修复boot目录
  10. 助力开发者的魔法式“绝招儿”,你了解几个?
  11. 为什么我们总觉得别人掌握的技术总是牛叉的?
  12. 在Centos7上配置docker运行DotNetCore项目
  13. CFA一级学习笔记--衍生品(一)--概念以及定义
  14. iOS Xcode:No account for team 5P2U9V6DNN.
  15. 立创开源 | 基于ESP-01的桌面小彩灯
  16. 基于插件式的开发框架
  17. 江苏省计算机Python二级考试 总结
  18. 怪物猎人GU-武器派生整理之双刀篇
  19. 前端禁用中文半角输入法
  20. 华硕(ASUS)M50S81VN-SL外接 Dell 2209wa出现水波纹

热门文章

  1. CentOS7 网桥设置
  2. 高通驱动实现 GPIO 中断上报键值
  3. Sql保留两位小数方法
  4. Cookie功能被禁用,如何启用?
  5. 一段切换输入法的c#代码
  6. 微信的“老化”,陌生交友小程序带来的“第二春”......
  7. 元宇宙带来沉浸式智能登录?你学会了吗?
  8. 抓取mtklog的相关注意事项
  9. Linux--基础知识点--7--uptime
  10. CV——day72:从零开始学YOLO——YOLO-v3(可以在我的资源里下载完整的v1到v3的笔记啦!)