回答編集履歴

3

追記

2018/09/07 04:20

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  抽出条件が違うからです。
36
36
 
37
- |列1|列2|
37
+ |処理|抽出条件|
38
38
 
39
39
  |:--|:--:|
40
40
 

2

内容をみやすく!!!!

2018/09/07 04:19

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -32,25 +32,23 @@
32
32
 
33
33
 
34
34
 
35
- > feature = np.array([
35
+ 抽出条件が違うからです。
36
36
 
37
- > data.imread(path)
37
+ |列1|列2|
38
38
 
39
- > for path in glob.glob('./img/img_convert/*.jpg')
39
+ |:--|:--:|
40
40
 
41
+ |glob.glob|指定したディレクトリ内のjpgファイルのみ|
42
+
41
- > ])
43
+ |os.listdir|指定したディレクトリ内のファイル全て|
42
44
 
43
45
 
44
46
 
45
- ここではjpgファイル抽出しているのに、for label, path in zip(labels, os.listdir('./img/img_convert')):
47
+ `glob.glob`結果リストに退避しておけばよかと。
46
48
 
47
- は条件をしていしていなからです。
49
+ 並び順保証するソートにも対応たバージョンです。
48
50
 
49
51
 
50
-
51
- 最初に対象のファイルをリスト化すればよいかと。
52
-
53
- ソートも対応したバージョンです。Pathlibでsearch_dirとかも変えれると思うので、質問文のプログラムを長く使う予定ならPathlibについて調べてみることをお勧めします。
54
52
 
55
53
  ```Python
56
54
 
@@ -109,3 +107,11 @@
109
107
  shutil.move(str(src_file), str(move_dir / str(label)))
110
108
 
111
109
  ```
110
+
111
+
112
+
113
+ ---
114
+
115
+
116
+
117
+ `glob.glob`は`Pathlib#glob`で代替できるので、`shutil`や`glob`を使わずに[Pathlib](https://docs.python.jp/3/library/pathlib.html )モジュールに統一することをお勧めいたします。

1

追記

2018/09/07 04:19

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -21,3 +21,91 @@
21
21
 
22
22
 
23
23
  `os.listdir`の並び順は保証されていないので、ソートしてくださいな。
24
+
25
+
26
+
27
+ ---
28
+
29
+
30
+
31
+ > Error: Destination path './img/img_group/3/.ipynb_checkpoints' already existsError: Destination path './img/img_group/3/.ipynb_checkpoints' already exists
32
+
33
+
34
+
35
+ > feature = np.array([
36
+
37
+ > data.imread(path)
38
+
39
+ > for path in glob.glob('./img/img_convert/*.jpg')
40
+
41
+ > ])
42
+
43
+
44
+
45
+ ここではjpgファイルのみを抽出しているのに、for label, path in zip(labels, os.listdir('./img/img_convert')):
46
+
47
+ は条件をしていしていなからです。
48
+
49
+
50
+
51
+ 最初に対象のファイルをリスト化すればよいかと。
52
+
53
+ ソートも対応したバージョンです。Pathlibでsearch_dirとかも変えれると思うので、質問文のプログラムを長く使う予定ならPathlibについて調べてみることをお勧めします。
54
+
55
+ ```Python
56
+
57
+ # -*- coding: utf-8 -*-
58
+
59
+ import os
60
+
61
+ import shutil
62
+
63
+ import numpy as np
64
+
65
+ from PIL import Image
66
+
67
+ from skimage import data
68
+
69
+ from sklearn.cluster import KMeans
70
+
71
+ import glob
72
+
73
+ from pathlib import Path
74
+
75
+ # 1. 3次元配列の画像データを2次元配列のデータに変換
76
+
77
+ search_dir = './img/img_convert'
78
+
79
+ # ソート
80
+
81
+ search_data = sorted(glob.glob(search_dir + '/*.jpg'))
82
+
83
+ feature = np.array([data.imread(path) for path in search_data])
84
+
85
+ feature = feature.reshape(len(feature), -1).astype(np.float64)
86
+
87
+ # 2. 学習(5種類のグループにクラスタリングする)
88
+
89
+ model = KMeans(n_clusters=5).fit(feature)
90
+
91
+ # 3. 学習結果のラベル
92
+
93
+ labels = model.labels_
94
+
95
+
96
+
97
+ #
98
+
99
+ move_dir = Path('./img/img_group/')
100
+
101
+ # ディレクトリ作成
102
+
103
+ move_dir.mkdir(parents=True, exist_ok=True)
104
+
105
+ for label, path in zip(labels, search_data):
106
+
107
+ src_file = Path(search_dir, path)
108
+
109
+ shutil.move(str(src_file), str(move_dir / str(label)))
110
+
111
+ ```