【Python】Webカメラの映像をキャプチャして顔検出する方法|OpenCV入門

【Python】Webカメラの映像をキャプチャして顔検出する方法|OpenCV入門 Python

PythonのOpenCVを使えば、Webカメラのリアルタイム映像から顔を検出したり、映像をキャプチャしたりといった処理が簡単に実現できます。

この記事では、OpenCVを使ったカメラの起動から顔検出までの基本的なスクリプトを紹介し、リアルタイム処理の入門として活用できる構成を解説します。

準備:必要なライブラリのインストール

pip install opencv-python

顔検出にはOpenCVに含まれる「Haar Cascade分類器」を使用します。

基本スクリプト:カメラ映像の表示

import cv2

# カメラを起動(0は内蔵カメラ)
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    cv2.imshow("Webcam", frame)

    # qキーで終了
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

顔検出を追加する

OpenCVには顔認識用の学習済みモデルが付属しています。

# 分類器ファイルの読み込み(OpenCV提供のXMLファイル)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # グレースケールに変換(顔検出にはこちらが最適)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 顔検出
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=4)

    # 検出された顔を矩形で囲む
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imshow("Face Detection", frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

キャプチャ画像を保存する

cv2.imwrite("snapshot.jpg", frame)

特定のキー入力や顔検出時に自動で保存するような処理にも応用可能です。

応用アイデア

  • 顔が検出されたら自動でスクリーンショット保存
  • 一定時間ごとに録画・画像保存
  • マスク検出や年齢推定などAIモデルとの連携
  • 顔が複数あった場合のカウント

まとめ

OpenCVを使えば、Pythonから簡単にWebカメラを操作してリアルタイムで顔検出ができます。Haar Cascade分類器を使った基本的な顔認識から、さらなる応用まで幅広く対応可能です。

今後は深層学習(DNN)モデルを使った高精度な顔認識や、録画・ログ出力・通知連携なども実装することで、より実務に活かせるシステムが構築できます。