[[207803]] 環境要件 - ウブントゥ 17.10
- Python 2.7.14
環境構築 1. Ubuntu 17.10 をインストールします > インストール手順はここにあります。 2. Python 2.7.14 をインストールします (Ubuntu 17.10 のデフォルトの Python バージョンは 2.7.14 です) 3. git、cmake、python-pipをインストールする - # gitをインストールする
- $ sudo apt-get install -y git
- # cmakeをインストールする
- $ sudo apt-get install -y cmake
- # python-pip をインストールする
- $ sudo apt-get install -y python-pip
4. dlibをインストールしてコンパイルする face_recognition をインストールする前に、dlib をインストールしてコンパイルする必要があります。 - # dlib をコンパイルする前に boost をインストールします
- $ sudo apt-get install libboost- all -dev
-
- # dlibのコンパイルを開始
- # dlibソースコードをクローンする
- $ git クローン https://github.com/davisking/dlib.git
- $ cd dlib
- $ mkdir ビルド
- $ cd ビルド
- $ cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
- $ cmake
- $ cd ..
- $ python setup.py インストール
5. 顔認識をインストールする - # 顔認識をインストールする
- $ pip 顔認識をインストール
- # face_recognitionのインストール中に、numpy、scipyなどが自動的にインストールされます
環境がセットアップされたら、ターミナルで face_recognition コマンドを入力して、成功するかどうかを確認します。 顔認識の実装 例 1 (顔認識を実装するための 1 行のコマンド): 1. まず、システムに認識させたいすべての人の写真を含むフォルダーを用意する必要があります。それぞれの人物に 1 枚の写真があり、写真には人物の名前が付けられています。 known_peopleフォルダにはベイビー、ジャッキー・チェン、ジョイ・ヨンの写真が含まれています 2. 次に、識別する画像を含む別のフォルダーを準備する必要があります。 unknown_pic フォルダには識別対象の写真が含まれており、その中にはマシンにとって未知の Han Hong も含まれています。 3. 次に、準備した 2 つのフォルダーをパラメーターとして渡して face_recognition コマンドを実行すると、認識する画像に写っている人物が返されます。 識別成功!!! 例 2 (写真内のすべての顔を認識して表示する): - # ファイル名: find_faces_in_picture.py
- # -*- コーディング: utf-8 -*-
- # pilモジュールをインポートします。これはapt-get install python-Imagingコマンドを使用してインストールできます。
- PIL インポート画像から
- # face_recognitionモジュールをインポートします。これは、pip install face_recognitionコマンドを使用してインストールできます。
- 顔認識をインポートする
-
- # jpgファイルをnumpy配列にロードする
- 画像 = face_recognition.load_image_file( "/opt/face/unknown_pic/all_star.jpg" )
-
- # デフォルトのHOGモデルを使用して画像内のすべての顔を見つけます
- # この方法は非常に正確ですが、GPUアクセラレーションを使用しないため、CNNモデルほど正確ではありません。
- # 参照: find_faces_in_picture_cnn.py
- face_locations = face_recognition.face_locations(画像)
-
- # CNNモデルの使用
- # face_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model= "cnn" )
-
- # 印刷: 画像内にいくつの顔が見つかりましたか?
- print( "この写真には {} 人の顔が見つかりました。" .format(len(face_locations)))
-
- # 見つかったすべての面をループする
- face_locations内のface_locationの場合:
-
- # 各顔の位置情報を出力します
- 上、右、下、左= 顔の位置
- print( "顔はピクセル位置にあります。上: {}、左: {}、下: {}、右: {}" .format( top 、 left 、 bottom 、 right ))
-
- # 顔の位置情報を指定して顔画像を表示する
- face_image = 画像[上:下、左:右]
- pil_image = Image.fromarray(face_image)
- pil_image.show()
識別用画像 - # Pythonファイルを実行する
- $ python find_faces_in_picture.py
画像から7人の顔を識別して表示する 例3(顔の特徴を自動的に識別する): - # ファイル名: find_facial_features_in_picture.py
- # -*- コーディング: utf-8 -*-
- # pilモジュールをインポートします。これはapt-get install python-Imagingコマンドを使用してインストールできます。
- PILからImage、ImageDraw をインポートします
- # face_recognitionモジュールをインポートします。これは、pip install face_recognitionコマンドを使用してインストールできます。
- 顔認識をインポートする
-
- # jpgファイルをnumpy配列にロードする
- 画像 = face_recognition.load_image_file( "biden.jpg" )
-
- # 画像内のすべての顔の特徴をすべて見つける
- face_landmarks_list = face_recognition.face_landmarks(画像)
-
- print( "この写真には {} 人の顔が見つかりました。" .format(len(face_landmarks_list)))
-
- face_landmarks_list内のface_landmarksの場合:
-
- # この画像の各顔の特徴の位置を印刷します
- 顔の特徴 = [
- 「あご」 、
- '左眉' ,
- '右眉' ,
- 'ノーズブリッジ' ,
- '鼻先' ,
- '左目' 、
- '右目' 、
- '上唇' 、
- '下唇'
- ]
-
- facial_features内のfacial_featureの場合:
- print( "この面の {} には次のポイントがあります: {}" .format(facial_feature, face_landmarks[facial_feature]))
-
- # それぞれの顔の特徴を画像で表現してみましょう!
- pil_image = Image.fromarray(画像)
- d = ImageDraw.Draw(pil_image)
-
- facial_features内のfacial_featureの場合:
- d.line(顔のランドマーク[顔の特徴], 幅=5)
-
- pil_image.show()
顔の特徴を自動的に識別する 例4(人物の顔の識別): - # ファイル名: recognize_faces_in_pictures.py
- # -*- 含む: utf-8 -*-
- # face_recognitionモジュールをインポートします。これは、pip install face_recognitionコマンドを使用してインストールできます。
- 顔認識をインポートする
-
- # jpgファイルをnumpy配列にロードする
- babe_image = face_recognition.load_image_file( "/opt/face/known_people/babe.jpeg" )
- Rong_zhu_er_image = face_recognition.load_image_file( "/opt/face/known_people/Rong zhu er.jpg" )
- 不明な画像 = face_recognition.load_image_file( "/opt/face/unknown_pic/babe2.jpg" )
-
- # 各画像ファイル内の各顔の顔エンコーディングを取得します
- #各画像には複数の顔がある可能性があるため、エンコードされたリストが返されます。
- # ただし、画像ごとに顔が 1 つしかないことはわかっているので、各画像の最初のエンコーディングのみを気にし、インデックス 0 を取得します。
- babe_face_encoding = face_recognition.face_encodings(babe_image)[0]
- Rong_zhu_er_face_encoding = 顔認識.face_encodings(Rong_zhu_er_image)[0]
- 不明な顔エンコーディング = face_recognition.face_encodings(不明な画像)[0]
-
- 既知の顔 = [
- ベイブフェイスエンコーディング、
- Rong_zhu_er の顔エンコーディング
- ]
-
- # 結果はTrue / Falseの配列で、未知の顔がknown_faces配列のいずれかと一致するかどうかを示す
- 結果 = face_recognition.compare_faces(既知の顔、未知の顔のエンコード)
-
- print( "この知らない顔はベイブ? {}" .format(results[0]))
- print( "この知られざる顔はジョイ・ヨンでしょうか? {}" .format(results[1]))
- print( "この未知の顔は、私たちが今まで見たことのない新しい顔でしょうか? {}" .format( not 真実 結果的に
結果は図に示す通りである。 例5(顔の特徴を認識して顔を美しくする): - # ファイル名: digital_makeup.py
- # -*- コーディング: utf-8 -*-
- # pilモジュールをインポートします。これはapt-get install python-Imagingコマンドを使用してインストールできます。
- PILからImage、ImageDraw をインポートします
- # face_recognitionモジュールをインポートします。これは、pip install face_recognitionコマンドを使用してインストールできます。
- 顔認識をインポートする
- # jpgファイルをnumpy配列にロードする
- 画像 = face_recognition.load_image_file( "biden.jpg" )
- # 画像内のすべての顔の特徴をすべて見つける
- face_landmarks_list = face_recognition.face_landmarks(画像)
- face_landmarks_list内のface_landmarksの場合:
- pil_image = Image.fromarray(画像)
- d = ImageDraw.Draw(pil_image, 'RGBA' ) です。
- #眉毛を悪夢にする
- d.polygon(face_landmarks[ 'left_eyebrow' ], 塗りつぶし=(68, 54, 39, 128))
- d.polygon(face_landmarks[ 'right_eyebrow' ], 塗りつぶし=(68, 54, 39, 128))
- d.line(face_landmarks[ 'left_eyebrow' ], 塗りつぶし=(68, 54, 39, 150), 幅=5)
- d.line(face_landmarks[ 'right_eyebrow' ], 塗りつぶし=(68, 54, 39, 150), 幅=5)
- #ツヤツヤ唇
- d.polygon(face_landmarks[ 'top_lip' ], 塗りつぶし=(150, 0, 0, 128))
- d.polygon(face_landmarks[ 'bottom_lip' ], 塗りつぶし=(150, 0, 0, 128))
- d.line(face_landmarks[ 'top_lip' ], 塗りつぶし=(150, 0, 0, 64), 幅=8)
- d.line(face_landmarks[ 'bottom_lip' ], 塗りつぶし=(150, 0, 0, 64), 幅=8)
- #輝く瞳
- d.polygon(face_landmarks[ 'left_eye' ], fill=(255, 255, 255, 30))
- d.polygon(face_landmarks[ 'right_eye' ], fill=(255, 255, 255, 30))
- #アイライナーを塗る
- d.line(face_landmarks[ 'left_eye' ] + [face_landmarks[ 'left_eye' ][0]], 塗りつぶし=(0, 0, 0, 110), 幅=6)
- d.line(face_landmarks[ 'right_eye' ] + [face_landmarks[ 'right_eye' ][0]], 塗りつぶし=(0, 0, 0, 110), 幅=6)
- pil_image.show()
美容整形前と美容整形後 |