前提・実現したいこと
最近、pythonを始めた人です。
pythonを使って簡単な画像分類を実現す
上記のサイトのソースコードを使用して画像の分類を行おうと思っています。
ディレクトリは次のように作っています。
image_analyze |---training.py |---training |---car |---car(1).jpg |---etc... |---ship |---ship(1).jpg |---etc...
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\analyze_image\training.py", line 77, in <module> main() File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\analyze_image\training.py", line 38, in main img = img_to_matrix(image) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\analyze_image\training.py", line 17, in img_to_matrix img = Image.open(filename) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PIL\Image.py", line 2548, in open fp = builtins.open(filename, "rb") FileNotFoundError: [Errno 2] No such file or directory: 'trainingcar (1).jpg'
該当のソースコード(training.py)
from PIL import Image import numpy as np import os import pandas as pd import pylab as pl from sklearn.decomposition import RandomizedPCA from sklearn.externals import joblib from sklearn.svm import LinearSVC STANDARD_SIZE = (75, 75) def img_to_matrix(filename, verbose=False): img = Image.open(filename) if verbose: print ('changing size from %s to %s') % (str(img.size), str(STANDARD_SIZE)) img = img.resize(STANDARD_SIZE) imgArray = np.asarray(img) return imgArray # imgArray.shape = (167 x 300 x 3) def flatten_image(img): s = img.shape[0] * img.shape[1] * img.shape[2] img_wide = img.reshape(1, s) return img_wide[0] def main(): directory = 'training' images = [directory + f for f in os.listdir(directory)] labels = ['car' if 'car' in f.split('/')[-1] else 'ship' for f in images] data = [] for image in images: img = img_to_matrix(image) img = flatten_image(img) data.append(img) data = np.array(data) is_train = np.random.uniform(0, 1, len(data)) <= 0.7 y = np.where(np.array(labels) == 'car', 1, 0) train_x, train_y = data[is_train], y[is_train] # plot in 2 dimensions pca = RandomizedPCA(n_components=2) X = pca.fit_transform(data) df = pd.DataFrame({"x": X[:, 0], "y": X[:, 1], "label": np.where(y == 1, 'car', 'ship')}) colors = ['red', 'yellow'] for label, color in zip(df['label'].unique(), colors): mask = df['label'] == label pl.scatter(df[mask]['x'], df[mask]['y'], c=color, label=label) pl.legend() pl.savefig('pca_feature.png') # training a classifier pca = RandomizedPCA(n_components=5) train_x = pca.fit_transform(train_x) svm = LinearSVC(C=1.0) svm.fit(train_x, train_y) joblib.dump(svm, 'model.pkl') # evaluating the model test_x, test_y = data[is_train == False], y[is_train == False] test_x = pca.transform(test_x) print [pd.crosstab(test_y, svm.predict(test_x), rownames=['Actual'], colnames=['Predicted'])] if __name__ == '__main__': main()
教えてもらいたいこと
def main(): directory = 'training' images = [directory + f for f in os.listdir(directory)] labels = ['car' if 'car' in f.split('/')[-1] else 'ship' for f in images]
この部分の[]内のコードの意味がよくわからないので解説してほしいです。
また、エラーの解決方法を具体的に教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
環境はwindows10でpython付属のIDELを使用しています。
ほかに必要な情報がありましたら、コメントしていただければ、できるだけ回答します。
回答1件
あなたの回答
tips
プレビュー