Pythonで「顔認証ログインシステム」を作ってみた【OpenCV×顔検出】

プログラミング

「顔パス」でログインできたら便利なのに…

そんな悩みを持つ方に向けて、PythonとOpenCVを使って自分だけの顔認証ログインシステムを作る方法をご紹介します。

難しそうに見えても、実はコードはとてもシンプルです。

誰でも簡単に作れるように、必要な準備・コード・完成形までを全て丁寧に解説しています。

「セキュリティを強化したい」「Pythonを使って便利なツールを作りたい」という方におすすめです。

顔認証ログインシステムとは?

結論

顔認証ログインとは、「顔」を使って本人確認を行い、ログインできるようにする仕組みです。

理由

近年、パスワードの流出や盗難が問題になっています。

そのため、生体認証技術(顔・指紋・声など)が注目されています。

中でも顔認証は、スマホでも使われるほど普及してきました。

具体例

たとえば、スマートフォンの顔ロック解除。

これと同じような仕組みを、Pythonで簡単に作ることができます。

ポイント

• カメラがあればOK(高性能カメラは不要)

• 無料ライブラリ「OpenCV」を使う

• コードは100行未満で可能

PythonとOpenCVの基本準備

結論

顔認証システムの実装には「Python」「OpenCV」の準備が必要です。

理由

顔認識の処理には、画像処理技術が不可欠です。

OpenCVは画像解析に特化した無料ライブラリで、多くの実績があります。

必要なもの

• Python(推奨:3.9以上)

• OpenCV(cv2)

• 顔認識用のカスケードファイル(haarcascade_frontalface_default.xml)

インストール方法

1
pip install opencv-python

カスケードファイルのダウンロード先:

OpenCV GitHub

顔画像の登録と保存方法

結論

まず最初に、自分の顔を登録してデータとして保存します。

理由

ログイン時に「誰と一致しているか」を判定するには、比較対象が必要だからです。

実装の流れ

• カメラを起動

• 顔を検出

• 撮影した画像を保存(データベース代わり)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray)
    for (x, y, w, h) in faces:
        face = frame[y:y+h, x:x+w]
        cv2.imwrite("face.jpg", face)
        cv2.rectangle(frame, (x,y), (x+w,y+h), (255,0,0), 2)
    cv2.imshow('Register Face', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

顔認証の実装方法(ログイン判定)

結論

登録された顔と現在の顔が似ていれば、「ログイン成功」と判定します。

理由

顔画像の類似度を比較することで、本人かどうかを判断できます。

実装手順

• 登録画像を読み込む

• 現在の顔画像を読み込む

• 画像の類似度(ヒストグラム比較)を使って照合する

1
2
3
4
5
6
7
8
9
def is_match(img1_path, img2_path):
    img1 = cv2.imread(img1_path)
    img2 = cv2.imread(img2_path)
    img1 = cv2.resize(img1, (100, 100))
    img2 = cv2.resize(img2, (100, 100))
    hist1 = cv2.calcHist([img1], [0], None, [256], [0,256])
    hist2 = cv2.calcHist([img2], [0], None, [256], [0,256])
    score = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
    return score > 0.9  # 0.9以上で一致と判断

顔認証ログインの完成形コード

以下が、顔認証ログインシステムの完成コードです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cv2
def is_match(img1_path, img2_path):
    img1 = cv2.imread(img1_path)
    img2 = cv2.imread(img2_path)
    img1 = cv2.resize(img1, (100, 100))
    img2 = cv2.resize(img2, (100, 100))
    hist1 = cv2.calcHist([img1], [0], None, [256], [0,256])
    hist2 = cv2.calcHist([img2], [0], None, [256], [0,256])
    score = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
    return score > 0.9
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray)
    for (x, y, w, h) in faces:
        face = frame[y:y+h, x:x+w]
        cv2.imwrite("login_face.jpg", face)
        result = is_match("face.jpg", "login_face.jpg")
        print("ログイン成功" if result else "ログイン失敗")
    cv2.imshow('Login Check', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

セキュリティ対策のポイント

• 顔画像は暗号化して保存するのが理想的

• 類似度スコアのしきい値は調整可能

• 他人による不正アクセス対策には照度や表情などの調整も必要

関連リンク

まとめ

顔認証ログインシステムは、意外とシンプルな構造で作ることができます。

PythonとOpenCVを使えば、数十行のコードで本格的な本人確認ツールが完成します。

セキュリティを高めたい方、ログインの利便性を上げたい方は、ぜひこの記事を参考に、オリジナルの顔認証システムを作成してみてください

タイトルとURLをコピーしました