로메오의 블로그

[Facial Recognition] 얼굴 인식하기 본문

Backend/Python & Blockchain

[Facial Recognition] 얼굴 인식하기

romeoh 2019. 7. 19. 05:18
반응형

[Facial Recognition] 단체사진에서 인원수 알아내기

[FACIAL RECOGNITION] 얼굴 비교하기

[FACIAL RECOGNITION] 얼굴 추출하기

 

img/group 폴더에 gates-jobs.jpg 사진을 추가합니다.

gates-jobs.jpg

$ touch identify.py
import face_recognition
from PIL import Image, ImageDraw

# 빌게이츠 원본 인코딩
bill_image = face_recognition.load_image_file('./img/known/Bill Gates.jpg')
bill_face_encoding = face_recognition.face_encodings(bill_image)[0]

# 스티브잡스 원본 인코딩
steve_image = face_recognition.load_image_file('./img/known/Steve Jobs.jpg')
steve_face_encoding = face_recognition.face_encodings(steve_image)[0]

# 원본 이미지 인코딩
known_face_encodings = [
    bill_face_encoding,
    steve_face_encoding
]

# 이름 라벨링
known_face_names = [
    "Bill Gates",
    "Steve Jobs"
]

# 비교대상 이미지 인코딩
test_image = face_recognition.load_image_file('./img/group/gates-jobs.jpg')
face_locations = face_recognition.face_locations(test_image)
face_encodings = face_recognition.face_encodings(test_image, face_locations)

# Pil 포맷으로 변환
pil_image =  Image.fromarray(test_image)

# ImageDraw 인스턴스 생성
draw = ImageDraw.Draw(pil_image)

# 테스트 이미지에서 얼굴을 loop
for(top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
    matches = face_recognition.compare_faces(known_face_encodings, face_encoding)

    name = "Unknown People"

    # 테스트 이미지에 얼굴이 있을경우 이름과 index를 저장함
    if True in matches:
        first_match_index = matches.index(True)
        name = known_face_names[first_match_index]
    
    # 얼굴에 box를 그린다.
    draw.rectangle(((left, top), (right, bottom)), outline=(0,0,0))

    # label을 그린다.
    text_width, text_height = draw.textsize(name)
    draw.rectangle(((left, bottom - text_height - 10), (right, bottom)), fill=(0,0,0), outline=(0,0,0))
    draw.text((left + 6, bottom - text_height - 5), name, fill=(255,255,255,255))
del draw

# 사진 표시
pil_image.show()
$ python3 identify.py 

 

반응형
Comments