質問編集履歴

2

書式変更

2019/10/18 06:42

投稿

hglkmnlkygmnl
hglkmnlkygmnl

スコア6

test CHANGED
@@ -1 +1 @@
1
- agmerakjngkjangjkranjbnr
1
+ pyhton 画像処理
test CHANGED
@@ -1 +1,227 @@
1
+ ```python
2
+
3
+ このコードとほか3つのファイルで機械学習を行います。
4
+
5
+
6
+
7
+ import numpy as np
8
+
9
+ import pandas as pd
10
+
11
+ import cv2
12
+
1
- sgrehareahoimergmaow:emhpodjmbgpoeramgpoerwmgvpoewmoigvmewv
13
+ from chainer.datasets import tuple_dataset
14
+
15
+ from random import getrandbits
16
+
17
+
18
+
19
+ #学習に関する基本情報の定義
20
+
21
+ NUM_SHAPE = 48 #画像一辺の長さ
22
+
23
+ TRAIN_DATA_SIZE_MAG = 2 #水増しで元のデータサイズの何倍の量まで増やすか
24
+
25
+
26
+
27
+
28
+
29
+ #Csvファイルから画像とラベルを読み込む
30
+
31
+ def dataFromCsv(csvfile):
32
+
33
+
34
+
35
+ data = pd.read_csv(csvfile,delimiter=',')
36
+
37
+
38
+
39
+ train_data = data[data['Usage']=='Training']
40
+
41
+ publictest_data = data[data['Usage']=='PublicTest']
42
+
43
+ privatetest_data = data[data['Usage']=='PrivateTest']
44
+
45
+
46
+
47
+ #1行のデータを画像のカタチにする(画像枚数、1、縦、横)
48
+
49
+ train_x = pixelsToArray_x(train_data)
50
+
51
+ publictest_x = pixelsToArray_x(publictest_data)
52
+
53
+ privatetest_x = pixelsToArray_x(privatetest_data)
54
+
55
+
56
+
57
+ #ラベルは["neutral","happiness","surprise","sadness","anger","disgust","fear","contempt","unknown,NA"]
58
+
59
+ #NA以外をyに入れる
60
+
61
+ #各画像へのラベルは合計10になるので、10で割って0-1にする
62
+
63
+ train_y = np.array(train_data.iloc[:,2:11],dtype=np.float32)/10
64
+
65
+ publictest_y = np.array(publictest_data.iloc[:,2:11],dtype=np.float32)/10
66
+
67
+ privatetest_y = np.array(privatetest_data.iloc[:,2:11],dtype=np.float32)/10
68
+
69
+
70
+
71
+ #水増し
72
+
73
+ train_x,train_y = augmentation(train_x,train_y)
74
+
75
+
76
+
77
+ #tuple化
78
+
79
+ train = tuple_dataset.TupleDataset(train_x,train_y)
80
+
81
+ publictest = tuple_dataset.TupleDataset(publictest_x,publictest_y)
82
+
83
+ privatetest = tuple_dataset.TupleDataset(privatetest_x,privatetest_y)
84
+
85
+
86
+
87
+ return train,publictest,privatetest
88
+
89
+
90
+
91
+
92
+
93
+ #水増し(holizontal Flip,Scale augmentation)
94
+
95
+ def augmentation(x_array,y_array,train_data_size_mag = TRAIN_DATA_SIZE_MAG):
96
+
97
+
98
+
99
+ #データ変換の処理4つ
100
+
101
+ #関数が適用されるかはランダム
102
+
103
+ def normalization(img):
104
+
105
+ return (img - np.mean(img))/np.std(img)
106
+
107
+
108
+
109
+ def gausianNoise(img):
110
+
111
+ MEAN = 0
112
+
113
+ SIGMA = 15
114
+
115
+
116
+
117
+ gaussfilter = np.random.normal(MEAN,SIGMA,(img.shape))
118
+
119
+ return img + gaussfilter
120
+
121
+
122
+
123
+ def holizontalFlip(img):
124
+
125
+ return img[:,::-1]
126
+
127
+
128
+
129
+ def scaleAugmentation(img):
130
+
131
+ SCALE_MIN = 50
132
+
133
+ SCALE_MAX = 80
134
+
135
+
136
+
137
+ #拡大処理、入力された画像サイズ48*48に対して、50*50~80*80まで拡大
138
+
139
+ SCALE_SIZE = np.random.randint(SCALE_MIN,SCALE_MAX)
140
+
141
+
142
+
143
+ #リサイズ
144
+
145
+ scale_img = cv2.resize(img,(SCALE_SIZE,SCALE_SIZE))
146
+
147
+
148
+
149
+ top = np.random.randint(0,SCALE_SIZE-NUM_SHAPE)
150
+
151
+ left = np.random.randint(0,SCALE_SIZE-NUM_SHAPE)
152
+
153
+ bottom = top + NUM_SHAPE
154
+
155
+ right = left + NUM_SHAPE
156
+
157
+
158
+
159
+ return scale_img[top:bottom,left:right]
160
+
161
+
162
+
163
+
164
+
165
+ def activateAugmentFforArray(f,x_array,activateP):
166
+
167
+
168
+
169
+ #変換用関数fを画像に適用させるかどうかをランダムに決める
170
+
171
+ def randActivateF(f,img):
172
+
173
+ if np.random.rand()>activateP:
174
+
175
+ return img
176
+
177
+ return f(img)
178
+
179
+
180
+
181
+ imglist = []
182
+
183
+ #x_arrayは[データ数,色数,縦,横]なので2回ループして画像毎の関数を(ランダムに)適用
184
+
185
+ for imgC in x_array:
186
+
187
+ imglist.append([randActivateF(f,img) for img in imgC])
188
+
189
+
190
+
191
+ return np.array(imglist)
192
+
193
+
194
+
195
+ #変換処理対象データをtrain_data_size_mag-1用意(1セットは元の画像にするため-1)
196
+
197
+ changed_x_array = np.concatenate([x_array]*(train_data_size_mag-1),axis=0)
198
+
199
+
200
+
201
+ #変換の種類ごとにactivateAugmentFforArrayを適用して、画像の変換(もしくは無変換)を行う
202
+
203
+ changed_x_array = activateAugmentFforArray(normalization,changed_x_array,0.2)
204
+
205
+ changed_x_array = activateAugmentFforArray(gausianNoise,changed_x_array,0.2)
206
+
207
+ changed_x_array = activateAugmentFforArray(holizontalFlip,changed_x_array,1)
208
+
209
+ changed_x_array = activateAugmentFforArray(scaleAugmentation,changed_x_array,0.2)
210
+
211
+
212
+
213
+ return np.concatenate([x_array,changed_x_array],axis=0).astype(np.float32),np.concatenate([y_array]*train_data_size_mag,axis=0)
214
+
215
+
216
+
217
+ #1行のデータを画像の形にする
218
+
219
+ def pixelsToArray_x(data):
220
+
221
+ np_x = np.array([np.fromstring(image,np.float32,sep=' ')/255 for image in np.array(data['pixels'])])
222
+
223
+ np_x.shape =(np_x.shape[0],1,NUM_SHAPE,NUM_SHAPE)
224
+
225
+ return np_x
226
+
227
+ ```

1

書式変更

2019/10/18 06:42

投稿

hglkmnlkygmnl
hglkmnlkygmnl

スコア6

test CHANGED
@@ -1 +1 @@
1
- python 画像処理 csv
1
+ agmerakjngkjangjkranjbnr
test CHANGED
@@ -1,157 +1 @@
1
- ### 前提・実現したいこと
2
-
3
-
4
-
5
- 表情推定のシステムを作っています。
6
-
7
- 1行のデータを画像の形にする機能を実装中に以下のエラーメッセージが発生しました。
8
-
9
- KeyErrorなので--> 108 np_x = np.array([np.fromstring(image,np.float32,sep=' ')/255 for image in np.array(data['pixels'])])
10
-
11
- この行に間違いがあると考えています。
12
-
13
-
14
-
15
- ### 発生している問題・エラーメッセージ
16
-
17
-
18
-
19
- ```
20
-
21
- KeyError: 'pixels'
22
-
23
-
24
-
25
- During handling of the above exception, another exception occurred:
1
+ sgrehareahoimergmaow:emhpodjmbgpoeramgpoerwmgvpoewmoigvmewv
26
-
27
-
28
-
29
- KeyError Traceback (most recent call last)
30
-
31
- 5 frames
32
-
33
- <ipython-input-29-5fdb17262fe7> in <module>()
34
-
35
- 31 if __name__ == "__main__":
36
-
37
- 32
38
-
39
- ---> 33 test("gdrive/My Drive/myferdata.csv","saved_model/myresnet.npz")
40
-
41
-
42
-
43
- <ipython-input-29-5fdb17262fe7> in test(csvfile, m)
44
-
45
- 9 def test(csvfile,m):
46
-
47
- 10
48
-
49
- ---> 11 _,_,privatetest = dataFromCsv(csvfile)
50
-
51
- 12 model = Resnet.ResNet()
52
-
53
- 13
54
-
55
-
56
-
57
- <ipython-input-27-68efd0820676> in dataFromCsv(csvfile)
58
-
59
- 20
60
-
61
- 21 #1行のデータを画像のカタチにする(画像枚数、1、縦、横)
62
-
63
- ---> 22 train_x = pixelsToArray_x(train_data)
64
-
65
- 23 publictest_x = pixelsToArray_x(publictest_data)
66
-
67
- 24 privatetest_x = pixelsToArray_x(privatetest_data)
68
-
69
-
70
-
71
- <ipython-input-27-68efd0820676> in pixelsToArray_x(data)
72
-
73
- 106 #1行のデータを画像の形にする
74
-
75
- 107 def pixelsToArray_x(data):
76
-
77
- --> 108 np_x = np.array([np.fromstring(image,np.float32,sep=' ')/255 for image in np.array(data['pixels'])])
78
-
79
- 109 np_x.shape =(np_x.shape[0],1,NUM_SHAPE,NUM_SHAPE)
80
-
81
- 110 return np_x
82
-
83
-
84
-
85
- /usr/local/lib/python3.6/dist-packages/pandas/core/frame.py in __getitem__(self, key)
86
-
87
- 2925 if self.columns.nlevels > 1:
88
-
89
- 2926 return self._getitem_multilevel(key)
90
-
91
- -> 2927 indexer = self.columns.get_loc(key)
92
-
93
- 2928 if is_integer(indexer):
94
-
95
- 2929 indexer = [indexer]
96
-
97
-
98
-
99
- /usr/local/lib/python3.6/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
100
-
101
- 2657 return self._engine.get_loc(key)
102
-
103
- 2658 except KeyError:
104
-
105
- -> 2659 return self._engine.get_loc(self._maybe_cast_indexer(key))
106
-
107
- 2660 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
108
-
109
- 2661 if indexer.ndim > 1 or indexer.size > 1:
110
-
111
-
112
-
113
- pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
114
-
115
-
116
-
117
- pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
118
-
119
-
120
-
121
- pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
122
-
123
-
124
-
125
- pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
126
-
127
-
128
-
129
- KeyError: 'pixels'
130
-
131
- ```
132
-
133
-
134
-
135
- ### 該当のソースコード
136
-
137
-
138
-
139
- ```python (colaboratory)
140
-
141
- def pixelsToArray_x(data):
142
-
143
- np_x = np.array([np.fromstring(image,np.float32,sep=' ')/255 for image in np.array(data['pixels'])])
144
-
145
- np_x.shape =(np_x.shape[0],1,NUM_SHAPE,NUM_SHAPE)
146
-
147
- return np_x
148
-
149
- ```
150
-
151
-
152
-
153
- ### 試したこと
154
-
155
-
156
-
157
- pythonの画像処理について調べました。