利用条件などは利用者において確認してください
【サイト内の関連ページ】
参考 Web ページ: https://github.com/ageitgey/face_recognition
システム Python を使うことができる(その場合,Python のインストールは行わない)
システム Python を用いるときは,pip, setuptools の更新は次のコマンドで行う.
sudo apt -y update sudo apt -y install python3-pip python3-setuptools
Ubuntu で,システム Python 以外の Python をインストールしたい場合は pyenv が便利である: 別ページで説明している.
Python の URL: http://www.python.org/
【Python, pip の使い方】
Python, pip は,次のコマンドで起動できる.
【Python 開発環境のインストール】
JupyterLab, spyder, nteract (Python 開発環境) のインストールは, Windows でコマンドプロンプトを管理者として実行し, 次のコマンドを実行.
python -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
詳しくは,: 別ページで説明している.
JupyterLab, spyder, nteract (Python 開発環境) のインストール: : 別ページで説明している.
コマンドプロンプトを管理者として実行し,次のコマンドを実行.
python -m pip install -U pip setuptools python -m pip install -U numpy pillow opencv-python keras
端末で,次のコマンドを実行.
sudo apt -y update sudo apt -y install python3-numpy python3-pil python3-opencv python3-keras
まだインストールしていない場合には、次の手順でインストールする Windows での手順を示す.Ubuntu の場合も同様の手順になる.
mkdir c:\pytools cd c:\pytools rmdir /s /q face_recognition
このとき,Dlib もインストールされる.
cd c:\pytools git clone https://github.com/ageitgey/face_recognition cd face_recognition python setup.py build python setup.py install
コマンドプロンプトで次のコマンドを実行
mkdir c:\pytools\face_recognition\known_people mkdir c:\pytools\face_recognition\unknown_pictures
c:\pytools\face_recognition\examples にある顔画像のファイル 「biden.jpg」と「obama.jpg」を,先ほど作成した ディレクトリ known_people の下にコピー
copy c:\pytools\face_recognition\examples\biden.jpg c:\pytools\face_recognition\known_people copy c:\pytools\face_recognition\examples\obama.jpg c:\pytools\face_recognition\known_people
c:\pytools\face_recognition\examples にある顔画像のファイル 「two_people.jpg」を,先ほど作成した ディレクトリ unknown_pictures の下にコピー
copy c:\pytools\face_recognition\examples\two_people.jpg c:\pytools\face_recognition\unknown_pictures
unknown_pictures の下にある画像ファイルを、 known_people 下の画像ファイルを照合して顔識別を行うコマンド
cd c:\pytools\face_recognition face_recognition --show-distance true known_people unknown_pictures
cd c:\pytools\face_recognition face_detection --model cnn unknown_pictures
表示される4つの数字は、顔領域の座標値
Python プログラムを動かす.
「C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.
import face_recognition
image = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/two_people.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")
print(face_locations)
プログラムは、https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py のものを一部変更したものを掲載している
「C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.
import face_recognition
import PIL
import cv2
F = "C:/pytools/face_recognition/unknown_pictures/two_people.jpg"
image = face_recognition.load_image_file(F)
face_locations = face_recognition.face_locations(image, model="cnn")
def box_label(bgr, x1, y1, x2, y2, label):
cv2.rectangle(bgr, (x1, y1), (x2, y2), (255, 0, 0), 1, 1)
cv2.rectangle(bgr, (int(x1), int(y1-25)), (x2, y1), (255,255,255), -1)
cv2.putText(bgr, label, (x1, int(y1-5)), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0,0,0), 1)
bgr = cv2.imread(F)
for face_location in face_locations:
top, right, bottom, left = face_location
box_label(bgr, left, top, right, bottom, 'face')
cv2.imshow('', bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()
画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる
chin, left_eyebrow, right_eyebrow, nose_bridge, left_eye, right_eye の情報が表示される
import face_recognition
image = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/two_people.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")
face_landmarks_list = face_recognition.face_landmarks(image, face_locations=face_locations)
for i in face_landmarks_list:
print(i)
プログラムは、https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py のものを一部変更したものを掲載している
「C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.
import face_recognition
import PIL
import cv2
F = "C:/pytools/face_recognition/unknown_pictures/two_people.jpg"
image = face_recognition.load_image_file(F)
face_locations = face_recognition.face_locations(image, model="cnn")
face_landmarks_list = face_recognition.face_landmarks(image, face_locations=face_locations)
def box_label(bgr, x1, y1, x2, y2, label):
cv2.rectangle(bgr, (x1, y1), (x2, y2), (255, 0, 0), 1, 1)
cv2.rectangle(bgr, (int(x1), int(y1-25)), (x2, y1), (255,255,255), -1)
cv2.putText(bgr, label, (x1, int(y1-5)), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0,0,0), 1)
bgr = cv2.imread(F)
for i in face_landmarks_list:
for j in i.keys():
for k in (i[j]):
cv2.circle(bgr, (k[0], k[1]), 2, (255, 0, 0), -1)
cv2.imshow('', bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()
画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる
import face_recognition
image = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/two_people.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")
face_landmarks_list = face_recognition.face_landmarks(image, face_locations=face_locations)
for i in face_landmarks_list:
print(i['left_eye'])
print(i['left_eyebrow'])
プログラムは、https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py のものを一部変更したものを掲載している
「C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.
import face_recognition
import PIL
import cv2
F = "C:/pytools/face_recognition/unknown_pictures/two_people.jpg"
image = face_recognition.load_image_file(F)
face_locations = face_recognition.face_locations(image, model="cnn")
face_landmarks_list = face_recognition.face_landmarks(image, face_locations=face_locations)
def box_label(bgr, x1, y1, x2, y2, label):
cv2.rectangle(bgr, (x1, y1), (x2, y2), (255, 0, 0), 1, 1)
cv2.rectangle(bgr, (int(x1), int(y1-25)), (x2, y1), (255,255,255), -1)
cv2.putText(bgr, label, (x1, int(y1-5)), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0,0,0), 1)
bgr = cv2.imread(F)
for i in face_landmarks_list:
for j in i['left_eye']:
cv2.circle(bgr, (j[0], j[1]), 2, (0, 255, 0), -1)
for j in i['left_eyebrow']:
cv2.circle(bgr, (j[0], j[1]), 2, (0, 0, 255), -1)
cv2.imshow('', bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()
画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる
2つの顔画像を比べる
import face_recognition
picture_of_obama = face_recognition.load_image_file("C:/pytools/face_recognition/known_people/obama.jpg")
obama_face_encoding = face_recognition.face_encodings(picture_of_obama)[0]
biden_picture = face_recognition.load_image_file("C:/pytools/face_recognition/known_people/biden.jpg")
biden_face_encoding = face_recognition.face_encodings(biden_picture)[0]
results = face_recognition.compare_faces([obama_face_encoding], biden_face_encoding)
print(results)
https://github.com/ageitgey/face_recognition に掲載の写真から切り取った、次の写真を使ってみる
上の画像ファイルを、C:/pytools/face_recognition/unknown_pictures の下に,104.png という名前で保存しておく
今度は True と表示される
import face_recognition
picture_of_obama = face_recognition.load_image_file("C:/pytools/face_recognition/known_people/obama.jpg")
obama_face_encoding = face_recognition.face_encodings(picture_of_obama)[0]
another_picture = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/104.png")
another_face_encoding = face_recognition.face_encodings(another_picture)[0]
results = face_recognition.compare_faces([obama_face_encoding], another_face_encoding)
print(results)
rmdir /s /q known_people rmdir /s /q unknown_pictures