3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

猿でもわかるAIプログラミングシリーズ 🐵💻 | [第5回]Python + OpenCVではじめる顔認識プログラミング

Posted at

1. はじめに:なぜ今顔認識なのか?

「AIで顔認識」と聞くと難しそうに思えますが、実はOpenCVを使えばたった15行のPythonコードで実装できます。

実際の応用例:

  • スマホのロック解除
  • 店舗の来客分析
  • 写真の自動タグ付け

本記事では、Python + OpenCVを使ったリアルタイム顔認識の実装方法を、クラウドエンジニア視点でのデプロイTipsも交えて解説します。

2. OpenCVとHaar Cascadeの基本

OpenCVとは?

**OpenCV(Open Source Computer Vision Library)**は、Intelが開発したオープンソースのコンピュータビジョンライブラリ。特徴:

  • 2,500以上のアルゴリズムを実装
  • Python/C++/Java対応
  • リアルタイム処理に最適化

Haar Cascade分類器

Haar特徴量
図2: Haar特徴量の概念

顔認識の核心となるアルゴリズムで、**「Haar-like特徴量」**を用いて物体を検出します。

import cv2

# 事前学習済みモデルをロード
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

3. 実装:Webカメラを使ったリアルタイム顔認識

基本実装(15行!)

import cv2

def detect_faces():
    # カメラデバイスを開く
    cap = cv2.VideoCapture(0)
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    
    while True:
        _, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.1, 4)
        
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
        
        cv2.imshow('Face Detection', frame)
        if cv2.waitKey(1) == ord('q'):
            break
            
    cap.release()
    cv2.destroyAllWindows()

detect_faces()

コード解説

処理フロー
図3: 顔認識の処理フロー

  1. VideoCapture(0):デフォルトカメラを起動
  2. cvtColor():グレースケール変換(処理軽量化)
  3. detectMultiScale():顔領域を検出
    • パラメータ調整可能(後述)
  4. rectangle():検出した顔に枠を描画

4. 実践Tips & よくある落とし穴

パラメータチューニングのコツ

faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor=1.1,  # 画像スケール縮小率(小→精度↑速度↓)
    minNeighbors=5,   # 検出信頼度(大→検出数↓精度↑)
    minSize=(30, 30)  # 最小検出サイズ
)

よくある問題と解決策

問題 原因 対策
検出されない 光量不足 cv2.equalizeHist()で明るさ補正
誤検出多発 パラメータ不適 minNeighborsを増やす
処理が重い 解像度過大 cap.set(3, 640)で解像度調整

クラウドデプロイ時の注意点

FROM python:3.8-slim

RUN apt-get update && apt-get install -y \
    libopencv-dev \ 
    python3-opencv

COPY . /app
WORKDIR /app
RUN pip install opencv-python-headless

CMD ["python", "face_detection.py"]

Dockerfile例(ヘッドレス版OpenCVを使用)

5. 応用:AIモデルを組み込んで進化させる

DNNベースの高精度検出

net = cv2.dnn.readNetFromCaffe(
    "deploy.prototxt", 
    "res10_300x300_ssd_iter_140000.caffemodel"
)

blob = cv2.dnn.blobFromImage(frame, 1.0, (300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()

図4: DNNモデルとの精度比較

Cloud Vision API連携

from google.cloud import vision

client = vision.ImageAnnotatorClient()
response = client.face_detection(image=vision.Image(content=cv2.imencode('.jpg', frame)[1].tobytes()))

6. まとめ:OpenCV顔認識のPros & Cons

メリット

  • ローカル環境で動作(プライバシー保護)
  • 軽量でリアルタイム処理可能
  • カスタマイズ性が高い

デメリット

  • 角度変化に弱い(解決策:マルチビューカスケード)
  • 深層学習モデルより精度低め

今後:Edge AIデバイス(Raspberry Pi等)との組み合わせが注目されています!


おまけ:Qiita用サンプルリポジトリ

実際に動かせるコードはこちら → github.com/yourrepo/opencv-face-demo

#ハッシュタグ
#OpenCV #AI #Python #画像処理


この記事を読んだら、ぜひWebカメラで試してみてください! 何か質問があればコメント欄でお気軽にどうぞ 🚀

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?