初めに

ずっとどうやってやるのか知りたかった内容です。動画もしくは画像中の人物が、既知の人物かどうか確認する方法です。

玄関先にカメラを付けたRaspberry Piを玄関先につけて、常にプログラムを走らせておいて、同一人物を特定出来たらiftttのwebhookを使ってsesamiの解錠を使えばかなりいい感じになると思います。といっても、私の顔の拡大写真をもった人が写真をカメラに向ければ解錠できてしまうのでセキュリティー上は良くないです。

パッケージはface_recognitionというものを使います。(dlibのラッパーのようです。)まずはpip install face_recognitionでパッケージをインストールしてください。あとは簡単です。

1枚の写真中の人物と、1枚の写真中の人物が同じかどうか確かめる

import face_recognition

known_image = face_recognition.load_image_file("known.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")

known_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([known_encoding], unknown_encoding)

[True]

TrueかFalseで結果が返されます。最後の行で、[known_encoding]がリスト化する必要があることに注意してください。

この計算は、まず顔の特徴点を使ってベクター(長さ128、eigen faceと呼ばれる)を作り、そのベクター間の距離を測定し(numpy.linalg.norm(face_encodings – face_to_compare, axis=1))、0.6以下であれば同一人物だと判定しているようです。

google colabでGPUを使用していない場合、以下のようなエラーが起こります。ランタイムにGPUを使用すればエラーは起こりません。

RuntimeError: Error while calling cudaGetDevice(&the_device_id) in file /tmp/pip-wheel-mmuzni47/dlib/dlib/cuda/gpu_data.cpp:201. code: 100, reason: no CUDA-capable device is detected

顔の位置を特定する

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
face_locations

[(263, 428, 449, 242)]

コマンドラインからの操作

フォルダ内の一括検索。

既知人物フォルダに知っている人の写真を入れ、調べたい写真フォルダ内に、検索したい人物の写真を入れます。

face_recognition ./既知人物写真フォルダ/ ./調べたい写真フォルダ/
./unknown_pictures/sample1.jpg,myface
./unknown_pictures/sample2.jpg,unknown_person
./unknown_pictures/sample3.jpg,trump
./unknown_pictures/neko,no_persons_found
./unknown_pictures/sample4.jpg,unknown_person

既知人物写真フォルダ内にある写真ファイルを使って、調べたい写真フォルダ内の人物を特定します。知っていれば、写真ファイル名が表示され、人が発見されなければno_persons_found、既知人物写真フォルダ内の人物と一致する人がいない場合は、unknown_personとなります。

フォルダ内写真の人物の位置を特定したい。

face_detection  ./調べたい写真フォルダ/

examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792

写真内の座標を教えてくれます。

Categories:

category