画像を用意済み。
画像サイズは864x1152pxなので、(48, 64)にします。
データラベルは、FIRE微糖=0、Georgia blend=1、BLACK無糖=2 とします。
リサイズして、一次元に展開して配列に入れる。
import cv2 import os, glob import joblib from sklearn.model_selection import train_test_split from sklearn import datasets, metrics from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score image_size = (48, 64) # 864:1152(3:4)の画像の為 path_black = "img/black" path_fire = "img/fire" path_georgia = "img/georgia" x = [] # 画像 y = [] # ラベル def read_dir(path, label): files = glob.glob(path + "/*.jpg") for f in files: img = cv2.imread(f) img = cv2.resize(img, image_size) img_data = img.reshape(-1, ) x.append(img_data) y.append(label) read_dir(path_black, 0) read_dir(path_fire, 1) read_dir(path_georgia, 2) x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) clf = RandomForestClassifier() clf.fit(x_train, y_train) y_pred = clf.predict(x_test) print(accuracy_score(y_test, y_pred))
6回テストしてaccuracy_scoreはこんな感じ。平均して91%くらい。
$ python3 app.py
0.8333333333333334
$ python3 app.py
1.0
$ python3 app.py
1.0
$ python3 app.py
1.0
$ python3 app.py
0.6666666666666666
$ python3 app.py
1.0
91%の精度ってどうなんだろう。画像を取る角度を一定にすれば、もっと精度は上がりそうな気がする。