生成pdf有的内容显示不出来_为什么ug程序生成导轨不显示

生成pdf有的内容显示不出来_为什么ug程序生成导轨不显示TFRecord  TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储等等。  TFRecords文件包含了tf.train.Example协议内存块(protocolbuffer)(协议内存块包含了字段Features)。我们可以写一

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

##TFRecord##
  TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储 等等。
  TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一段代码获取你的数据, 将数据填入到Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter 写入到TFRecords文件。
从TFRecords文件中读取数据, 可以使用tf.TFRecordReader的tf.parse_single_example解析器。这个操作可以将Example协议内存块(protocol buffer)解析为Tensor。
##Image to TFRecord##

首先我们使用TensorFlow提供的Flowers数据集做这个实验,数据集在我本地的路径为:

这里写图片描述
这是一个五分类的数据,以类别的形式组织数据,这非常符合我们自己组织数据集的习惯。其中一个分类中大概有700张左右的图片:
这里写图片描述

现在我们就把上面的数据制作出TFRecord,在这里需要说明下,TFRecord的生成要注意两点:
1.很多时候,我们的图片尺寸并不是统一的,所以在生成的TFRecord中需要包含图像的width和height这两个信息,这样在解析图片的时候,我们才能把二进制的数据重新reshape成图片;
2.TensorFlow官方的建议是一个TFRecord中最好图片的数量为1000张左右,这个很好理解,如果我们有上万张图片,却只打成一个包,这样是很不利于多线程读取的。所以我们需要根据图像数据自动去选择到底打包几个TFRecord出来。

我们可以用下面的代码实现这两个目的:

import os 
import tensorflow as tf 
from PIL import Image  

#图片路径
cwd = 'F:\\flowersdata\\trainimages\\'
#文件路径
filepath = 'F:\\flowersdata\\tfrecord\\'
#存放图片个数
bestnum = 1000
#第几个图片
num = 0
#第几个TFRecord文件
recordfilenum = 0
#类别
classes=['daisy',
         'dandelion',
         'roses',
         'sunflowers',
         'tulips']
#tfrecords格式文件名
ftrecordfilename = ("traindata.tfrecords-%.3d" % recordfilenum)
writer= tf.python_io.TFRecordWriter(filepath+ftrecordfilename)
#类别和路径
for index,name in enumerate(classes):
    print(index)
    print(name)
    class_path=cwd+name+'\\'
    for img_name in os.listdir(class_path): 
        num=num+1
        if num>bestnum:
          num = 1
          recordfilenum = recordfilenum + 1
          #tfrecords格式文件名
          ftrecordfilename = ("traindata.tfrecords-%.3d" % recordfilenum)
          writer= tf.python_io.TFRecordWriter(filepath+ftrecordfilename)
        #print('路径',class_path)
        #print('第几个图片:',num)
        #print('文件的个数',recordfilenum)
        #print('图片名:',img_name)
        
        img_path = class_path+img_name #每一个图片的地址
        img=Image.open(img_path,'r')
        size = img.size
        print(size[1],size[0])
        print(size)
        #print(img.mode)
        img_raw=img.tobytes()#将图片转化为二进制格式
        example = 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])),
            'img_width':tf.train.Feature(int64_list=tf.train.Int64List(value=[size[0]])),
            'img_height':tf.train.Feature(int64_list=tf.train.Int64List(value=[size[1]]))
        })) 
        writer.write(example.SerializeToString())  #序列化为字符串
writer.close()

Jetbrains全家桶1年46,售后保障稳定

在上面的代码中,我们规定了一个TFRecord中只放1000张图:

bestnum = 1000

并且将一张图的4个信息打包到TFRecord中,分别是:

example = 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])),
            'img_width':tf.train.Feature(int64_list=tf.train.Int64List(value=[size[0]])),
            'img_height':tf.train.Feature(int64_list=tf.train.Int64List(value=[size[1]]))
        })) 

这里写图片描述

##TFRecord to Image##
在上面我们打包了四个TFRecord文件,下面我们把这些数据读取并显示出来,看看制作的效果,这个过程很大一部分是和TensorFlow组织batch是一样的了。

import tensorflow as tf 
from PIL import Image  
import matplotlib.pyplot as plt

#写入图片路径
swd = 'F:\\flowersdata\\show\\'
#TFRecord文件路径
data_path = 'F:\\flowersdata\\tfrecord\\traindata.tfrecords-003'
# 获取文件名列表
data_files = tf.gfile.Glob(data_path)
print(data_files)
# 文件名列表生成器

filename_queue = tf.train.string_input_producer(data_files,shuffle=True) 
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)   #返回文件名和文件
features = tf.parse_single_example(serialized_example,
                                   features={
                                       'label': tf.FixedLenFeature([], tf.int64),
                                       'img_raw' : tf.FixedLenFeature([], tf.string),
                                       'img_width': tf.FixedLenFeature([], tf.int64),
                                       'img_height': tf.FixedLenFeature([], tf.int64),
                                   })  #取出包含image和label的feature对象
#tf.decode_raw可以将字符串解析成图像对应的像素数组
image = tf.decode_raw(features['img_raw'], tf.uint8)
height = tf.cast(features['img_height'],tf.int32)
width = tf.cast(features['img_width'],tf.int32)
label = tf.cast(features['label'], tf.int32)
channel = 3
image = tf.reshape(image, [height,width,channel])


with tf.Session() as sess: #开始一个会话
    init_op = tf.initialize_all_variables()
    sess.run(init_op)
    #启动多线程
    coord=tf.train.Coordinator()
    threads= tf.train.start_queue_runners(coord=coord)
    for i in range(15):
        #image_down = np.asarray(image_down.eval(), dtype='uint8')
        plt.imshow(image.eval())
        plt.show()
        single,l = sess.run([image,label])#在会话中取出image和label
        img=Image.fromarray(single, 'RGB')#这里Image是之前提到的
        img.save(swd+str(i)+'_''Label_'+str(l)+'.jpg')#存下图片
        #print(single,l)
    coord.request_stop()
    coord.join(threads)

注意:
1.我们在使用reshape去将二进制数据重新变成图片的时候,用的就是之前打包进去的width和height,否则程序会出错;

image = tf.reshape(image, [height,width,channel])

2.在图片存储时的命名方式为:mun_Label_calss id

这里写图片描述

3.代码也可以实时show出当前的图片:

这里写图片描述

完整代码也可以点击这里下载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/203593.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • [Azure][PowerShell][ASM][13]Reset Password

    [Azure][PowerShell][ASM][13]Reset Password

  • 回溯法求解N皇后问题及其时间复杂度分析

    回溯法求解N皇后问题及其时间复杂度分析回溯法求解N皇后问题及其时间复杂度分析一、回溯法简介1.什么是回溯法?2.回溯法的时间复杂度分析蒙特卡罗方法蒙特卡罗方法在回溯法求解时间复杂度中的应用二、回溯法求解N皇后问题1.回溯法求解N皇后问题的过程2.回溯法求解N皇后问题的时间复杂度2.1求解时的效率分析回溯法进行效率分析的代码2.2时间复杂度分析一、回溯法简介1.什么是回溯法?  相信”迷宫”是许多人儿时的回忆,大家小时候一定都玩过迷宫游戏。我们从不用别人教导,都知道走迷宫的策略是:当遇到一个岔路口,会有以下两种情况:存

  • 一种基于Linux文件系统的数据恢复方法_武汉病例轨迹

    一种基于Linux文件系统的数据恢复方法_武汉病例轨迹问题阶段起因:昨天晚上思路不是很清晰(上了一天班回来有点蒙),还是强忍着疲惫想搞事情,结果悲剧了……本来想拿SD卡做一张linux烧录卡,烧录脚本是很久以前写的,有git记录,一直不成功,就回退了几次提交,然后执行的时候没有给脚本传参(/dev/sd**),结果脚本中默认磁盘设备为/dev/sdb,在现在电脑上是一块数据磁盘,执行到一半的时候由于某些原因意外退出,但还是有一些命令执行,比

  • ArcGIS二次开发基础教程(00):基础界面设计

    ArcGIS二次开发基础教程(00):基础界面设计ArcGIS二次开发基础教程(00):基础界面设计(开发环境:VS2010+ArcEngine10.2+C#;鉴于学习ArcGIS二次开发的同学都有一定的WinForm开发和ArcGIS软件使用基础,故此教程不再对一些基础内容作详细阐述)首先新建一个Windows窗体应用程序,设置Size为(700,450),再添加一个MenuStrip,输入文件,如图:添加一个ToolB…

  • 学习Java必读的10本书籍

    学习Java必读的10本书籍来源|愿码(ChainDesk.CN)内容编辑愿码Slogan|连接每个程序员的故事网站|http://chaindesk.cn愿码愿景|打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。官方公众号|愿码|愿码服务号|区块链部落免费加入愿码全思维工程师社群|任一…

  • 怎么完全卸载赛门铁克_赛门铁克专用卸载工具[通俗易懂]

    怎么完全卸载赛门铁克_赛门铁克专用卸载工具[通俗易懂]安装卸载是两个操作,完全相反,通常安装会比卸载简单,赛门铁克专用卸载工具是一款专门用于卸载赛门铁克系列软件的应用工具,赛门铁克专用卸载工具完美解决赛门铁克怎么卸载的难题,需要的用户可以下载!赛门铁克官方卸载工具相关说明:包括SymantecAntiVirus即SAV系列,SymantecClientSecurity即SCS系列,以及SymantecEndpointProtection即S…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号