前提・実現したいこと
3種類のラベル(画像A, B, C)に判別できる画像群の画像分類モデルをkerasにて構築し、予測モデル(ImageClassifier.h5)を保存しました。
この予測モデルをload_modelで読み込み、あるフォルダ(フォルダ名:predict)の中にある画像150枚すべての判別を実行しようとしています。
その際に各ラベルの画像が何枚フォルダ中に存在したか下記のような棒グラフで可視化したいと考えています。
for文の中で予測したそれぞれの画像のラベル数を集計し、seabornのcounterplot等を使って棒グラフが作成できればと思っていますが、下記コードから進むことができません。
現在のコード
#ライブラリのインポート import os from pathlib import Path import matplotlib.pyplot as plt import numpy as np import pandas as pd import keras.models from keras.models import Model from keras.models import load_model from keras.preprocessing.image import img_to_array, load_img input_image_size = 224 labels = ['A','B','C'] model = load_model('ImageClassifier.h5') #パスの設定 program_path = Path(__file__).parent.resolve() parent_path = program_path.parent.resolve() data_path = parent_path / 'data' data_processed_path = data_path / 'processed' predict_dir = os.path.join(data_processed_path, 'predict') #予想する画像が入ったファイル files = os.listdir(predict_dir) n_files = len(files) #モデルを使った予測 for i in range(n_files): predict_img_path = os.path.join(predict_dir, files[i]) predict_img_name = os.path.basename(predict_img_path) predict_img_onlyname = os.path.splitext(predict_img_name)[0] temp_img = load_img(predict_img_path,target_size=(input_image_size,input_image_size)) #Images normalization temp_img_array = img_to_array(temp_img) temp_img_array = temp_img_array.astype('float32')/255.0 temp_img_array = temp_img_array.reshape((1,input_image_size,input_image_size,3)) #predict results img_pred = model.predict(temp_img_array) label_pred = labels[np.argmax(img_pred)] print('画像名:' + predict_img_onlyname + ', 予想ラベル名:' + label_pred +':' + str(round(max(img_pred[0]),2))) print(label_pred.count('A')) print(label_pred.count('B')) print(label_pred.count('C'))
現在の状況
上記コードでフォルダ内の各画像の予測ができていることは確認済みです。
またlabel_pred.countで各ラベルの数も抽出できていると思いますが、
for文で繰り返した全ての画像に対して数を集計しプロットするやり方が思いつきません。
ご助言の程よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 13:35
2020/07/20 13:38
2020/07/20 14:02