質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

1653閲覧

(Python)機械学習用に集めた画像をNumpy形式に変換できない

退会済みユーザー

退会済みユーザー

総合スコア0

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2019/10/03 06:53

編集2019/10/04 04:39

https://blog.aidemy.net/entry/2018/12/23/022554
上記サイトを参考に、機械学習用に集めた画像をNumpy形式に変換をしてnpzファイルとして保存しましたが、保存したnpzファイルの中身をSpyderで確認すると、中身が0になっていました。
(上記サイトの”学習・評価(1回目)”という所で詰まっています。)

フォルダにはしっかり100枚ずつ画像があるにもかかわらずNumpy形式に変換されないのは何か原因があるのでしょうか。
glob_files("フォルダの場所",0) の部分もしっかり場所の記載もしましたが結果は変わりませんでした。

どうすればよいのでしょうか?

import os,glob,random import cv2 import numpy as np outfile=r"C:\Users\hggxw\OneDrive\デスクトップ\imageAI\photos.npz"#保存ファイル名 max_photo=100 photo_size=32 x=[]#画像データ y=[]#ラベルデータ def main(): #各画像のフォルダーを読む glob_files(r"C:\Users(ユーザー名)\OneDrive\Desktop\imageAI\sushi",0) glob_files(r"C:\Users(ユーザー名)\OneDrive\Desktop\imageAI\salad",1) glob_files(r"C:\Users(ユーザー名)\OneDrive\Desktop\imageAI\tofu",2) #ファイルへ保存 np.savez(outfile,x=x,y=y)#xとyがnumpyのリストとして与えられる print("保存しました:"+outfile,len(x)) #path以下の画像を読み込む def glob_files(path,label): files=glob.glob(path+"/*.jpg") random.shuffle(files) #各ファイルを処理 num=0 #print(files) for f in files: if num >=max_photo:break num+=1 #画像ファイルを読む img=cv2.imread(f) img=cv2.resize(img, (photo_size,photo_size )) img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) img=np.asarray(img) x.append(img) y.append(label) print(num) if __name__=="__main__": main()

実行結果

0
0
0
保存しました:photos.npz 0

追記

ファイルが重複していたため不具合が生じていましたが、削除した後に実行した所、以下のようなエラーが発生しました。

エラー内容

error Traceback (most recent call last) <ipython-input-4-be59793129cc> in <module> 40 41 if __name__=="__main__": ---> 42 main() <ipython-input-4-be59793129cc> in main() 11 def main(): 12 #各画像のフォルダーを読む ---> 13 glob_files(r'c:\Users\haseken3116072\Desktop\imageAI\sushi', 0) 14 glob_files(r'c:\Users\haseken3116072\Desktop\imageAI\salad', 1) 15 glob_files(r'c:\Users\haseken3116072\Desktop\imageAI\tofu', 2) <ipython-input-4-be59793129cc> in glob_files(path, label) 31 #画像ファイルを読む 32 img=cv2.imread(f) ---> 33 img=cv2.resize(img, (photo_size,photo_size )) 34 img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) 35 img=np.asarray(img) error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3718: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

初心者なもので恐縮ですが詳しいご解答を頂けると幸いです。

実行環境

Windows10
Anaconda3
Python3.7.3
keras2.3.0
opencv-python4.1.0.25

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2019/10/03 08:57

それだけでは、どのような状況になっているのか分からないので回答できません。 ディレクトリ構成やソースコード(提示のURLの内容から改変する際にミスしている可能性があるため)を記載してください。
meg_

2019/10/03 10:41

リンクは「リンクの挿入」で記入してください。 ご質問のコードも掲載してください。
退会済みユーザー

退会済みユーザー

2019/10/03 13:57

コードの記載、リンク先の修正を行いました
meg_

2019/10/03 22:17

「files=glob.glob(path+"/*.jpg")」で、filesに正しくファイル名一覧が取得出来ていますか?
guest

回答2

0

ベストアンサー

Opencvの代わりにPillow(PIL)を使用したコードで無事にnpzファイルに変換できました。

import numpy as np from PIL import Image import os, glob, random outfile = r'C:\Users\hggxw\OneDrive\デスクトップ\imageAI\photos.npz' max_photo = 100 photo_size = 32 x = [] y = [] def main(): glob_files(r'C:\Users(ユーザー名)\OneDrive\デスクトップ\imageAI\sushi', 0) glob_files(r'C:\Users(ユーザー名)\OneDrive\デスクトップ\imageAI\salad', 1) glob_files(r'C:\Users(ユーザー名)\OneDrive\デスクトップ\imageAI\tofu', 2) np.savez(outfile, x=x, y=y) print("保存しました:" + outfile, len(x)) def glob_files(path, label): files = glob.glob(path + "/*.jpg") random.shuffle(files) num = 0 for f in files: if num >= max_photo: break num += 1 img = Image.open(f) img = img.convert("RGB") img = img.resize((photo_size, photo_size)) img = np.asarray(img) x.append(img) y.append(label) if __name__ == '__main__': main()

実行結果
保存しました:C:\Users(ユーザー名)\OneDrive\デスクトップ\imageAI\photos.npz 300

投稿2019/10/06 10:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1.「print(num)」が0なので画像ファイルが読み込みできていないかと思います。

2.「np.savez」はリストを引数に取れますか?numpy配列に変換してから渡さないといけないかと思います。

投稿2019/10/03 23:57

meg_

総合スコア10580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/10/04 04:41

恥ずかしながら、画像を取り込むときに作成していたimageAIというファイルがテスト用に作ったものがあった為2つ存在していたため、空のフォルダから写真を読み込もうとしていたようです。 しかし削除してから試した所、追記のようなエラーが出てしまいました。
meg_

2019/10/04 05:23

リサイズ前のサイズを確認してみてください。
退会済みユーザー

退会済みユーザー

2019/10/04 05:43

リサイズ前の画像は150*150でした
meg_

2019/10/04 07:37

cv2.imread()で読み込みに失敗して、imgがNoneになっているのでは?と思ったのですが違ったようですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問