Pythonを使った画像認識とは?具体的な方法もご紹介

 2022.12.13  株式会社システムインテグレータ

画像認識(Image Recognition)は、画像に含まれる対象物の情報を認識する技術です。技術の向上に伴い活用範囲も拡大し、業務の自動化や効率化を進めたい多くの企業が導入しています。画像認識に使われる代表的な方法のひとつが、PythonとOpenCVを組み合わせた方法です。

本記事では、Pythonを使った画像認識について、具体的な方法などをご紹介します。

画像認識とは

画像認識(Image Recognition)とは、コンピューターが画像に含まれる対象を認識する技術です。対象の画像に含まれる特徴が、複数ある分類のどれに合致するかを見つけるパターン認識のひとつで、2010年代には機械学習の一分野であるディープラーニングの活用により認識精度が飛躍的に向上、大量の画像データから人やモノの特長を認識できるようになりました。今では農業における農作物の育成状況把握、製造業での検品、小売業での顔認証決済など活用範囲が拡大しています。

画像認識については以下の記事で詳しく解説していますので合わせてご覧ください。
画像認識とは?機械学習による発展の歴史と実世界での活用シーンを紹介

画像認識の種類

画像認識は、大きく「物体認識」と「物体検出」の2種類に分かれます。

物体認識とは、画像データに対象と同じ物体が写っているかを認識する技術です。「この画像には自転車と男性が写っている」など、対象の画像に写っているのが何かを判断します。

一方、物体検出は画像の中にある対象の位置や個数を検出する技術です。例えば、自動運転における障害物や歩行者の発見には物体検出技術が用いられています。

人間は物体認識や物体検出を容易に行えますが、画像をピクセルデータの集合として扱うコンピューターが行う場合には、複雑なデータ処理が必要です。

画像認識の仕組み

画像認識は、まず事前にAIを学習させるところから始まります。大量の画像データにタグ付け(アノテーション)した後、AIが学習しやすいように前処理を行います。処理した画像をAIに学習させて識別モデルを作成することで、読み込んだほかの画像データから物体を認識・検出します。

画像認識技術は、機械学習の一手法であるディープラーニングの登場により、飛躍的に精度が向上しました。そのなかでもよく使われるのがCNN(畳み込みニューラルネットワーク)と呼ばれる手法です。

CNNは、特徴量の抽出に畳み込み層、ブーリング層と呼ばれる画像処理に強い層を組み込んだもので、画像認識で多用されています。

画像認識を行うためのプログラミング言語としてよく使われるのがPythonです。ほかの言語と比べて文法がシンプルで、よく使われる機能を部品として呼び出せるライブラリが充実しているのが特徴です。

Pythonを使った画像認識に必須のOpenCVとは

AIを用いて画像認識を行う際に役立つライブラリには、OpenCV、Pillow、scikit-imageなどがあります。その中でも代表的なのがOpenCV(Open Source Computer Vision Library)という、Intelが開発した画像・映像を扱うためのライブラリです。名前のとおりオープンソースなので、誰でも無料で使用できます。

OpenCVは、C++、Python、Javaで利用可能です。WindowsやMacOS以外にも、Linux、iOS、Androidなどの主要なプラットフォームをサポートしているため環境を問わず利用できます。

OpenCVの機能

OpenCVは、画像加工ソフトウェアで行うような処理をプログラムで行えます。

トリミング、リサイズ、左右反転、フィルター処理などは、AIで用いる学習データの前処理に使われます。検出したい対象を四角で囲んで場所を特定する物体検出は、AIの学習モデルを使用する際に使われます。

そのほか、画像データの色情報をRGBとして数値化し、プログラム内で使用できるようにリスト化できます。また、グレースケール変換も簡単に行えます。

OpenCVを使う理由

OpenCVは、数多くの画像処理機能を持ち、画像処理を高速に処理できるのが強みです。また基本的に無料で利用できる点も選ばれる理由です。

画像処理を行うライブラリには、Python向けのPillowがあります。Pillowは画像加工系の機能は豊富ですが、物体検出などの機能は含まれていません。そのためAIで用いるライブラリとしてはOpenCVが主流です。

画像処理だけが目的であればPillowを使ってみるのもいいでしょう。

OpenCVのインストール方法

前述のとおり、OpenCVは主要なプラットフォームに対応しています。ここでは、すでにPythonがインストール済みであることを前提として、WindowsとMacOSでインストールする方法を紹介します。

Windowsへのインストール方法

Windowsの場合は、まずOpenCVの公式サイト(https://opencv.org/releases/)からWindows版をダウンロードします。

コマンドプロンプトを起動し、「pip install opencv-python」とpipを実行します。その後「import cv2」を実行し、エラーが出なければ完了です。

Macへのインストール方法

Macの場合も、OpenCVの公式サイト(https://opencv.org/releases/)からMac版をダウンロードします。

ソフトウェア管理ツールのHomebrewをインストールした後、ターミナルから「brew install opencv」を実行します。その後同様に「import cv2」を実行し、エラーが出なければ完了です。

Homebrewは必須ではありませんが、失敗を防ぐために利用することをおすすめします。

Python画像認識のひとつ「カスケード分類器」の作成手順

カスケード分類器とは

OpenCVで物体検出を行うためには、事前にAIを用いた学習を行う必要があります。その際に対象の画像データから抽出した特徴量をプログラムで判別できるようにまとめたものがカスケード分類器です。カスケード分類器の作成は、学習対象を含む画像・含まない画像を集める、リスト・vecファイルを作成する、分類器を作成する、というプロセスに分かれます。また、事前に正解画像を入れるフォルダ、不正解画像を入れるフォルダ、ベクトルファイル用フォルダ、分類器用フォルダを作成しておきましょう。

手順①認識する画像を集める

検出したい対象が含まれる画像をポジティブ画像と呼びます。例えば犬を検出したいのであれば、犬が映っている写真を用意します。AIの検出精度を上げるためには大量の画像が必要で、OpenCVでは7,000枚以上の画像が必要だと言われています。また、検出対象の物体ができるだけ大きく写っていると、より精度を高くできます。

用意した画像はフォルダに保管します。画像名、位置、対象物の数を記載したリストファイルを作成します。

手順②認識しない画像を集める

検出したい対象が含まれていない画像をネガティブ画像と呼びます。AIは、正解の画像と不正解の画像の両方を使うことで学習します。精度を上げるためには、まったく無関係の画像を選ぶよりもポジティブ画像と似ている画像を用います。

ネガティブ画像はポジティブ画像ほどの枚数は必要ありませんが、実用レベルにするには3,000枚程度は必要だと言われています。画像ファイルの数を増やす手段として、1枚の画像から少しずつサイズや角度が異なる画像を自動生成できるopencv_createsamples.exeを使う方法があります。

手順③vecファイルを作成

画像を認識する際の判断基準をまとめたファイルをベクトルファイル(vecファイル)と呼びます。opencv_createsamples.exeを実行してvecファイルを作成します。

最後にopencv_traincascade.exeを実行して分類器を作成して完了です。

まとめ

画像データから対象を認識・検出する画像認識技術の活用は年々広がっており、製造業では画像認識技術を使って外観検査を自動化する事例が増えています。

外観検査の自動化についてまとめた資料もありますので、ご興味がある方はぜひご覧ください。


RELATED POST関連記事


RECENT POST「AI」の最新記事


AI

画像認識とは?機械学習による発展の歴史と実世界での活用シーンを紹介

AI

物体検知(物体検出)とは?仕組みや手法、主要モデル、事例を徹底解説

AI

画像認識AIの精度を上げるテクニック【中級者向け】

AI

AI・機械学習による画像分類とその活用法とは?

Pythonを使った画像認識とは?具体的な方法もご紹介

AISIA-AD TOPへ

外観検査AI化 始め方ガイド