import face_recognition
import cv2
from PIL import Image
import numpy as np
import sys
class FaceTrack:
def __init__(self, char_image_path, target_image_path):
self.character_image = self.image_load(char_image_path)
self.target_image = self.image_load(target_image_path)
self.result_image = self.image_load(target_image_path)
self.return_image = self.image_load(target_image_path)
self.compare = None
self.color_list = [
[255,0,0],
[255,128,0],
[255,255,0],
[128,255,0],
[0,255,0],
[0,0,255],
[127,0,255],
[128,128,128]
]
def main_loop(self):
self.image_encoding_compare()
self.check_and_draw_face_locations()
def image_load(self, image_path):
image = face_recognition.load_image_file(image_path)
return image
def image_encoding_compare(self):
try:
char_encoding = face_recognition.face_encodings(self.character_image)[0]
tar_encoding = face_recognition.face_encodings(self.target_image)
self.compare = face_recognition.compare_faces(char_encoding, tar_encoding)
except IndexError as e:
print(f"Can't finding face : {e} ")
def check_and_draw_face_locations(self):
face_locations = face_recognition.face_locations(self.target_image)
index = 0
for i in self.compare:
if i:
self.draw_rect(face_locations[index], index)
index = index + 1
def draw_rect(self, face_location, index):
left, top, right, bottom = face_location
for i in range(left, right+1):
for j in range(-1,2):
self.result_image[i][bottom+j] = self.color_list[index]
self.result_image[i][top+j] = self.color_list[index]
for i in range(bottom, top+1):
for j in range(-1,2):
self.result_image[left+j][i] = self.color_list[index]
self.result_image[right+j][i] = self.color_list[index]
def print_draw_face_locations(self):
face_locations = face_recognition.face_locations(self.return_image)
index = 0
for left, top, right, bottom in face_locations:
for i in range(left, right+1):
for j in range(-1,2):
self.return_image[i][bottom+j] = self.color_list[index]
self.return_image[i][top+j] = self.color_list[index]
for i in range(bottom, top+1):
for j in range(-1,2):
self.return_image[left+j][i] = self.color_list[index]
self.return_image[right+j][i] = self.color_list[index]
index = index + 1
return self.return_image
def print_char_image(self):
Image.fromarray(self.character_image)
def print_tar_image(self):
Image.fromarray(self.target_image)
def print_result_image(self):
Image.fromarray(self.result_image)
def get_char_image(self):
return self.character_image
def get_tar_image(self):
return self.target_image
def get_result_image(self):
return self.result_image
728x90
반응형
'개발 노트 > 파이썬 함수 목록' 카테고리의 다른 글
이미지 파일 학습용 데이터로 만들기 (0) | 2023.01.08 |
---|---|
Gradient Boosting 기반 LCK Spring 선수 별 지표 분석 (0) | 2022.01.25 |
파이썬 리버시 게임 소스코드 (0) | 2022.01.08 |
파이썬 가상환경 만들기 - venv (0) | 2021.10.28 |