Pythonを使った画像認識!概要からサンプルコードも紹介
thumb_pythonimagerecognition_01
Pythonを使った画像認識!概要からサンプルコードも紹介
アンドエンジニア編集部
2024.02.09
この記事でわかること
画像認識では、画像の特徴やパターンを学習させておき、対象となる画像の分類を識別します
Pythonの場合は、OpenCVを用いて画像認識や検出に使用することが多いです
OpenCVでは、学習済みモデルを使った画像検出が可能のため、すぐに利用することができます

Pythonを使った画像認識

img_pythonimagerecognition_01

Pythonは、データサイエンスや機械学習などのAI領域で活用されており、その用途の1つに画像認識があります。ここでは、画像認識の概要とともに、実際にPythonの代表的な画像認識ソフトウェアであるOpenCVを用いてコードを作成して理解を深めていきます。

【参考】:Python

【入門編】Pythonでできることは?基本知識や実用例を解説

そもそも画像認識とは

画像認識とは、画像に写っている情報が何なのか認識する技術を表します。ここでいう情報とは人や物などで、これらを識別する情報処理の分野として、パターン認識と呼ぶ場合もあります。パターン認識には、広く音声や画像、文字テキストなども含まれますが、ここでは画像を対象に解説していきます。

人間の脳と機械やコンピュータとの違い

人間は脳に蓄積されている情報から、画像を見るとそれが何なのか、記憶や経験から識別することができます。機械やコンピュータでは画像の情報が単なるドットの集合体ですので、それが何を意味するのかそのままでは識別できません。

そのために、画像の特徴やパターンを学習させておき、対象となる画像がどの分類に近いかの識別や、どのパターンに近いか適合の状況を表示させます。

これらにより、人物の顔の部分を特定したり、生産工場の品質検査で異常がある製品を判別したりすることができます。

Pythonの代表的な画像認識ソフトウェア

Pythonの代表的な画像認識ソフトウェアとして、次の2点が挙げられます。

OpenCV OpenCVは、インテルが開発した画像認識ライブラリです。画像処理や解析、パターン認識、機械学習に広く利用することができます。学習済みのモデルが用意されており、自作に適しています。

TensorFlow TensorFlowは、Googleが開発した機械学習用ライブラリです。機械学習のみならず、画像認識にも対応します。合わせてTensorFlowのコアライブラリでサポートされるニューラルネットワークライブラリ、Kerasを使うことも可能です。

【参考】:OpenCV 【参考】:TensorFlow 【参考】:Keras: Pythonの深層学習ライブラリ 【参考】:TensorFlow Core チュートリアル:Keras

ここからは、Pythonの画像認識ソフトウェアとして利用者の多いOpenCVを使い、さらに詳しく解説していきます。

OpenCVとは?できることや活用事例について詳しく解説!
TensorFlowとは?特徴やできることをわかりやすく解説!
ニューラルネットワークとは?仕組みや関連用語をわかりやすく解説

PythonでOpenCVを使ってみる

img_pythonimagerecognition_02

OpenCVは、PythonのほかC++やJavaでも利用できるポピュラーな画像認識ソフトウェアです。画像処理の機能が豊富で、他のソフトウェアを追加せずに多くの処理をこなすことができます。英語ですが、豊富なドキュメントが公開されています。

【参考】:OpenCV 【参考】:Introduction to OpenCV 【参考】:OpenCV-Python 4.8.0 Tutorials

OpenCVの日本語ドキュメント

OpenCVの公式サイトは英語のドキュメントが中心です。英語が心配な方は、日本のOpenCVユーザの方々が有志で日本語のドキュメントやサンプルコードを掲載していますので、利用することもできます。

日本語サイトは、公式サイトにもリンクが掲載されていますが、掲載情報はOpenCV2.4.2までですので、ご注意ください。

【参考】:OpenCV.jp

OpenCVのインストール

Pythonで利用するには、”pip install opencv-python”などでインストールを行います。同様に、NumpyもPythonの配列処理に活用しますので、”pip install numpy”でインストールしておくと良いでしょう。

インストールについて、WindowsやLinuxなどOS別のインストール手順は必要に応じて以下のリンク先をご確認ください。

【参考】:OpenCV installation overview 【参考】:Install OpenCV-Python in Windows 【参考】:Install OpenCV-Python in Fedora 【参考】:Install OpenCV-Python in Ubuntu

顔認証にも使われるOpenCVをインストールして使ってみよう!

OpenCVの基本操作

ここでは、OpenCVの基本操作を学んでいきます。手順は以下の通りです。

ライブラリのインポートと画像の読み込み PythonでOpenCVを使う場合は、”import cv2”でライブラリをインポートします。取り扱う画像データは、JPEGやPNG、BMP・PBMなどの主要なフォーマットに対応します。

配列処理を行う場合は、必要に応じて”import numpy”などを行い、ライブラリをインポートしておきます。画像の読み込みですが、静止画の場合はcv2.imread()、動画の場合はcv2.VideoCapture()を使って読み込みます。

実際の使い方は、次のように行います。なお、NumPyを使用しない場合は、OpenCVのみインポートしてください。

import numpy
import cv2
image = cv2.imread('picture.jpg')

 

画像の前処理 前処理として画像の処理を行います。認識精度向上のために、cv2.cvtColor()でグレースケールや二値化によるモノクロ化、トリミングなどを行います。BGRの分離やマージも行うことができます。

ここで言うBGRは、青緑赤で通常のRGBとは逆の順番となることに注意します。GBRからRGBへの変換は、cv2.cvtColor()を用います。

次の例は、グレースケールに変換する場合の指定です。

grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

 

画像の画面表示と保存 処理した画像を画面に表示するには、cv2.imshow()を使います。保存するには、静止画はcv2.imwrite()、動画はcv2.VideoWriter()で出力します。

具体的には、次のように使用して画像を保存します。

cv2.imwrite('grayscale.jpg', grayscale)

 

OpenCVを用いた画像の認識

ここから、OpenCVを用いた画像の認識を行っていきます。画像認識には、cv2.CascadeClassifier()で学習済みのモデルを読み込み、cv2.CascadeClassifier.detectMultiScale()で顔などのパターンを検出します。

なお、OpenCVではあらかじめ認識できるパターンが用意されていますので、それを用いるのが良いでしょう。

ここで用いる学習済みのモデルは、カスケード分類器と言います。同様に学習済みのモデルである、認識パターンの登録済みファイルはカスケードファイルと言い、目や眼鏡、ネコや人の顔、人物の全身・下半身・上半身、左目・右目・証明写真風の顔や笑顔などが用意されています。

格納場所は、”Pythonのインストール先\Lib\site-packages\cv2\data”で、17種類の登録ファイルがあります。

【参考】:OpenCV /data/ haarcascades 【参考】:OpenCV Cascade Classifier 【参考】:OpenCV Cascade Classifier Training

OpenCVを用いた画像認識のサンプルコード

ここまで学んだことを実際のコードにしてみます。サンプルコードでは、画像から顔(正面)を認識する一連の流れを表します。顔(正面)の学習済みモデルは、”haarcascade_frontalface_default.xml"を使います。このファイルをローカルに保存するか、パスを指定して読み込みます。

実際のサンプルコードは、以下の通りです。作成したサンプルコードに注釈を入れておきましたので、参考にしてください。

# NumPyを使う場合インポートします(通常、numpyをnpとして使用します)
#import numpy as np

# OpenCVは必ずインポートします(通常、cv2をcvとして使用します)
import cv2 as cv

# 画像を読み込みます(ここでは'picture.jpg'とします)
imagefile = 'picture.jpg'
image = cv.imread(imagefile)

# グレースケールに変換します
grayscale = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

# 学習済みモデルを読み込みます
# 正式なパスは"Pythonのインストール先\Lib\site-packages\cv2\data"です
cascade = cv.CascadeClassifier("haarcascade_frontalface_default.xml")

# 顔を検出します(検出する最小サイズは50x50とします)
results = cascade.detectMultiScale(grayscale, minSize=(50, 50))

# 検出した場合の処理です
if len(results) > 0:
    # 検出した顔を矩形で囲みます(色は赤、線の太さは2とします)
    for rectangle in results:
        cv.rectangle(image, tuple(rectangle[0:2]),tuple(rectangle[0:2]+rectangle[2:4]), (0, 0, 255), thickness=2)

    # 検出結果を保存します(ここではファイル名の最初に'result-'という文字列を追加します)
    cv.imwrite('result-'+imagefile, image)

    # 検出結果を画面に表示します(ウィンドウタイトルに'imshow:ファイル名'を表示します)
    cv.imshow('imshow: '+imagefile, image)

 

Pythonを使った画像認識は簡単にできます

img_pythonimagerecognition_03

Pythonは、用途に応じたライブラリが豊富です。画像認識も人や動物などを認識するほか、物体の形状を登録することで生産ラインの品質検査にも応用できます。その中でも、OpenCVは手間なく環境構築と学習済みモデルを使った画像検出が可能で、簡単に始めるにはおすすめのソフトウェアです。

Pythonのよく使うライブラリ一覧!一段上の開発を目指そう
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT