google colaboratoryを用いて、機械学習をしたいと思っていて画像ファイルを作り、コードをかき、画像をデータ化にする際だと思うのですが、なぜか画像ファイルから読み込んでくれません。
from PIL import Image import os, glob import numpy as np from sklearn import model_selection from google.colab import drive drive.mount('/content/drive') path = "/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder" classes =os.listdir(path) num_classes = len(classes) image_size = 50 num_testdata=200 #画像の読み込み X_train=[] X_test=[] Y_train=[] Y_test=[] for index, classlabel in enumerate(classes):#%猿イノシし、からすのデータをそれぞれ変換していく photos_dir= "./content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder"+ classlabel files = glob.glob(photos_dir + "/*.jpg" ) for i, file in enumerate(files): if i>=400:break #% forを抜ける image = Image.open(file) image = image.convert("RGB") #%R34G54B158とかの数字データになる。 image = image.resize((image_size,image_size)) data = np.asarray(image) #%数字データにする if i<num_testdata:#%テストデータ用に残してそれ以外は回転したりする X_test.append(data) Y_test.append(index) else: for angle in range(-30,30,2):#%-20から20度まで2度づつ #回転 img_r = image.rotate(angle) data = np.asarray(img_r) X_train.append(data) Y_train.append(index) #反転 img_trans =img_r.transpose(Image.FLIP_LEFT_RIGHT) data=np.asarray(img_trans) X_train.append(data) Y_train.append(index) #X= np.array(X) #Y= np.array(Y) X_train=np.array(X_train) X_test=np.array(X_test) y_train=np.array(Y_train) y_test=np.array(Y_test) xy= (X_train, X_test,y_train,y_test) np.save("/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/2judge.npy",xy) #%データをanimal.npyというファイルに全て保存する print(X_train) print(y_train) print(X_test) print(y_test) print(classes)
このコードを書くと```
[]
[]
[]
[]
['milk', 'girls', 'nuts', 'fish', 'meat', 'boy', 'food', 'salt']
となってしまいました この各ファイル内には400枚の写真がそれぞれあります。 これはデータを読み取ってないのでしょうか? またどうすれば良いか教えていただきたいです! 是非よろしくお願いします classlabel を実行するとsaltしか出てきていませんでした つまりfor 文が機能していないのでしょうか? ![](5a5da916a982abfc2243909233524ad4.png) ![](1a92314512252e6024c45435f90f15ed.png)
フォルダ
"/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder"
の下のフォルダ構成はどのようになっていますか?
貼り付けられているソースコードからは、
photos_dirやfilesに、画像ファイルの名前やパスが正しく取得できているかわかりませんでした。
まずは
print(files)
等で、画像ファイル名やパスが正しく取得できているか確認してはいかがでしょうか。
folderの下は['milk', 'girls', 'nuts', 'fish', 'meat', 'boy', 'food', 'salt']というファイルが存在しており、
print(photos_dir)
print(files)
を実行すると
./content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder/salt
[]
となってしまい、folderのなかにはsaltしか存在していないことになり、さらにはsaltのなかには何もないと言われてしまいました。
これはどこのコードを変更すればいいのでしょうか?
>folderの下は['milk', 'girls', 'nuts', 'fish', 'meat', 'boy', 'food', 'salt']というファイルが存在しており、
ファイルではなくフォルダですよね。
/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder/salt/画像ファイル.jpg
というように画像ファイルが配置されているということですね。
気になったのは、
photos_dir= "./content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder"+ classlabel
という部分です。
/contentの前に、"."は必要ですか?
photos_dir= "/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder"+ classlabel
が正しいのでは?
すみません。全くもってその通りでファイルではなく、フォルダーです。
はい。画像ファイル.jpgとなっております。
ご指摘いただいたように```python
photos_dir= "/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder"+ classlabel
```
としてみたのですがさっきと変化がありませんでした。。。
すみません。
```python
と、
```
は、私のコメント投稿ミスです。ソースコードからは消してください。
>print(photos_dir)
>print(files)
>を実行すると
>./content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder/salt
>[]
>となってしまい、folderのなかにはsaltしか存在していないこと
saltしか出てこないのは、
>print(photos_dir)
を記述した箇所が、for文の後だからでしょう。
for文内で、photos_dirが繰り返しごとに上書きされていて、forループの最後のclasslabelに格納された"salt"がphotos_dirに反映されているだけだと思います。
files = glob.glob(photos_dir + "/*.jpg" )
の後に
print(files)
を記述すると、たくさんの画像ファイル名(400個x8クラス)が出力されますか?
わかりました!!ご丁寧にありがとうございます!!ほんとうに助かります
saltの中身しか出てこない理由もわかりました。ありがとうございます!!!
言われてみた通りfiles = glob.glob(photos_dir + "/*.jpg" )
の後に
print(files)
を記述すると、
[]
[]
[]
[]
[]
[]
[]
[]
となり8個の[]が出てきてしまいました。
これは読み込みが全くできていないのでしょうか?
画像の読み込みの前の、画像ファイル名のリスト"files"の取得に失敗しているようですね。
ちょっとわからなくなってきました。
photos_dir= os.path.join("/content/drive/My Drive/Colab Notebooks/kera_lesson_making_colab_ver/folder/", classlabel)
としたらどうでしょうか。
夜遅くまでありがとうございます
教えていただいたコードを実行しても、前の結果(8個の[])となってしまいました、、、、
これはどういったもので検索すれば出てくるかわかりますか?
自分でも調べようと思うのですが、検索する言葉すら出てこないので教えていただけると助かります。。。。
あなたの回答
tips
プレビュー