Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

PythonでOpenCVを使ってみた(顔認識で動作確認)

『画像処理でいろいろ遊んでみよう!』と思い、Python用のOpenCVをインストールしたときのメモです。静止画の顔認識で動作確認してみました。

f:id:overworker:20220213152533p:plain:h100f:id:overworker:20200812004214p:plain:h100

準備

pythonのインストール

  • 省略

pipのインストール

  • 省略

pipを使ってOpenCVをインストールする

  • 画像処理初心者なのでOpenCVのインストールから実施しました。
pip install opencv-python
f:id:overworker:20220213175435p:plain:w500

動作確認

  • OpenCVで静止画の顔認識を実施してみる

SampleCode

import cv2

# 分類器を指定する(HAAR分類器の顔検出用の特徴量)
cascadeFile = "C:\\Python310\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml"


# 分類器の設定
cascade = cv2.CascadeClassifier(cascadeFile)

# 入力ファイル
imageImput ="C:\\Users\\******\\Desktop\\lena.jpg" 

# 入力ファイルをリードする
image = cv2.imread(imageImput)

#グレースケールにする
imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 出力ファイル
imageOutput = "C:\\Users\\******\\Desktop\\lena_new.jpg"

# 顔を認識する
facerect = cascade.detectMultiScale(imageGray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))

# 顔を検出できた際の処理
if len(facerect) > 0:

    # 顔に枠を付ける
    for rect in facerect:
        cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), (255, 255, 255), thickness=2)

    # 結果を画像として保存する
    cv2.imwrite(imageOutput, image)

pylintでの指摘

  • 私の開発環境はVSCodeですが、拡張機能Pythonのlint(pylint)をインストールしているので、以下の指摘が表示されてしまいました。
f:id:overworker:20220213222628p:plain:w500
module cv2
OpenCV Python binary extension loader

Module 'cv2' has no 'CascadeClassifier' memberpylint(no-member)

原因

  • pylintcv2モジュールを把握できていないので、pylintにcv2の内容を読み込ませればよい。

対策

  • VSCode上のメニュー上で[ファイル]->[ユーザー設定]->[設定]を開く
  • 検索WindowにPython.linting.pylintArgsを入力する
  • 項目の追加を選択する
f:id:overworker:20220213223652p:plain:w400
  • --extension-pkg-whitelist=cv2と入力しOKをクリックする

実行結果

f:id:overworker:20220213225313j:plain:w300f:id:overworker:20220213225324j:plain:w300

おわりに

Webで調べながらの作業でしたが、実質の作業時間は1時間くらいで画像出力までできました。 今回は静止画の顔認識でしたが、顔内部の目や口の認識動画内での顔認識等もありそうなので、次はそれらを試してみたいと思います。