今回は、最近流行しているディープラーニングの中でも注目を集めている画像認識で、よく使用される無料ライブラリ「OpenCV」の使い方について徹底解説します!
OpenCVとは?
OpenCVは、画像処理・画像解析および機械学習等の機能を持つオープンソースのライブラリです。
Pythonを始め、C/C++、Java、MATLAB用として公開されており、もともとはインテルが開発・公開しています。
無料でOpenCVを使った画像認識の環境を構築する方法
OpenCVを使った環境を構築するには、以下の作業が必要です。
- Pythonのインストール
- Pycharmのインストール
- OpenCVのインストール
インストールの方法は、以下の記事にまとめてありますのでチェックしてみてくださいね。
参考記事:画像編集用ライブラリ「OpenCV」のインストール方法
OpenCVの基本的な使い方(画像の読み込み)
OpenCVでは画像を取り扱います。
画像データを処理するために、OpenCVで画像を読み込む方法をご紹介します。
以下の記事で動画の読み込み方法についても紹介しています。
参考記事:OpenCVのimreadを使って画像・映像を読み込む方法
[Create New Project]で新しいプロジェクトを作成します。Locationに「opencv」と入力し、[Create]をクリックします。
Pycharmでは、プロジェクトという単位でプログラムを管理することができます。
プロジェクトは、指定したLocationのディレクトリに作られたフォルダです。
ダイアログボックスから「Python File」を選びます。
「Name」に「image.py」と入力し[OK]をクリックします。
使用するライブラリをインポートします。
OpenCVはcv2でインポートできます。
また、Matplotlibはグラフ描画ライブラリとして、インポートした画像を視覚化(ビジュアライズ)するときに使用されます。
import matplotlib.pyplot as plt
テキスト ボックス画像を読み込みます。
画像を読み込むにはimreadという関数を使用します。
このように、フォルダパスを書かずに読み込むと、pythonファイルと同階層のディレクトリにある画像が読み込まれます。
つまり、今回の場合は、「image.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(image.jpg)として任意の画像ファイルを保存しておく必要があります。
テキスト ボックス読み込んだ画像をRGBに変換します。
OpenCVで読み込む画像データの色情報は、一般的なRGB形式ではなく、BGR形式で読み込まれます。
このまま表示させようとすると、色合いがおかしくなるため、COLOR_BGR2RGBで色を変換しています。
Pythonに関連するライブラリや関数では、「2」を「to」の意味で使用することが多くあります。
BGR2RGBは、「BGR to RGB」、つまり「BGRをRGBに」と言う意味で使われています。
plt.show()
テキスト ボックス顔認識した画像を表示させます。
[Run]-[Run]で「image.py」を選択し機械学習プログラムを実行します。画像が表示されます。
OpenCVで顔認識する方法
OpenCVでは、あらかじめ用意されたファイルを使用することで、人間や猫の顔認識をすることができます。
あらかじめ用意されたファイルというのは「カスケードファイル」と呼ばれるもので、既に学習が完了している学習器です。
カスケードファイルはこちらより無料でダウンロードできます。
今回は、人の顔を正面から認識できる「haarcascade_frontalface_alt.xml」をダウンロードし、プロジェクトフォルダ内に保存してください。
顔認識以外でも様々なカスケードファイルがあらかじめ用意されています。
ファイル名 | 内容 |
---|---|
haarcascade_eye.xml | 目 |
haarcascade_eye_tree_eyeglasses.xml | 眼鏡 |
haarcascade_frontalcatface.xml | 猫の顔(正面) |
haarcascade_frontalcatface_extended.xml | 猫の顔(正面) |
haarcascade_frontalface_alt.xml | 顔(正面) |
haarcascade_frontalface_alt_tree.xml | 顔(正面) |
haarcascade_frontalface_default.xml | 顔(正面) |
haarcascade_fullbody.xml | 全身 |
haarcascade_lefteye_2splits.xml | 左目 |
haarcascade_lowerbody.xml | 下半身 |
haarcascade_profileface.xml | 顔(証明写真) |
haarcascade_righteye_2splits.xml | 右目 |
haarcascade_smile.xml | 笑顔 |
haarcascade_upperbody.xml | 上半身 |
早速プログラムを作ってみましょう。
[File]-[New]で新しくファイルを作成します。ダイアログボックスから「Python File」を選びます。
「Name」に「face.py」と入力し[OK]をクリックします。
使用するライブラリと画像をインポートします。
画像ファイルは人の顔が写った任意の写真を、プロジェクトフォルダ内に保存しておいてください。
import cv2
import matplotlib.pyplot as plt
image = cv2.imread(“face.jpg”)
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
今回は、人の顔認識ができる「haarcascade_frontalface_alt.xml」を使用します。
CascadeClassifierでカスケードファイルを読み込めます。
cascade = cv2.CascadeClassifier(casceade_file)
顔を認識し矩形にリスト化します。
例:[55, 68, 150, 150]
cascade.detectMultiScale(image)は、顔を検出してリスト化する関数です。
リストは、画像の左上を(0, 0)の原点とし、顔の位置の[Xの座標, Yの座標, 幅, 高さ]という数値のリストです。
顔を囲う枠の色をあらかじめ指定しておきます。
色の指定はRGB形式のため、青の場合は(0, 0, 255)と指定します。
顔を認識した箇所に枠を描画するプログラムを作成します。
for face in face_list :
x, y, w, h = face
cv2.rectangle(image, (x,y), (x+w, y+h), color, thickness=2)else:
print(“顔が認識できませんでした。”)
顔認識した画像を表示させます。
plt.show()
画像が表示されます。
OpenCVで画像のノイズを除去するスムージングをする方法
OpenCVでは、フィルター処理も行えます。
画像データによってはノイズがのっているものもあるため、ノイズ除去のためにスムージング処理を行なうこともしばしばあります。
今回はスムージング処理の中でも、ガウシアンフィルターというフィルターを掛けて画像スムージングをしてみます。
ダイアログボックスから「Python File」を選びます。
「Name」に「smooth.py」と入力し[OK]をクリックします。
使用するライブラリをインポートします。
import matplotlib.pyplot as pltimage = cv2.imread(“face.jpg”)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
ガウシアンフィルターの関数を用意します。
def
blur(img):
filtered = cv2.GaussianBlur(img, (11, 11), 0)
return filtered
画像をガウシアンフィルターでスムージングします。
画像を表示します。
plt.show()
画像が表示されます。
まとめ
いかがだったでしょうか。
今回は、OpenCVの使い方について、画像を読み込む方法・顔認識する方法・フィルター処理する方法など画像付きで徹底解説してきました。
OpenCVを使った画像認識の環境を構築するには、まずPython・Pycharm・OpenCVのインストールが必要でしたね。
OpenCVは、他にも様々な処理を行える機能を持っています。
まずは、この記事を参考にOpenCVの使い方に慣れていただければと思います。