Pythonの便利なライブラリであるKerasを使って、画像中の猫の種別を判別するコードを書いてみました。
学習済みモデルを使って画像を判別してみます。
[toc]
準備
TensorflowとKerasを使用します。Anaconda等で仮想環境を作成し、以下のコマンドでインストールします。
pip install tensorflow pip install keras
jupyter notebook上でコードを書いていきます。
VGG16を使った予測
学習済みモデルVGG16を使って、予測するコードを記載していきます。
%matplotlib inline from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions from keras.preprocessing import image from PIL import Image import matplotlib.pyplot as plt import numpy as np import sys model = VGG16(weights='imagenet') def predict(filename, featuresize): img = image.load_img(filename,target_size=(224,224)) x = image.img_to_array(img) x = np.expand_dims(x,axis=0) preds = model.predict(preprocess_input(x)) results = decode_predictions(preds,top=featuresize)[0] return results def showim(filename): im = Image.open(filename) im_list = np.asarray(im) plt.figure(figsize=(20,10)) plt.subplot(2,5,1) plt.imshow(im_list)
VGG16()関数を使って、モデルをダウンロードしてきます。モデルサイズが500M程度あるので、初回実行時には3分程度かかります。
predict関数のfilenameは画像のファイル名です。featuresizeは予測結果の数です。5と指定した場合には、予測結果の上位5つが表示されます。
読み込んだ画像を表示するshowim()関数も作っておきます。
画像の判別
画像はなんでも良いのですが、適当な猫の画像をネットから拾ってきて判別してみました。
import pprint filename = "data/keras/neko1869.jpg" showim(filename) # AIが判別した上位5個を表示する results = predict(filename,5) pprint.pprint(results)
実行結果は以下の通り。

「tiger_cat」はその名の通り、「虎猫」ですね。「tabby」は何でしょう。辞書で調べてみると「虎猫、ぶち猫」。
とりあえずなんらかの猫と判別されたようです。
犬
せっかくなので、他の画像もやっています。

ケルピーは犬のようです。合ってますね。
オーストラリアン・ケルピーとは、オーストラリア原産の牧羊犬種である。
ゾウ
これも正解です。

おわり。