オリジナルの写真を作成したCNNモデルで判定
実行結果
上手く出力できた。
プログラムを見ていく。
必要な変数の定義
im_rows、im_clos、im_colorには使用する画像の情報を定義。
in_shapeには入力層で使用する入力を定義。
今回使用するラベルデータは0,1,2の順番で寿司、サラダ、麻婆豆腐なのでLABELSにはその順番になる様に定義。
保存したCNNモデルの読み込み
hanamichi-sukusuku.hatenablog.com
cnn_modelは上記リンクで作成したCNNのモデルを構築するための関数を使用するために冒頭でインポートしている。cnn_model.pyのget_model()関数に入力値、出力値を引数に渡すことでCNNモデルを返り値として受け取ることができる。
hanamichi-sukusuku.hatenablog.com
model.load_weightsで上記で作成した重みデータを取得。
テストしたい画像で関数の実行
check_photo_str()関数
この関数ではcheck_photo()関数に画像のパスを渡して返り値として最も確率の高いラベルデータ(idx)とその確率(per)を取得して、モデルの予測結果がどの料理を指しているのかとカロリー数、確率を出力している。
check_photo()関数、テスト画像を予測し、呼び出し元に結果を返す
Image.open()でPillowを使用して画像を読み込む。
生成したImgaeオブジェクトをconvertで色空間変換。
resize()でサイズ変更。
plt.imshow()でプロットに描画、plt.show()で表示。
モデルで使用できる様に、画像データをnumpy形式に変換、三次元配列に変換、255で割ることで0.0~1.0で表現できる様に変換。
model.predict()で変換したデータの結果を予測。
argmax()で予測結果から最も値の大きいインデックス番号を出力。
int()では引数に渡した値を整数に変換して出力する。