回答編集履歴

3

修正

2020/06/19 14:49

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -7,6 +7,14 @@
7
7
 
8
8
 
9
9
  ![イメージ説明](66766755f398e249b1b85174ee9f8c00.png)
10
+
11
+
12
+
13
+ 以下の手順で作成しました。
14
+
15
+ 1. ペイントを開いて、100x100 とか縦横が同じ大きさのキャンバスを作成する
16
+
17
+ 2. 白い背景に黒いペンで数字を書く
10
18
 
11
19
 
12
20
 

2

修正

2020/06/19 14:49

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
 
66
66
 
67
- data = imageToData("92.png")
67
+ data = imageToData("9.png")
68
68
 
69
69
  predictDigits(data)
70
70
 

1

修正

2020/06/19 14:43

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -2,112 +2,70 @@
2
2
 
3
3
 
4
4
 
5
- 自作した画像は**背景にい文字**で作成しましたか?
5
+ 自作した画像は**白い背景にい文字**で作成しましたか?
6
6
 
7
7
 
8
8
 
9
- ![イメージ説明](a59544f8f22371aff9fcab936cf47a3e.png)
9
+ ![イメージ説明](66766755f398e249b1b85174ee9f8c00.png)
10
-
11
-
12
-
13
- ![イメージ説明](1e07e8989750e6eb93cdbab39226abff.png)
14
10
 
15
11
 
16
12
 
17
13
  ```python
18
14
 
19
- import matplotlib.pyplot as plt
15
+ import sklearn.datasets
20
16
 
21
- import numpy as np
17
+ import sklearn.svm
22
18
 
23
- from PIL import Image
19
+ import PIL.Image
24
20
 
25
- from sklearn.datasets import load_digits
26
-
27
- from sklearn.metrics import accuracy_score
28
-
29
- from sklearn.svm import SVC
21
+ import numpy
30
22
 
31
23
 
32
24
 
33
25
 
34
26
 
35
- def load_img(filename):
27
+ def imageToData(filename):
36
28
 
37
- img = Image.open(filename).convert("L")
29
+ grayImage = PIL.Image.open(filename).convert("L")
38
30
 
39
- img = img.resize((8, 8), Image.ANTIALIAS)
31
+ grayImage = grayImage.resize((8, 8), PIL.Image.ANTIALIAS)
40
32
 
41
- # uint8 -> float
33
+ numImage = numpy.asarray(grayImage, dtype=float)
42
34
 
43
- img = np.array(img, dtype=float)
35
+ numImage = numpy.floor(16 - 16 * (numImage / 256))
44
36
 
45
- # [0, 255] -> [0, 16] にスケールする。
46
-
47
- img = 16 * (img - img.min()) / (img.max() - img.min())
48
-
49
- # (8, 8) -> (64,)
50
-
51
- img = img.flatten()
37
+ numImage = numImage.flatten()
52
38
 
53
39
 
54
40
 
55
- return img
41
+ return numImage
56
42
 
57
43
 
58
44
 
59
45
 
60
46
 
61
- def show_digit(x):
47
+ def predictDigits(data):
62
48
 
63
- x = x.reshape(8, 8)
49
+ digits = sklearn.datasets.load_digits()
64
50
 
65
51
 
66
52
 
67
- fig, ax = plt.subplots()
53
+ clf = sklearn.svm.SVC(gamma=0.001)
68
54
 
69
- ax.imshow(x, cmap="gray")
55
+ clf.fit(digits.data, digits.target)
70
56
 
57
+
58
+
71
- plt.show()
59
+ n = clf.predict([data])
60
+
61
+ print("予測=", n)
72
62
 
73
63
 
74
64
 
75
65
 
76
66
 
77
- def pred_img(filename):
67
+ data = imageToData("92.png")
78
68
 
79
- data = load_img(filename)
80
-
81
- pred = clf.predict([data])
82
-
83
-
84
-
85
- show_digit(data)
69
+ predictDigits(data)
86
-
87
- print(pred)
88
-
89
-
90
-
91
-
92
-
93
- digits = load_digits()
94
-
95
- clf = SVC(gamma=0.001).fit(digits.data, digits.target)
96
-
97
- pred = clf.predict(digits.data)
98
-
99
-
100
-
101
- # 学習データに対する精度を確認
102
-
103
- accuracy = accuracy_score(digits.target, pred)
104
-
105
- print(f"{accuracy:.2%}")
106
-
107
-
108
-
109
- pred_img("2.png")
110
-
111
- pred_img("9.png")
112
70
 
113
71
  ```