'''
安装库文件: pip install dlib face_recognition
''' import dlib
import face_recognition
import cv2
from PIL import Image, ImageDraw
def check_env ( ) : print ( dlib. DLIB_USE_CUDA) print ( dlib. cuda. get_num_devices( ) )
def get_face_location ( image_flle) : image_fr = face_recognition. load_image_file( image_flle) face_locations = face_recognition. face_locations( image_fr) print ( face_locations) image_cv = cv2. imread( image_flle) for location in face_locations: y0, x1, y1, x0 = locationcv2. rectangle( image_cv, ( x0, y0) , ( x1, y1) , ( 0 , 0 , 255 ) , 4 ) cv2. imwrite( image_flle + '.new_image.jpg' , image_cv) return face_locations
def extract_face ( image_file) : image_cv = cv2. imread( image_file) face_recognitions = get_face_location( image_file) for i, location in enumerate ( face_recognitions) : y0, x1, y1, x0 = locationface_image = image_cv[ y0: y1, x0: x1] cv2. imwrite( f" { image_file} .face_ { i} .jpg" , face_image)
def encode_face ( image_file) : image_fr = face_recognition. load_image_file( image_file) face_recognitions = face_recognition. face_locations( image_fr) face_encodings = face_recognition. face_encodings( image_fr, face_recognitions) return face_encodings[ 0 ]
def compare_face ( image_file1, image_file2) : face_encoding1 = encode_face( image_file1) face_encoding2 = encode_face( image_file2) ret = face_recognition. compare_faces( [ face_encoding1] , face_encoding2) return ret
def mark_face ( image_file) : image_fr = face_recognition. load_image_file( image_file) face_marks = face_recognition. face_landmarks( image_fr) image_pil = Image. fromarray( image_fr) image_draw = ImageDraw. Draw( image_pil) for face_mark in face_marks: for facial_feature in face_mark. keys( ) : image_draw. line( face_mark[ facial_feature] , width= 5 ) image_pil. save( f" { image_file} _face_mark.jpg" )
def beautify_face ( image_file) : image_fr = face_recognition. load_image_file( image_file) face_marks = face_recognition. face_landmarks( image_fr) image_pil = Image. fromarray( image_fr) for i, face_mark in enumerate ( face_marks) : image_draw = ImageDraw. Draw( image_pil) image_draw. polygon( face_mark[ 'left_eyebrow' ] , fill= ( 68 , 54 , 39 , 128 ) ) image_draw. polygon( face_mark[ 'right_eyebrow' ] , fill= ( 68 , 54 , 39 , 128 ) ) image_draw. line( face_mark[ 'left_eyebrow' ] , fill= ( 68 , 54 , 39 , 150 ) , width= 2 ) image_draw. line( face_mark[ 'right_eyebrow' ] , fill= ( 68 , 54 , 39 , 150 ) , width= 2 ) image_draw. polygon( face_mark[ 'top_lip' ] , fill= ( 150 , 0 , 0 , 60 ) ) image_draw. polygon( face_mark[ 'bottom_lip' ] , fill= ( 150 , 0 , 0 , 60 ) ) image_draw. line( face_mark[ 'top_lip' ] , fill= ( 150 , 0 , 0 , 20 ) , width= 2 ) image_draw. line( face_mark[ 'bottom_lip' ] , fill= ( 150 , 0 , 0 , 20 ) , width= 2 ) image_draw. polygon( face_mark[ 'left_eye' ] , fill= ( 255 , 255 , 255 , 20 ) ) image_draw. polygon( face_mark[ 'right_eye' ] , fill= ( 255 , 255 , 255 , 20 ) ) image_draw. line( face_mark[ 'left_eye' ] + [ face_mark[ 'left_eye' ] [ 0 ] ] , fill= ( 0 , 0 , 0 , 50 ) , width= 2 ) image_draw. line( face_mark[ 'right_eye' ] + [ face_mark[ 'right_eye' ] [ 0 ] ] , fill= ( 0 , 0 , 0 , 50 ) , width= 2 ) image_pil. save( f" { image_file} .beautify_face.png" ) def main ( ) : check_env( ) face_locations = get_face_location( '1.webp' ) print ( face_locations) extract_face( '3.jpg' ) face_encodings = encode_face( '1.webp.face_0.jpg' ) print ( face_encodings) ret = compare_face( '1.webp.face_1.jpg' , '3.jpg.face_1.jpg' ) print ( ret) mark_face( '1.webp' ) beautify_face( '1.webp' ) if __name__== "__main__" : main( )