【初心者向け】Pythonで画像認識AIをプログラミング【Tensorflow】

プログラミング入門として、Pythonで画像認識を行うプログラムを解説します。

「AIを学びたいけど、どの解説も理論ばかりでよくわからん」
という方に向けて、理論は最小限にまずはご自身のPCにプログラミング環境を用意し、実際にAIプログラミングを体験することで最初のステップ踏んでみようという記事です。

今回はPython向けの機械学習ライブラリのTensorflowを使用します。
Tensorflowの学習済みのモデルであるInceptionV3を活用することで、初心者でも簡単にAI画像認識を体験することができます。
AI技術に興味がある方はぜひ参考にしてください。

作業時間はおよそ30分程度を目安に進めることができます。

\無料で受けられるPython入門講座/

目次

どんなものをプログラミングするか

今回は、AIによる画像認識を実現するために、TensorFlow(テンソルフロー)を使用します。
TensorFlowはGoogleが提供するPython向けの機械学習を行うための機能をまとめたものです。(ライブラリと呼ばれます。)

今回は学習済のAIを使う

一般的に画像認識を行うには、膨大な画像データを事前に学習させる必要がありますが、TensorFlowにはInceptionV3という高性能な学習済モデルが用意されています。
InceptionV3は、動物、建物、自然景観など様々な画像を高い精度で識別することができます。

この学習済みのInceptionV3を活用することで、初心者でも簡単に画像認識AIを作成し、実際に体感することができます。

何の画像か当ててもらう

環境について

今回の解説は、PCにPython3、Tensorflow、NumPy、PIL、Googletransをインストールした環境で行います。
また、Pythonの開発環境として、Visual Studio Code(VS Code)をおすすめしています。
まだインストールしていない場合は、次の記事を参考にしてください。

Windowsの場合

Pythonをまだインストールしていない方はこちらから

あわせて読みたい
【Windows】Pythonのインストール手順 Windows11にPython(パイソン)をインストールする手順を解説します。 作業時間は15分程度です。 【インストール環境】 参考までに今回インストールした環境は次の通りで...

Tensorflowをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】WindowsにTensorFlowをインストール【Python】 WindowsにTensorFlow(テンソルフロー)をインストールする手順を解説します TensorFlowは機械学習やディープラーニングに必要な機能をまとめたライブラリです。初心者で...

NumPyをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】WindowsにNumPyをインストール【Python】 WindowsにNumPyをインストールする手順を解説します NumPy(Numerical Python)はPythonで数値計算を行うためのライブラリです。高速な配列処理や線形代数計算などの数学...

PILをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】WindowsにPillow(PIL)をインストール【Python】 WindowsにPython用のPillow(PIL)をインストールする手順を解説しますPIL(Python Imaging Library)はPythonで画像処理を行うためのライブラリです。 作業時間は5分程度で...

Googletransをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】WindowsにGoogletransをインストール【Python】 WindowsにGoogletransをインストールする手順を解説します Googletrans(グーグルトランス)はPythonでGoogleの翻訳機能を利用するためのライブラリです。多くの言語に対...

VS Codeをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】WindowsにVisual Studio Code(日本語)をインストールする手順【Python設定】 WindowsにVisual Studio Code(VS Code)をインストールする手順と、プログラミング言語『Python』の設定までを解説します。作業時間は30分程度です。 VS Codeはプログラ...

Ubuntu(Linux)の場合

学習用にLinux環境でプログラミングしたい場合はこちらの記事を参考にしてください。
UbuntuはあらかじめPythonがインストールされています。

あわせて読みたい
【初心者向け】Ubuntu 22.04 LTS(日本語)のインストール手順【VirtualBox】 VirtualBox7.0に対応しました。 Ubuntu 22.04 Jammy Jellyfishのインストール手順と日本語入力設定までを解説します。 今回はVirtualBoxを使って仮想マシン上にインスト...

TensorFlowをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】UbuntuにTensorFlowをインストール【Python】 UbuntuにTensorFlow(テンソルフロー)をインストールする手順を解説します TensorFlowは機械学習やディープラーニングに必要な機能をまとめたライブラリです。初心者でも...

NumPyをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】UbuntuにNumPyをインストール【Python】 UbuntuにNumPyをインストールする手順を解説します NumPy(Numerical Python)はPythonで数値計算を行うためのライブラリです。高速な配列処理や線形代数計算などの数学的...

PILをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】UbuntuにPillow(PIL)をインストール【Python】 UbuntuにPython用のPillow(PIL)をインストールする手順を解説しますPIL(Python Imaging Library)はPythonで画像処理を行うためのライブラリです。 PILがインストールさ...

Googletransをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】UbuntuにGoogletransをインストール【Python】 UbuntuにGoogletransをインストールする手順を解説します Googletrans(グーグルトランス)はPythonでGoogleの翻訳機能を利用するためのライブラリです。多くの言語に対応...

VS Codeをまだインストールしていない方はこちらから

あわせて読みたい
【初心者向け】Ubuntu22.04にVisual Studio Code(日本語)をインストールする手順 Ubuntu 22.04 LTSにVisual Studio Codeをインストールする手順と、Pythonの開発環境の導入、プログラミング、実行方法までを解説します。 作業時間は10分程度です。 Ubu...

Google Colaboratoryの場合

Google Colaboratory環境でプログラミングしたい場合はこちらの記事を参考にしてください。

Google Colaboratory(略称Colab)はGoogleが提供するクラウド上の開発環境です。
無料で利用することができます。
面倒な環境構築は不要で、Pythonのコードを簡単に実行できます。

あわせて読みたい
【初心者向け】Google Colaboratoryで始めるPython入門 Google Colaboratory(グーグルコラボラトリー)を使ったPythonのプログラミング、実行方法までを解説します。 作業時間は5分程度を目安に進めることができます。 Google ...

Google ColabにはあらかじめPython3、Tensorflow、NumPy、PILがインストール済です。
Googletransは別途インストールが必要です。こちらの記事を参考にしてください。

あわせて読みたい
【初心者向け】Google ColaboratoryにGoogletransをインストール Google ColaboratoryにGoogletransをインストールする手順を解説します Googletrans(グーグルトランス)はPythonでGoogleの翻訳機能を利用するためのライブラリです。多...

\無料で受けられるPython入門講座/

画像を用意

認識させるための画像を用意しましょう。
縦横の長さが同じ、正方形の画像が適しています。
被写体が鮮明で画面中央にあると予測率が高くなります。

手元に画像ファイルがなければこちらのサンプル画像を使ってください。

以下のボタンからダウンロードしてください。
ダウンロードされない場合は[右クリック]⇒[名前を付けてリンク先を保存]等をお試しください。

用意した画像はPythonファイルと同じ階層に置いておきましょう。
名前は何でもかまいません。今回は『ImageRecognition.py』としました。
中身については以降で解説します。

ソースコードと同階層に配置

『○○○.png』のようなファイル末尾の文字(拡張子)が表示されない場合はこちらを参考にしてください。

あわせて読みたい
【初心者向け】ファイルの拡張子を表示する【Windows11】 Windows11でファイルの拡張子を表示する手順を解説します。作業時間は1分程度です。 拡張子はファイルの末尾に付与される文字列です。たとえばテキストファイルであれば...

Google Colabを使う場合はファイルの扱い方が若干変わるので、こちらの記事を参考にファイルを配置してください。

あわせて読みたい
【初心者向け】Google Colaboratoryで画像を表示【PIL】 プログラミング入門として、Google Colaboratoryで任意の画像を表示するプログラムを作成します。 今回はPythonの画像処理ライブラリのPIL(Python Imaging Library)を使...

AI画像認識をプログラミング

用意した画像を認識させるプログラムを作成してみます。

用意したPythonファイル(○○〇.py)に、次のように記述してみましょう。
入力が面倒な場合はコピペしてください。
解説は後述します。

import tensorflow as tf
import numpy as np
from PIL import Image
from googletrans import Translator

# 画像の読み込み
image = Image.open("food.jpg")

# 画像の前処理
image = image.resize((299, 299))
image_array = np.array(image) / 255.0
image_array = np.expand_dims(image_array, axis=0)

# 学習済みモデルのロード
model = tf.keras.applications.InceptionV3()

# 画像に対する予測の実行
predictions = model.predict(image_array)

# 予測結果の出力
predicted_class = tf.keras.applications.inception_v3.decode_predictions(predictions)[0][0]

text_en = predicted_class[1]
confidence = int(predicted_class[2] * 100)

# 予測結果を日本語訳
text_ja = Translator().translate(text_en, dest='ja').text

print("予測結果: " + text_ja)
print("信頼度: " + str(confidence) + "%")

7行目の”food.jpg”はご自身が用意した画像ファイル名を入力してください。

入力できたら実行してみましょう。
VS Codeを使っている場合は画面右上の実行ボタン▷から実行できます。

実行結果は次のようになります。

1/1 [==============================] - 2s 2s/step
予測結果: ピザ
信頼度: 79%

予測結果として『ピザ』、信頼度は『79%』と出力されました。
正しく画像認識されたようです。

もうひとつの画像でも試してみました。
下記の行のファイル名を変更し、同様に実行してみます。

# 画像の読み込み
image = Image.open("animal.jpg")
animal.jpg

実行結果は次のようになりました。

1/1 [==============================] - 1s 1s/step
予測結果: 水牛
信頼度: 75%

予測結果として『水牛』、信頼度は『75%』と出力されました。

\未経験でも”AI”を基礎から学べる Python特化型プログラミングスクール/

解説

作成したプログラムについて解説していきます。

インポート

最初の4行は今回の画像認識に必要な機能の準備を行っています。
これらの機能群は『ライブラリ』と呼ばれます。

import tensorflow as tf
import numpy as np
from PIL import Image
from googletrans import Translator

1行目ではTensorflowを使うための準備を行っています。
TensorFlowは機械学習やディープラーニングに必要な機能をまとめたライブラリです。
末尾に『as tf』と記述することで、以降は『tensorflow』を『tf』と省略して参照することができます。

import tensorflow as tf

2行目ではNumPyを使うための準備を行っています。
NumPyは高速な配列処理などの数学的な機能まとめたライブラリです。
1行目と同様に末尾に『as np』と記述することで、以降は『numpy』を『np』と省略して参照することができます。

import numpy as np

3行目ではPILを使うための準備を行っています。
PIL(Python Imaging Library)は画像処理の機能をまとめたライブラリです。
今回はPILの中の『Image』という機能を使用します。
『Image』は画像の読み込みや変換、加工を行うことができます。

from PIL import Image

4行目ではGoogletransを使うための準備を行っています。
GoogletransはGoogleの翻訳機能を利用するためのライブラリです。
今回はGoogletransの中の『Translator』という機能を使用します。
『Translator』は指定した言語間の翻訳を行うことができます。

from googletrans import Translator

画像の読み込み

続いての行では用意した画像の読み込みを行っています。

# 画像の読み込み
image = Image.open("food.jpg")

冒頭で準備したPILの『Image』の中の『Open』という機能を使って画像ファイルを読み込んでいます。
読み込んだ画像は『image』と名付けたデータの入れ物に保存しています。
このようなデータの入れ物を『変数』と呼びます。

PILの使い方はこちらの記事で紹介しています。

あわせて読みたい
【初心者向け】Pythonで画像を表示【PIL】 プログラミング入門として、Pythonで任意の画像を表示するプログラムを作成します。今回はPythonの画像処理ライブラリのPIL(Python Imaging Library)を使用します。 作...

Google Colabの場合は若干方法が異なりますので、こちらを参考にしてください。

あわせて読みたい
【初心者向け】Google Colaboratoryで画像を表示【PIL】 プログラミング入門として、Google Colaboratoryで任意の画像を表示するプログラムを作成します。 今回はPythonの画像処理ライブラリのPIL(Python Imaging Library)を使...

画像の前処理

続いては読み込んだ画像をAIに入力するための加工を行っています。
今回は、TensorFlowのInceptionV3という事前学習済のモデルを使用するため、
画像をInceptionV3の入力要件に合わせて加工する必要があります。

# 画像の前処理
image = image.resize((299, 299))
image_array = np.array(image) / 255.0
image_array = np.expand_dims(image_array, axis=0)

画像は画素(ピクセル)と呼ばれるドットの集合で構成されています。

InceptionV3は学習において299×299ピクセルの画像を使用しています。
そのため、入力する画像も同じサイズに変更します。
最初の行では読み込んだ画像『image』のサイズを縦299ピクセル、横299ピクセルに変更しています。
変更した画像は、再度『image』に上書きしています。

image = image.resize((299, 299))

画像サイズの変更についてはこちらの記事で紹介しています。

あわせて読みたい
【初心者向け】Pythonで画像サイズを変更【PIL】 プログラミング入門として、Pythonで任意の画像サイズを変更するプログラムを作成します。今回はPythonの画像処理ライブラリのPIL(Python Imaging Library)を使用します...

続いての行でも、画像を『InceptionV3』に入力するための加工を行っています。

image_array = np.array(image) / 255.0

画像(.jpg)ファイルは一般的に一つ一つの画素毎に赤(Red), 緑(Green), 青(Blue)の情報が入っています。

通常、(R, G, B)はそれぞれ0~255の値で表され、例えば赤い画素の場合(255, 0, 0)のようなデータとなります。
このように画像は(R, G, B)が設定された画素の集合体です。

しかし今回扱うInceptionV3では画素の範囲0~255ではなく、0~1の範囲で表現された画像で学習を行っています。
そのため、0~255の範囲の値を0~1の範囲に変換する必要があります。
具体的には、各画素値を255で割ることで実現できます。
以下に数値の変換例を示します。

0 ⇒  0 / 255.0 = 0.000
1 ⇒  1 / 255.0 = 0.004
2 ⇒  2 / 255.0 = 0.008

253 ⇒ 253 / 255.0 = 0.992
254 ⇒ 254 / 255.0 = 0.996
255 ⇒ 255 / 255.0 = 1.000

このように、この行では各画素を255で割ることで0~1の範囲に変換を行っています。
このような行列を使った計算にはNumPyを用いると便利です。
NumPyを使った行列計算についてはこちらの記事で紹介しています。

あわせて読みたい
【初心者向け】Pythonで行列計算【NumPy】 プログラミング入門として、Pythonで行列計算を行うプログラムを作成します。配列(行列)の基本的な使い方から簡単な計算方法までを初心者向けに解説していきます。 今回...

続いての行でも、画像をInceptionV3に入力するための加工を行っています。
ここでは配列に関する知識が必要になります。
配列については上記のNumPyについての記事で解説していますので、参考にしてください。

image_array = np.expand_dims(image_array, axis=0)

ここまで解説したように、image_arrayには(赤, 緑, 青)のデータが入っています。
InceptionV3ではさらに、バッチ処理と呼ばれる処理を行う都合上、配列の次元をもう一つ増やす必要があります。
この行では『np.expand_dims』関数を使用して、『image_array』に新しい次元を追加しています。
『axis=0』は配列の0次元目に追加することを示しています。

学習済みのモデルで画像認識を実行

続いては、いよいよ画像認識に使用されるディープラーニングモデル『InceptionV3』の呼び出しを行っています。
呼び出したモデルは『model』という入れ物に代入しています。

# 学習済みモデルのロード
model = tf.keras.applications.InceptionV3()

次に、ここまで用意してきた『image_array』を使って画像認識を実行しています。
画像認識には『model.predict』を使います。
予測結果は『predictions』に代入されます。

# 画像に対する予測の実行
predictions = model.predict(image_array)

続いては、予測結果の入った『predictions』を人間が理解しやすい形式に変換を行っています。
変換には『decode_predictions』という機能を使います。

# 予測結果の出力
predicted_class = tf.keras.applications.inception_v3.decode_predictions(predictions)[0][0]

[0]は予測結果の最初の要素を示し、次の[0]はその要素の中の最も信頼度の高いの予測を示します。
これにより、『predicted_class』には最も信頼度の高い予測結果が格納されます。

続いて予測結果から得られた情報を取り出しています。
『predicted_class』は配列になっています。
要素[1]には予測結果の英語表記が格納されています。この結果を『result_en』に取得します。
要素[2]には予測結果の信頼度が0~1の値で入っており、『* 100』で最大値を100%とすることができます。
信頼度は『confidence』に格納します。

result_en = predicted_class[1]
confidence = int(predicted_class[2] * 100)

\わからないことは現役のエンジニアに無料相談してみよう/

画像認識の結果を表示

画像認識結果は英語表記ですので、ここでは日本語に翻訳しています。
日本語訳は『result_ja』に格納しています。

# 予測結果を日本語訳
result_ja = Translator().translate(result_en, dest='ja').text

日本語への翻訳方法については、こちらの記事で紹介しています。

あわせて読みたい
【初心者向け】Pythonで自動翻訳【Googletrans】 プログラミング入門として、Pythonで言語間の自動翻訳を行うプログラムを解説します。 今回はPython向けのGoogle翻訳ライブラリのGoogletransを使用します。多くの言語...

最後に予測結果と信頼度を『print』で表示しています。
『confidence』は数値ですので、『str』を使って文字列に変換しています。

print("予測結果: " + result_ja)
print("信頼度: " + str(confidence) + "%")

次のように出力されます。

予測結果: ピザ
信頼度: 79%

Pythonの魅力

Pythonは世界的にも人気の高いプログラミング言語のひとつです。

汎用性が高く、データ分析やWebアプリの開発等、幅広い分野で使用されているほか、日本の市場で今後も拡大することが予想されるAI(機械学習、ディープラーニング)技術との親和性も高く、Pythonを扱えるエンジニアの需要は伸びていくことが予想されます。

そのため開発言語として採用する企業も増えています。
市場動向調査では、Pythonエンジニアの求人倍率は約53倍と非常に高く、慢性的に人材が不足している状況です。

 参考: レバテック『2021年12月のITエンジニア・クリエイター正社員転職/フリーランス市場動向

また、プログラミング言語別の年収調査ではPythonは3位と高い水準にあり、中央値で575万円、最大提示年収で1,499万円と、日本人の年収の中央値397万円を大きく上回りました。

 参考: BIZREACH『プログラミング言語別年収中央値を発表、求人検索エンジン「スタンバイ」調べ
 参考: 時事ドットコム『【2022年最新】日本の「平均年収」「年収中央値」を調査

このように、Pythonは将来性の高いプログラミング言語と言えるでしょう。
就職、転職、副業を目指す上で、身につけておきたいスキルです。

Pythonの学習難易度は他のプログラミング言語と比べると比較的低いとされています。

独学で習得することも可能ですが、近年はオンラインスクールを利用して短期間で集中して実務レベルまで習熟させるという方も増えています。

プログラミングのオンラインスクールを活用する場合は、現役のエンジニアが講師となるスクールが優位でしょう。開発現場で通用する質の高い実務ノウハウを学ぶことができます。

また、オンラインスクールであれば全国どこからでも受講できるため、わざわざ都会へ出たり交通費をかけることなく、ライフスタイルに合わせて効率的にスキルを身につけることができることが魅力です。

ITエンジニアとして働き高い収入を得るための先行投資として、オンラインスクールは一つの選択肢となり得るでしょう。
無料体験できるオンラインスクールもあるため、独学でも習得できそうか、短期集中で学んだ方がいいのか、ご自身の力量を見極めてみるのもいいのではないでしょうか。

テックジム 無料のPythonプログラミング入門講座
テックアカデミー無料体験


こちらの記事ではオンラインスクールを受講する価値はあるのかについて解説しています。あわせてどうぞ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次