AI研究所 - AI(人工知能)に脅かされないために、AI(人工知能)を作る側の人間になる -

HOME  >  OpenCVの使い方を徹底解説

公開日:2019.09.08 [最終更新日]2019.09.06

OpenCVの使い方を徹底解説

カテゴリー: AI(人工知能)の作り方

こんにちは三谷です。

今回は、最近流行しているディープラーニングの中でも注目を集めている画像認識でよく使用される無料ライブラリ「OpenCV」の使い方について徹底解説します!

OpenCVとは?

OpenCVは、画像処理・画像解析および機械学習等の機能を持つオープンソースのライブラリです。Pythonを始め、C/C++、Java、MATLAB用として公開されており、もともとはインテルが開発・公開しています。

無料でOpenCVを使った画像認識の環境を構築する方法

OpenCVを使った環境を構築するには、以下の作業が必要です。

・Pythonのインストール
・Pycharmのインストール
・OpenCVのインストール

インストールの方法はこちらの記事(画像編集用ライブラリ「OpenCV」のインストール方法.docx)にまとめてありますのでチェックしてみてくださいね。

OpenCVの基本的な使い方(画像の読み込み)

OpenCVでは画像を取り扱います。画像データを処理するために、OpenCVで画像を読み込む方法をご紹介します。

参考記事:動画の読み込み方法についても紹介しています。
OpenCVのimreadを使って画像・映像を読み込む方法.docx

[Create New Project]で新しいプロジェクトを作成します。

Locationに「opencv」と入力し[Create]をクリックします。Pycharmでは、プロジェクトという単位でプログラムを管理することができます。プロジェクトは、指定したLocationのディレクトリに作られたフォルダです。

[File]-[New]で新しくファイルを作成します。

ダイアログボックスから「Python File」を選びます。

「Name」に「image.py」と入力し[OK]をクリックします。

使用するライブラリをインポートします。OpenCVはcv2でインポートできます。また、Matplotlibはグラフ描画ライブラリとして、インポートした画像を視覚化(ビジュアライズ)するときに使用されます。

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("image.jpg")

テキスト ボックス画像を読み込みます。画像を読み込むにはimreadという関数を使用します。

このように、フォルダパスを書かずに読み込むと、pythonファイルと同階層のディレクトリにある画像が読み込まれます。
つまり、今回の場合は、「image.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(image.jpg)として任意の画像ファイルを保存しておく必要があります。

image=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

テキスト ボックス読み込んだ画像をRGBに変換します。

OpenCVで読み込む画像データの色情報は、一般的なRGB形式ではなく、BGR形式で読み込まれます。このまま表示させようとすると、色合いがおかしくなるため、COLOR_BGR2RGBで色を変換しています。
Pythonに関連するライブラリや関数では、「2」を「to」の意味で使用することが多くあります。BGR2RGBは、「BGR to RGB」、つまり「BGRをRGBに」と言う意味で使われています。

plt.imshow(image)
plt.show()

テキスト ボックス顔認識した画像を表示させます。

[Run]-[Run]で「image.py」を選択し機械学習プログラムを実行します。

画像が表示されます。

クッパ22さんによる写真ACからの写真

OpenCVで顔認識する方法

OpenCVでは、あらかじめ用意されたファイルを使用することで、人間や猫の顔認識をすることができます。
あらかじめ用意されたファイルというのは「カスケードファイル」と呼ばれるもので、既に学習が完了している学習器です。
カスケードファイルは以下のページより無料でダウンロードできます。
https://github.com/opencv/opencv/tree/master/data/haarcascades
今回は、人の顔を正面から認識できる「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でカスケードファイルを読み込めます。

casceade_file = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(casceade_file)

顔を認識し矩形にリスト化します。例:[55, 68, 150, 150]

face_list = cascade.detectMultiScale(image)

cascade.detectMultiScale(image)は、顔を検出してリスト化する関数です。
リストは、画像の左上を(0, 0)の原点とし、顔の位置の[Xの座標, Yの座標, 幅, 高さ]という数値のリストです。

顔を囲う枠の色をあらかじめ指定しておきます。色の指定はRGB形式のため、青の場合は(0, 0, 255)と指定します。

color=(0, 0, 255)

顔を認識した箇所に枠を描画するプログラムを作成します。

if len(face_list) > 0 : 
  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.imshow(image)
plt.show()
[Run]-[Run]で「face.py」を選択し機械学習プログラムを実行します。

画像が表示されます。

OpenCVで画像のノイズを除去するスムージングをする方法

OpenCVでは、フィルター処理も行えます。画像データによってはノイズがのっているものもあるため、ノイズ除去のためにスムージング処理を行なうこともしばしばあります。
今回はスムージング処理の中でも、ガウシアンフィルターというフィルターを掛けて画像スムージングをしてみます。

[File]-[New]で新しくファイルを作成します。

ダイアログボックスから「Python File」を選びます。

「Name」に「smooth.py」と入力し[OK]をクリックします。

使用するライブラリをインポートします。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread("face.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

ガウシアンフィルターの関数を用意します。

#スムージング(ガウシアンフィルター)
def
blur(img):
filtered = cv2.GaussianBlur(img, (11, 11), 0)
return filtered

画像をガウシアンフィルターでスムージングします。

img_gaussian = blur(image)

画像を表示します。

plt.imshow(img_gaussian)
plt.show()
[Run]-[Run]で「smooth.py」を選択し機械学習プログラムを実行します。

画像が表示されます。

まとめ

いかがだったでしょうか。OpenCVは、今回ご紹介した処理の他にも様々な処理を行える機能を持っています。

タグ:


参考になったら「いいね!」と「シェア」をお願いします!!

このエントリーをはてなブックマークに追加
AI(人工知能)セミナー開催中
AI(人工知能)入門セミナー AI(人工知能)入門セミナー IoT入門セミナー

AI入門ブログの中の人

AI研究所 研究スタッフ

【マサミ】

アメリカ・サンフランシスコにある情報メディアの専門学校を卒業。大手金融会社での事務経験を経て、2016年9月よりAI研究所に入所。見習い研究員として、AI技術を日々勉強中。


【三谷】

AIセミナー責任者、講師。AIについての幅広い知識を持ち、人に分かりやすく伝える技術を持つ。特にAIを事業や仕事に取り入れる方法について日々講義しています。

AI研究所Twitter

Facebookページ