今回は画像認識AIのお話。
- AIってどんなものか簡単に使ってみたい。でも難しいんでしょう?
- 画像認識というものをやってみたい。
- AIに機械学習なんてさせてる時間はない。
- お腹痛い。昼飯食い過ぎたなぁ。
って方におすすめの記事です。サクッと簡単にpythonで画像認識AIを使ってみましょう。
10分後には画像認識ができるようになっています。
pythonで画像認識AIを使ってみる
今回は機械学習向けのライブラリtensorflowを使っていきます。
そしてVGG16という学習モデルを使っています。
画像認識AIに必要なライブラリをインストールしておきます。
pip3 install tensorflow
pip3 install pillow
VGG16モデル(学習済み)の利用
VGG16モデルという畳み込み13層とフル結合3層の合計16層から成る学習モデルあお扱います(..だからVGG16って言うのか。)
なんと嬉しいことに、今回は学習済みモデルを使用していきます。
大規模画像データセットである「ImageNet」を使って既に学習済みです。
自分で学習をさせる必要はないので簡単に素早く画像認識AIというものを体験することができます。
ソースを貼っておきます。
from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
import sys
model = VGG16(weights='imagenet')
selectimage = sys.argv[1]
img = image.load_img(selectimage, target_size=(224, 224))
array = image.img_to_array(img)
array = np.expand_dims(array, axis=0)
preds = model.predict(preprocess_input(array))
results = decode_predictions(preds, top=5)[0]
for result in results:
print(result[1], result[2])
selectimage = sys.argv[1]
第一引数を認識対象とするVGG16(weights='imagenet')
ImageNetを用いて学習されたVGG16モデルの使用decode_predictions(preds, top=5)
上位5番目まで結果に格納
たった10数行のソースコードで画像認識AIが使えます。
使い方は以下のように第一引数に画像を指定します。(PNG or JPG)
python3 image_AI.py 認識させたい画像.jpg
初回の1発目はImageNetを扱う際に必要なデータをダウンロードしてきますので、少々時間がかかります。
無駄なデータでPC内を汚さないように仮想環境を作成しておくことをおすすめします。
以下を参考にしても良いですね。
ではでは、試しにアマガエルの画像を認識させてみると
結果が以下のようになりました。
tree_frog 0.93102634
tailed_frog 0.067323536
bullfrog 0.0013145392
green_lizard 0.00011126943
American_chameleon 0.000108827546
OKですね。約93%の認識率でアマガエル(tree_frog)と認識しています。
2位:尾カエル、3位:ウシガエル、4位:緑のトカゲ、5位:アメリカントカゲとなっており、大体似たような系統のものだと判定しています。賢い!!
出力結果を日本語にしたい
学習済みのVGG16モデルを使えばサクッと画像認識AIを扱えることが体験できましたね。
しかし、出力結果が英語なのがちょっと分かりにくいかな..。日本語にしてみます。
追加で翻訳用のライブラリをインストールします。
pip3 install googletrans
ソースをサクッと改変しておきます。(日本語対応にします)
#from tensorflow import keras
from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
import sys
from googletrans import Translator #翻訳用
model = VGG16(weights='imagenet')
translator = Translator() #翻訳用
selectimage = sys.argv[1]
img = image.load_img(selectimage, target_size=(224, 224))
array = image.img_to_array(img)
array = np.expand_dims(array, axis=0)
preds = model.predict(preprocess_input(array))
results = decode_predictions(preds, top=5)[0]
for result in results:
print(translator.translate(result[1].replace('_', '-'),src='en', dest='ja').text, result[2])
たった3行の改変で日本語対応できます。(どこが変わったでしょう。これが分かれば知能レベルは84)
日本語対応と言いながらただ英語を翻訳しているだけですが...。(たまにわけ分からない日本語に変換されていることもあります。)
さきほどのアマガエルの結果は
アマガエル 0.93102634
尾カエル 0.067323536
ウシガエル 0.0013145392
緑のトカゲ 0.00011126943
アメリカンカメレオン 0.000108827546
となりました。しっかり日本語に翻訳されています。
おまけ
試しに僕の写真を認識させてみました。結果はこんな感じ。
新郎 0.12038448
キャンドル 0.076033756
中華鍋 0.052184872
スーツ 0.05089079
おたま 0.04857272
結果にゴリラとかチンパンジーが出てきて。「おい!誰がゴリラやねん!!」って突っ込む気満々だったのに。
予想外の結果。中華鍋??おたま??キャンドル??...ゴリラよりも面白い結果になった。
というのもImageNetの学習データに人間のラベルはないようだ。
認識できるラベルは以下のページを参考に。
これ以外はほぼ認識できないというわけだ。そりゃあ。僕も中華鍋に認識されるよな...。
ということで、pythonで画像認識AIをサクッと使ってみた。
ばいちゃ
コメント