前提・実現したいこと
https://rightcode.co.jp/blog/information-technology/machine-learning-image-clustering
↑このサイトを参考にしてKMeansをためしたのですが、データを保存するところでうまくいかずつまづいています。
エラーを回避して保存する書き方をしりたいです。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- OSError Traceback (most recent call last) <ipython-input-28-3f6cde8f7635> in <module> 31 # 結果をクラスタごとにディレクトリに保存 32 for label, p in zip(model.labels_, files): ---> 33 shutil.copyfile(p, r"C:\Users\k-means" + '/cluster{}/{}'.format(label, p.split('/')[-1])) ~\Anaconda3\lib\shutil.py in copyfile(src, dst, follow_symlinks) 119 else: 120 with open(src, 'rb') as fsrc: --> 121 with open(dst, 'wb') as fdst: 122 copyfileobj(fsrc, fdst) 123 return dst OSError: [Errno 22] Invalid argument: 'C:\Users\k-means/cluster3/C:\Users\img\img_0.jpg'
該当のソースコード
# 画像をnumpy配列で読み込み、変形 #impathlist = glob(r"C:\Users\img") files = glob.glob(r"C:\Users\img" + '/*') features = np.array([cv2.resize(cv2.imread(p), (128, 128), cv2.INTER_CUBIC) for p in files]) features = features.reshape(features.shape[0], -1) #平坦化? # モデルの作成 model = KMeans(n_clusters=10).fit(features) #分けるクラスターの数 # クラスタ数を変更して試したいので古い出力結果は消す for i in range(model.n_clusters): cluster_dir = r"C:\Users\k-means" + "/cluster{}".format(i) if os.path.exists(cluster_dir): shutil.rmtree(cluster_dir) os.makedirs(cluster_dir) # 結果をクラスタごとにディレクトリに保存 for label, p in zip(model.labels_, files): shutil.copyfile(p, r"C:\Users\k-means" + '/cluster{}/{}'.format(label, p.split('/')[-1]))
試したこと
参考記事で
impathlist = glob(IMAGE_DIR)
のところを
files = glob.glob(r"C:\Users\img" + '/*')
としています。
shutil.copyfileでかかれていることをほかの方法でできないか模索してみましたが、そもそもKMeansの出力をどう扱えばいいのかわからない状態です。
補足情報(FW/ツールのバージョンなど)
Anaconda3 , python3 , jupyternotebook
質問のポイントがよくわかりませんでした。
Invalid argument: 'C:\\Users\\k-means/cluster3/C:\\Users\\img\\img_0.jpg'
のエラーは読んでいますか?
このファイル名では保管できないのは、わりと"当然"の部類だと思いますが、
1. このファイル名では保管できないことが理解できない
2. このファイル名では保管できないことはわかっているがどうすればいいかわからない
のかどちらでしょう。
また、2. だとしても、もうそうなら今のコードはどうやって書いた(書けた)のでしょう? という疑問がでます。
"こういう動作をして欲しいが書き方がよくわからなくて適当に書いた"という状態なら、"こういう動作をして欲しい"の方を質問に書いてもらう必要があります。
要点を得ず申し訳ないです。
2です。
エラーを回避する書き方をしりたいです。
「2. だとしても、もうそうなら今のコードはどうやって書いた(書けた)のでしょう? という疑問がでます。」
に関しては、プログラミングを初めてまだ日が浅いですが参考記事をみながら書けました。
ですのでほとんどの知識が抜けているかと思います。
すみません、指摘していただいたおかげでなにがしたいかよく分かってlstrip()に関して調べることができました。
回答1件
あなたの回答
tips
プレビュー