Skip to content
This repository has been archived by the owner on Sep 6, 2024. It is now read-only.

Latest commit

 

History

History
166 lines (114 loc) · 4.27 KB

README-Korean.md

File metadata and controls

166 lines (114 loc) · 4.27 KB

VisageSnap

Release build

English | 한국어

사진에서 얼굴을 감지하고 준지도 학습 (반지도 학습)을 통해서 모델을 학습시키고, 얼굴을 분류합니다.

Feature

  • 사진에서 얼굴을 인식합니다.
  • 준지도 학습을 통해 라벨링된 사진과 라벨링되지 않은 사진으로 모델을 학습시킬 수 있습니다.
  • 해당하는 얼굴이 모르는 사람의 얼굴인지, 아는 사람이라면 누구인지를 예측합니다.

Installation

Requirements

  • Python 3.9+
    • 3.9 이하 버전은 테스트되지 않았으며, pip를 통해 pickle 모듈을 설치해야 할 수 있습니다.
  • dilb

먼저 dilb를 설치해야 합니다. 이 곳의 지시에 따라 설치할 수 있습니다.

그 다음 pip를 이용해 VisageSnap를 설치합니다.

pip install visagesnap

Usage

얼굴에 라벨을 할당하기

분류하기를 원하는 얼굴에 NameLabel을 할당해야 합니다.

vs = VisageSnap.Core()
people = ['Tom', 'Jerry']
# ['NameLabel1', 'NameLabel2', 'NameLabel3'...]

vs.set_label(people)

또는 아래와 같이 NameLabel과 NumberLabel을 할당할 수도 있습니다: (NumberLabel에는 절대 -1을 할당할 수 없습니다)

people = {
    # 'NameLabel': NumberLabel
    'Tom': 0,
    'Jerry': 1
}

학습에 사용할 사진 파일을 디렉토리에 넣어야 합니다. 이 때 파일 이름은 다음과 같은 규칙을 따릅니다:

(NameLabel)-(아무 글자).확장자

Tom-123.png
Tom-124.jpg
Tom-126.jpeg
Jerry-2.png
Jerry-3.png
Jerry-4.png

얼굴을 인식하고 모델을 학습시키기

학습하기 전에, 먼저 모델을 불러와야합니다. 모델이 없다구요? 상관 없습니다. 모델이 모델 디렉토리에 존재하지 않으면 자동으로 새로운 모델을 생성합니다.

vs.load_model()

이제 디렉토리에 있는 사진 파일을 통해 모델을 학습시킵니다.

vs.train_labeled_data()

만약 라벨링되지 않은 사진 파일로 모델을 학습시키고 싶다면 다음과 같이 할 수 있습니다.

vs.train_unlabeled_data()

얼굴 예측 (분류)

예측하기를 원하는 사진 파일을 디렉토리에 넣고 다음과 같이 실행합니다.

result = vs.predict_all()
print(result)

결과 값은 다음과 같습니다.

{
   "target1.png": "Tom",
   "target2.jpeg": "Jerry",
   "target3.jpeg": ["Tom", "Jerry"], # 한 사진 안에 여러 사람이 있을 때
   "target4.jpeg": None # 모르는 사람일 떄
}

전체 코드

예제 전체 코드


디렉토리 설정

사진 파일들은 설정된 디렉토리에 있어야 합니다. 또한 모델 파일도 설정된 모델 디렉토리에 저장되고 로드됩니다. 다음과 같이 디렉토리를 설정할 수 있습니다.

from VisageSnap import Directory

my_dir = Directory( "labeled_pic",
                    "unlabeled_pic",
                    "my_model.d",
                    "predict_dir")
vs.set_directory(my_dir)

기본 디렉토리:

{
    "labeled": "labeled",
    "unlabeled": "unlabeled",
    "model": "model"
}

기타 메소드

얼굴의 정보 얻기

get_faceObject 메소드를 이용하여 faceObject를 얻을 수 있습니다. faceObject는 얼굴 정보를 포함하고 있는 dataclass입니다.

from visagesnap import From
# From.LABEL, From.FILENAME
face_tom = vs.get_faceObject(From.LABEL, "Tom")
face_tom = vs.get_faceObject(From.FILENAME, "Tom-123.png")
# face_tom = Face(label, encodings, filenames)

name: str = face_tom.label
encodings: NDArray = face_tom.encodings
filenames: list = face_tom.filenames

결정 임계값 (threshold) 변경하기

vs.threshold = 0.5  # Default: 0.48

Acknowledgement