본문 바로가기

AI/Cartoonize

사진을 만화화하다 - 2

반응형

 

2022.08.08 - [AI/Cartoonize] - 사진을 만화화하다-1

 

사진을 만화화하다-1

인공지능을 이용해서 어떤게 가능할까? 고민하다가 갑자기 사진을 만화화하면? 생각이 번쩍해서 관련 사이트 및 서비스를 검색했습니다. 물론 오래전부터 포토샵 필터등을 이용해서 사진을 만

tobelinuxer.tistory.com

사진을 만화화하다는 주제로 관련 정보를 정리 중에 있습니다.

첫번째 시간에서는 아래를 참고하여 몇가지 샘플(이미지)을 만화화 해보았습니다.

정면, 인물 중심, 단독 사진은 잘 변경되지만, 여러명, 풍경 중심 사진은 결과물이 좋지 못했습니다.

https://github.com/bryandlee/animegan2-pytorch

 

GitHub - bryandlee/animegan2-pytorch: PyTorch implementation of AnimeGANv2

PyTorch implementation of AnimeGANv2. Contribute to bryandlee/animegan2-pytorch development by creating an account on GitHub.

github.com

이번 시간에는 위 Github의 demo 파일을 분석해보겠습니다.

https://github.com/bryandlee/animegan2-pytorch/blob/main/demo.ipynb

import requests

img = Image.open(requests.get("https://upload.wikimedia.org/wikipedia/commons/8/85/Elon_Musk_Royal_Society_%28crop1%29.jpg", stream=True).raw).convert("RGB")
# img = Image.open("/content/sample.jpg").convert("RGB")

face_detector = get_dlib_face_detector()
landmarks = face_detector(img)

display_facial_landmarks(img, landmarks, fig_size=[5, 5])

for landmark in landmarks:
    face = align_and_crop_face(img, landmark, expand=1.3)
    display(face2paint(model=model, img=face, size=512))

1. 만화화할 Image를 불러옵니다(img).

2. 얼굴을 인식할 모듈(dlib)을 불러옵니다.(face_detector)

3. face_detector을 이용해서 만화화할 img에 포함되있는 얼굴을 인식합니다.(landmarks)

    pred_types = {
        'face': pred_type(slice(0, 17), (0.682, 0.780, 0.909, 0.5)),
        'eyebrow1': pred_type(slice(17, 22), (1.0, 0.498, 0.055, 0.4)),
        'eyebrow2': pred_type(slice(22, 27), (1.0, 0.498, 0.055, 0.4)),
        'nose': pred_type(slice(27, 31), (0.345, 0.239, 0.443, 0.4)),
        'nostril': pred_type(slice(31, 36), (0.345, 0.239, 0.443, 0.4)),
        'eye1': pred_type(slice(36, 42), (0.596, 0.875, 0.541, 0.3)),
        'eye2': pred_type(slice(42, 48), (0.596, 0.875, 0.541, 0.3)),
        'lips': pred_type(slice(48, 60), (0.596, 0.875, 0.541, 0.3)),
        'teeth': pred_type(slice(60, 68), (0.596, 0.875, 0.541, 0.4))
    }

landmarks의 데이터 포멧은 소스 코드 중에 위 부분을 보면 유추해 볼수 있습니다.

예로 0~16까지 포인트는 전체 얼굴 윤곽을 나타냅니다.

4. 원본 이미지(img)에 landmarks에 저장된 포인트에 점을 찍습니다.

5. 루프문을 돌면서(landmarks가 2개 존재하면 검출된 얼굴은 두개입니다.) landmark를 바탕으로 얼굴을 align하고 crop 합니다.(align_and_crop_face)

6. 짜른 얼굴(face)을 해당 사이트에서 제공하는 딥러닝 모델을 통과 시킵니다.(face2paint)

제가 보기에는 퀄리티가 매우 좋습니다. 

dlib의 face detector의 landmark를 이용하여 얼굴을 정렬하고 짜르는 align_and_crop_face 함수가 제일 복잡한 함수라 이부분만 이해한다면 그렇게 어렵지 않은 데모 코드였습니다. ( AI 데모 코드의 공통점인 것 같습니다. )

하지만 저는 관련 지식이 부족해서 좋은 공부였습니다^^

이번 포스팅은 여기서 마치고 다음 포스팅에서 해당 데모 코드를 이용해서 전체 이미지와 합성해보겠습니다.

반응형

'AI > Cartoonize' 카테고리의 다른 글

사진을 만화화하다 - 3  (1) 2022.08.11
사진을 만화화하다 - 1  (0) 2022.08.08