2017-07-05 13 views
4

私はthis Tensorflow tutorialを見ていました。Tensorflowに画像を読み取る

は、チュートリアルでは、画像が魔法のように読まれています。

mnist = learn.datasets.load_dataset("mnist") 
train_data = mnist.train.images 

私のイメージは、二つのディレクトリに置かれています

../input/test/ 
../input/train/ 

彼らはすべて終了*.jpgを持っています。

どのように私のプログラムにそれらを読むことができますか?

私はlearn.datasets.load_datasetを使用することはできません。特殊なデータセット構造になっているようですが、画像付きのフォルダしかないからです。

+0

https://gist.github.com/eerwitt/518b0c9564e500b4b50f – grovina

答えて

5

mnist.train.imagesは本質的に形状[55000,784]のnumpy配列です。ここで、55000は画像数、784は各画像のピクセル数です(各画像は28x28です)

この正確なコードを実行する場合は、データから同様のnumpy配列を作成する必要があります。だから、あなたは[num_examples、image_sizeでは]

次のコードスニペットは、それを行う必要があり、すべての画像の上にnumpyの配列としてread imageを繰り返すそれを平らにし、サイズの行列を作成する必要があります:

import os 
import cv2 
import numpy as np 
def load_data(img_dir): 
    return np.array([cv2.imread(os.path.join(img_dir, img)).flatten() for img in os.listdir(img_dir) if img.endswith(".jpg")]) 
デバッグを有効にする

より包括的なコード:

import os 
list_of_imgs = [] 
img_dir = "../input/train/" 
for img in os.listdir("."): 
    img = os.path.join(img_dir, img) 
    if not img.endswith(".jpg"): 
     continue 
    a = cv2.imread(img) 
    if a is None: 
     print "Unable to read image", img 
     continue 
    list_of_imgs.append(a.flatten()) 
train_data = np.array(list_of_imgs) 

注: あなたのイメージは28x28x1(B/Wの画像)でない場合は、(cnn_model_fnで定義されている)、ニューラルネットワークアーキテクチャを変更する必要があります。チュートリアルのアーキテクチャは、MNISTのような単純なイメージの場合にのみ機能するおもちゃのアーキテクチャです。 Alexnetは、RGB画像を開始するのに適しているかもしれません。

+0

これは 'AttributeError: 'NoneType'オブジェクトに 'flatten''属性がないことを返します。私は正しいフォルダを指定しても何らかの理由で画像を見ることができません。 – octavian

+0

フォルダにjpeg以外の画像が含まれていますか?上記のより包括的なコードを試して、cv2が返す画像のデバッグに役立てることができます。 – user1523170

+0

また、更新されたone-linerコードを試してください。私の以前のコードは、画像と同じディレクトリから実行されなければ動作しませんでした。 – user1523170