BLOG

PythonでAI顔認識に挑戦!InsightFaceで顔識別を試してみた

私は普段は会社でシステム開発の仕事をしていますが、週に一回、名古屋の専門学校でPythonの授業も行っています。
学生たちと一緒にPythonの基礎から応用までを学びながら、実際に動くものを作る実践的なプログラミングにも挑戦しています。その一環として、顔識別システムの開発に取り組む予定です。

InsightFaceとは?

顔認識技術は今や日常的によく使われている技術で、スマートフォンのロック解除や写真アプリ、監視カメラなど、私たちの身近なところで活躍しています。
今回使用したのは、顔認識ライブラリのInsightFace。このライブラリは、顔を検出するだけでなく、個人を識別するための特徴量(顔ベクトル)を簡単に取得できる便利なツールです。

InsightFaceの特徴は以下の通りです:

顔検出: 高精度の顔検出モデルで複数の顔を同時に検出可能。
特徴量抽出: 各顔の特徴を512次元のベクトルとして数値化。
類似度計算: 登録済みの特徴量と新しい顔の特徴量をコサイン類似度で比較し、一致度を計算。

技術的に試したこと
今回は、以下の技術ステップでプログラムを構築しました。

① 顔の登録
まず、InsightFaceを使って顔データを登録する仕組みを作りました。
顔を512次元のベクトルとして数値化し、名前と一緒に保存します。

# 顔特徴量を抽出してデータベースに保存
faces = app.get(image) # InsightFaceで顔検出
embedding = faces[0].embedding # 512次元の特徴量を取得
database[‘saida’] = embedding # 名前と特徴量を紐づけて保存
これにより、システムに識別可能な顔データベースを構築できます。

② 写真からの顔検出と識別
写真をアップロードし、InsightFaceで顔を検出します。検出した顔ごとに登録データベースと照合し、一致度が閾値(今回は0.6)を超えた場合、その名前を表示します。

# 登録済みデータベースとの類似度を計算
similarity = cosine_similarity(new_face_embedding, registered_embedding)
if similarity > threshold:
print(f”Identified as {name} with similarity {similarity}”)

③ 顔の識別結果を表示
識別された顔には、緑色のバウンディングボックスと名前、類似度スコアを表示。以下のように処理された結果が得られます。

実際のテスト結果がこちら!

上の写真では、登録済みの自分の顔が「saida (0.62)」と認識されています。一方で、登録されていない顔にはモザイクがかけています。(おまけ機能)

今回使った技術のポイント

コサイン類似度の利用
顔の特徴量をベクトルとして保存し、新しい顔の特徴量との類似度をコサイン類似度で計算しました。この方法は、高次元のデータ間での類似性を測るのに適しています。

def cosine_similarity(v1, v2):
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

モザイク処理(おまけ)
プライバシー保護のため、未登録の顔にはGaussianBlurを使ってモザイクを適用しました。

InsightFaceの活用
InsightFaceの事前学習モデルを使うことで、少ないコード量で高精度の顔認識機能を実現しました。

次に目指したいこと

今回のプログラムでは、「顔識別」の部分を試してみました。これを応用すれば、AI出席管理システムを作ることも可能です。例えば:

授業の開始時にカメラを使って自動で出席を記録
出席データを保存して統計を取る
未登録者の入室を検知して通知する
といった機能を追加することで、さらに実用的なシステムを目指せそうです。

まとめ

InsightFaceを使った顔識別の仕組みを試してみた結果、PythonとAIライブラリを組み合わせることで、想像以上に簡単に本格的なシステムが作れることがわかりました。顔認識はセキュリティや教育現場など、応用範囲が広く、非常に興味深い技術です。

次回はさらに進化したプログラムや、AIを使った新しい挑戦をご紹介できればと思っています。それではまた!😊

関連記事

コメント

この記事へのコメントはありません。

TOP