ガチャつくブログ

IT系のお勉強のために、やってみたことをアウトプットしていきます。

Python で遊ぶ - 画像認識 -

f:id:tmt-tty:20181229235924p:plain

はじめに

画像認識をやってみた。

Macの内臓カメラで人の顔を認識させ、画像処理をしてみました。

 

やってみた結果はこんな感じw

 

f:id:tmt-tty:20181229233806p:plain

 

必要なもの

 

やり方

まずHomerewをインストールします。

Macのターミナルでコマンドを実行します。公式サイトトップにあるコマンドを使用します。

macOS 用パッケージマネージャー — macOS 用パッケージマネージャー

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

インストール後、最新にします。

brew update

 

Python3をインストールします。

brew install python

 

インストールされているか、確認します。

python3 -V

 

OpenCVをインストールします。

pip3 install opencv-python


顔認識用のカスケード分類機(.xml)を公式からダウンロードします。

github.com

 

今回は、haarcascade_frontalface_default.xml を使用しています。

xmlファイルと同じディレクトリにファイルを作成します。

下記のソースコードを使用させて頂きました。

algorithm.joho.info

 

capture.py

# -*- coding: utf-8 -*-
import cv2
import numpy as np

# モザイク処理
def mosaic(img, alpha):
    # 画像の高さと幅
    w = img.shape[1]
    h = img.shape[0]

    # 縮小→拡大でモザイク加工
    img = cv2.resize(img,(int(w*alpha), int(h*alpha)))
    img = cv2.resize(img,(w, h), interpolation=cv2.INTER_NEAREST)

    return img

def main():
    # カスケード型識別器の読み込み
    cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

    # 動画の読み込み
    cap = cv2.VideoCapture(0)

    # 動画終了まで繰り返し
    while(cap.isOpened()):
        # フレームを取得
        ret, frame = cap.read()

        # グレースケール変換
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        
        # 顔領域の探索
        face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
    
        # 顔領域を赤色の矩形で囲む
        for (x, y, w, h) in face:
            # 顔部分を切り出してモザイク処理
            frame[y:y+h, x:x+w] = mosaic(frame[y:y+h, x:x+w], 0.05)
            
        # フレームを表示
        cv2.imshow("Flame", frame)

        # qキーが押されたら途中終了
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

    
if __name__ == '__main__':
    main()


実行します。

python3 capture.py

 

顔を検出すると、顔部分にモザイクがかかります。

f:id:tmt-tty:20181229233806p:plain