圖片與TFRecord 資料格式的相互轉換(一)

一、實現圖片向TFRecord的轉換

(1)假設資料夾G:\Exercise\Python\tfrecord中有兩張圖片,分別為:0.jpg, 1.jpg,如下圖所示:

(2)新建命名為:”image_information.txt_bak“的資料夾,其中內容為:

它存取了圖片所在的資料夾資訊,以及每張圖片的label

(3)並新建命名為“Img2Tfrecord.py”的python檔案,用於程式設計實現jpeg格式向TFRecord格式的轉換,並新建“data”的資料夾,以儲存變換得到的“**.tfrecords”的檔案.

“Img2Tfrecord.py”的具體程式碼如下:

# -*- coding:utf-8 -*-
__author__="David Chow"
# 將圖片儲存成 TFRecord  
import tensorflow as tf
import numpy as np
savedir="G:/Exercise/Python/tfrecord/data/data.tfrecords"  #希望在data/資料夾中生成“data.tfrecords"的TFRecord格式檔案
def  _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def  _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
def load(imgdir,width,height,method=0):
# 準備一個 writer 用來寫 TFRecord 檔案  
writer=tf.python_io.TFRecordWriter(savedir)
imglist=open(imgdir,'r')
with tf.Session() as sess:
for line in imglist:             #open 開啟的檔案返回物件是一個可迭代物件,直接用 for 迭代訪問
# 獲得圖片的路徑和型別
tmp=line.strip().split(' ')  #str.strip([chars])用於去除頭尾的字元chars,為空時預設刪除空白符;
#str.split(' ')通過指定一個空格對字串進行切片,返回分割後的字串列表tmp
imgpath=tmp[0]               #字串列表tmp中tmp[0]代表該影象的路徑
label=int(tmp[1])            #字串列表tmp中tmp[1]代表該影象的標籤
# 讀取圖片 
img=tf.gfile.FastGFile(imgpath,'r').read()
# 解碼圖片(如果是 png 格式就使用tf.image.decode_png))
img=tf.image.decode_jpeg(img)
# 圖片歸一化,[0,1],浮點型別資料。因為為了將圖片資料能夠儲存到 TFRecord 結構體中,所以需要將其圖片矩陣轉換成 string,
# 所以為了在使用時能夠轉換回來,這裡確定下資料格式為 tf.float32 
img=tf.image.convert_image_dtype(img,dtype=tf.float32)
# 把圖片轉換成希望的大小,由於本例子中兩張圖片大小都是650*434,所以此步驟可以省略。要注意的時候resize_images中輸入圖片的寬、高順序
img=tf.image.resize_images(img,[height,width],method)
# 執行op:image  
img=sess.run(img)
# 將其圖片矩陣轉換成string  
img_raw=img.tostring()
# 將資料整理成 TFRecord 需要的資料結構 
example=tf.train.Example(features=tf.train.Features(feature= \
{'imge_raw':_bytes_feature(img_raw),'label':_int64_feature(label)}))
# 寫 TFRecord  
writer.write(example.SerializeToString())  #SerializeToString()作用:把example序列化為一個字串,因為在寫入到TFRcorde的時候,write方法的引數是字串的.
writer.close()
if __name__=='__main__':
load("G:/Exercise/Python/tfrecord/image_information.txt_bak",650,434)

(4)執行上述.py程式後,可以在data/資料夾中看到生成“data.tfrecords”的TFRecord格式檔案,如圖所示: