opcv 顔検出を使用する

システム開発環境

  • Windows11
  • Python 3.8
  • Pycharm 2021.3 コミュニティ版

必要な環境ライブラリ

  • numpy==1.22.1
  • opencv-contrib-python==4.5.5.62
  • opencv-python==4.5.5.62

環境ライブラリをインストールする

pip を使用して直接インストールしてください。openCV での開発には、より低いバージョンの Python を使用することをお勧めします。さまざまな奇妙な問題が発生するのは簡単ではありません。Windows システムでは、複数のバージョンの Python をインストールできます。実行中に [パスに追加] をチェックしないように注意してください。仮想環境を作成すると、異なるバージョンのインタプリタを使用して直接作成できます。
異なるバージョンの Python の共存

コード

import cv2
import numpy as np

#人脸识别分类器
faceCascade = cv2.CascadeClassifier(
    r"C:\Users\TOM\.virtualenvs\smart-home\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")
#人眼识别分类器
eyesCascade = cv2.CascadeClassifier(
    r"C:\Users\TOM\.virtualenvs\smart-home\Lib\site-packages\cv2\data\haarcascade_eye.xml")

#调用本地摄像头
cap = cv2.VideoCapture(0)
flag = True
while flag:
    #read返回两个值,第一个值True代表获取到数据,后一个值为摄像头数据流
    flag, img = cap.read()
    #翻转图像
    img = cv2.flip(img, 1)
    # 转换为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    #人脸检测,返回值为人脸的box参数,左上角坐标(x,y),矩形框的长、宽共4个参数
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.2,
        minNeighbors=5,
        minSize=(32,32)
    )
    # 在检测人脸的基础上检测眼睛
    for (x, y, w, h) in faces:
        fac_gray = gray[y: (y + h), x: (x + w)]
        result = []
        eyes = eyesCascade.detectMultiScale(fac_gray, 1.3, 2)

        # 眼睛坐标的换算,将相对位置换成绝对位置
        for (ex, ey, ew, eh) in eyes:
            result.append((x + ex, y + ey, ew, eh))

    for(x, y, w, h) in faces:
        cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)

    cv2.imshow('video', img)

    hot_key = cv2.waitKey(1)
    #判断按下的热键是否为Esc
    if hot_key == 27:
        break
#释放摄像头资源
cap.release()
#销毁窗口
cv2.destroyWindow()

なお、分類器のxmlファイルは通常、openCVライブラリのcv2インストールディレクトリのdataフォルダにありますが、パスが見つからない場合は、すべてインストールしてcv2をキーワードにして検索することも可能です。
ここに画像の説明を挿入
ここに画像の説明を挿入
コード内のパスを独自のパスに置き換えるだけです

効果を達成する

ここに画像の説明を挿入

フォローアップ作業計画

  • 顔認識
  • 顔入力と管理
  • ボイスメッセージシステム
  • GUI

参考URL:

コードリファレンス
画像の反転

おすすめ

転載: blog.csdn.net/qq_20728575/article/details/122802740