【OpenCV】機械学習を使った顔検出をたったの○行のコードで実装してみる(画像処理)

プログラミング
スポンサーリンク

スポンサーリンク

はじめに

ゆうき
ゆうき

こんにちは。学生エンジニアのゆうき(@engieerblog_Yu)です。

今回は

機械学習に興味があるけど何をすればいいかわからない

機械学習をやってみたい

画像処理に興味がある

という方向けに簡単な機械学習で画像処理を行なっていきたいと思います。

ねこすけ
ねこすけ

おてやわらかにおねがいしますにゃー。

元の画像(woman.jpeg)

今回は上記の画像の顔検出を行い、顔の部分を四角で囲った画像を表示することを目標としたいと思います。

今回の制作物

以下が今回の制作物です。

ねこすけ
ねこすけ

ほんとにこれがかんたんなのにゃ?

全体のコード

それでは上記の画像を作成するために書いた全体のコードです。

import cv2
from google.colab.patches import cv2_imshow


# コードの実装

# 画像の読み込みとリサイズ
woman = cv2.imread('woman.jpeg')
img = cv2.resize(woman,(270,180))

# 既に画像データの特徴を学習済みのモデル(カスケード分類器という)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

# 顔を検知する
faces = face_cascade.detectMultiScale(img)

# 顔を四角で囲んだ画像を作成
for (x,y,w,h) in faces:
  face = cv2.rectangle(img,(x,y),(x+w,y+h),(1,1,1),2)

# 画像の表示
cv2_imshow(face)

一つ一つ解説していきます。

ねこすけ
ねこすけ

ちょっとむずかしそうだにゃ。

必要なライブラリをインポートする

まずは必要なライブラリをインポートしていきましょう。

今回はGoogleColaboratoryというGoogleが提供している環境で実行していきたいと思います。

使い方がわからないという方はこちらの記事で解説してあります。

今回使うライブラリは、画像や動画を処理することに特化しているライブラリであるOpenCVというライブラリです。

import cv2
from google.colab.patches import cv2_imshow

画像の読み込みとリサイズ

同じディレクトリにあるwoman.jpegを読み込んで形を整えています。

# 画像の読み込みとリサイズ
woman = cv2.imread('woman.jpeg')
img = cv2.resize(woman,(270,180))

学習済みモデルを使って顔を検知する(機械学習)

ここが主な機械学習の実装の部分です。

こちらのサイトからhaarcascade_frontalface_alt.xmlファイルをダウンロードして同じディレクトリに置くことで機械学習を行うことができます。

これらはカスケード分類器と呼ばれるもので既に膨大な画像を使って学習がされているモデルをOpenCVが用意してくれています。

# 既に画像データの特徴を学習済みのモデル
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
# 顔を検知する
faces = face_cascade.detectMultiScale(img)
ねこすけ
ねこすけ

目がまわりそうだにゃ。

顔を四角で囲んだ画像を作成

ここからは画像の作成です。

facesというリストには

・顔と思われる部分の左上の座標(x,y)

・顔と思われる部分の幅と高さ(w,h)

が格納されています。

試しに出力してみるとこのようになりました。

facesに合わせてOpenCVのrectangleメソッドを使っていきます。

rectangleメソッドは(画像,始点の座標,幅と高さ,色(RGB),線の太さ)を表しています。

# 顔を四角で囲んだ画像を作成
for (x,y,w,h) in faces:
  face = cv2.rectangle(img,(x,y),(x+w,y+h),(1,1,1),2)

画像の表示

それでは最後に画像の表示です。

上記のコードで作成した画像を表示してみます。

# 画像の表示
cv2_imshow(face)

するとこのように顔が検出されているのがわかります。

おわりに

いかがだったでしょうか?

今回紹介したのは本当に簡単な機械学習でしたが楽しんでいただけたら嬉しいです。

これからも色々な方にプログラミングを楽しいと思っていただけるような投稿をしていきたいと思っていますのでフォローしていただけたら嬉しいです。

@engieerblog_Yu

ねこすけ
ねこすけ

ほかにもいろんな記事を投稿してるにゃ。

その他の記事

コメント

タイトルとURLをコピーしました