사진을 애니메이션으로: API vs AnimeGAN v2/v3 (Open Source)
요약
본 기사는 사진을 애니메이션 스타일로 변환하는 두 가지 접근 방식인 클라우드 기반 Photo to Anime API와 오픈 소스 모델인 AnimeGAN v2/v3를 비교 분석합니다. API는 다양한 예술적 미학(Pixar, Arcane 등)과 세밀한 스타일 강도 조절 기능을 제공하여 폭넓은 활용성을 자랑하는 반면, AnimeGAN은 로컬에서 실행 가능한 안정적인 오픈 소스 솔루션을 제공하지만, 지원하는 스타일의 범위와 기능 면에서 API에 비해 제한적입니다. 결론적으로, 광범위하고 세밀한 커스터마이징이 필요한 프로덕션 환경에는 Photo to Anime API가 유리하며, 기본적인 애니메이션 변환을 로컬 환경에서 무료로 구현하고자 할 때는 AnimeGAN이 좋은 대안이 될 수 있습니다.
핵심 포인트
- Photo to Anime API는 14가지의 다양한 스타일(Pixar, Arcane 등)과 스타일 강도 조절 기능을 제공하여 높은 유연성을 가집니다.
- AnimeGAN v2/v3는 로컬에서 실행 가능한 오픈 소스 솔루션으로, 기본적인 애니메이션 초상화 생성이 가능합니다.
- API와 AnimeGAN의 가장 큰 차이점은 '스타일 커버리지 격차'로, API가 더 넓고 다양한 예술적 미학을 지원합니다.
- API 사용 시에는 네트워크 지연 시간이 발생하지만, 안정 상태 지연 시간(Steady-state latency)은 이미지당 1~2초로 빠릅니다. AnimeGAN v3는 CPU에서 약 700ms의 빠른 처리 속도를 보여줍니다.
- AnimeGAN 모델들은 일본 애니메이션이라는 단일 타겟 도메인에 초점을 맞춰 학습된 반면, API는 더 넓은 스타일 도메인을 지원합니다.
애플리케이션에 애니메이션 또는 만화 필터를 추가하고 싶으신가요? 오픈 소스(Open-source) 방식은 매력적입니다. AnimeGAN은 2020년부터 표준 모델로 자리 잡았으며, v2(2021)와 v3(2022)가 GitHub에서 사전 학습된 가중치(Pretrained weights)로 제공되고 있습니다. 이는 무료이며, 로컬에서 실행 가능하고, 괜찮은 수준의 애니메이션 초상화를 생성합니다. 하지만 실제 출력 결과와 프로덕션(Production) 환경에서 실행하는 데 필요한 사항을 살펴보면 상황이 달라집니다. 이 가이드는 동일한 초상화를 대상으로 클라우드 기반의 Photo to Anime API와 AnimeGAN v2 및 v3를 비교합니다. 본인의 사진으로 결과를 확인하고 싶으신가요? 초상화에 Photo to Anime API를 사용해 보세요.
빠른 비교
| 항목 | Photo to Anime API | AnimeGAN v2/v3 |
|---|---|---|
| 사용 가능한 스타일 | 14개 (6개 프리미엄 + 7개 클래식 + Ghibli) | 총 5개 (face_paint, celeba_distill, paprika, Hayao, Shinkai) |
| 스타일 다양성 | 만화, Pixar, Arcane, 코믹, 캐리커처, 일러스트레이션, 애니메이션, 스케치, Ghibli | 일본 애니메이션 전용 |
| 설정 | API 키 | PyTorch (~2GB) 또는 ONNX Runtime |
| 첫 실행 지연 시간 (First-run latency) | 1-2초 (네트워크만 해당) | 60초 (PyTorch 임포트 + 모델 다운로드) |
| 안정 상태 지연 시간 (Steady-state latency) | 이미지당 1-2초 | 2-3초 (v2 CPU) / 700ms (v3 CPU) |
| 출력 해상도 | 최대 1600x1344 | 512x512 고정 (v2 face_paint) |
| 스타일 강도 조절 | 가능 (0.0-1.0) | 불가능 (모델별 고정) |
| 라이선스 | 상업적 이용 가능 | 오픈 소스 (Open source) |
AnimeGAN의 기능
AnimeGAN은 사진을 애니메이션 스타일의 이미지로 변환하도록 학습된 GAN(Generative Adversarial Network)입니다. 각 버전은 몇 가지 사전 학습된 가중치와 함께 제공됩니다:
AnimeGANv2 (PyTorch):
- face_paint_512_v2: 초상화 중심, 깔끔한 선
- celeba_distill: CelebA에서 증류(Distilled), 부드러운 색상
- paprika: Paprika 미학으로 학습
AnimeGANv3 (ONNX):
- AnimeGANv3_Hayao_36: Hayao Miyazaki 스타일
- AnimeGANv3_Shinkai_37: Makoto Shinkai 스타일
모든 변형 모델은 동일한 입력에 대해 애니메이션 같은 음영이 들어간 스타일화된 버전이라는 유사한 결과를 생성합니다. 이들은 동일한 타겟 도메인(일본 애니메이션)을 대상으로 학습되었습니다.
Photo to Anime API가 하는 일
API는 총 14개의 스타일을 제공하는 3개의 엔드포인트 (endpoints)를 제공합니다:
/cartoonize-pro : 6개의 프리미엄 스타일 (Cartoon Pro, Caricature, Arcane, Comic, Pixar, Illustration)
/cartoonize : 7개의 클래식 스타일 (Anime, 3D, Hand-drawn, Sketch, Art Style, Design, Illustration)
/ghibli : 얼굴 보정 (face enhancement) 기능이 포함된 Studio Ghibli 스타일
프리미엄 스타일은 AnimeGAN이 도달할 수 없는 뚜렷한 예술적 미학 (artistic aesthetics)을 생성합니다. 동일한 초상화로 6가지의 서로 다른 모습을 만들어냅니다. 이 중 그 어떤 것도 AnimeGAN으로는 생성할 수 없습니다. 전체 가이드에서 나란히 비교한 이미지, 3가지 도구 모두에 대한 코드, 그리고 설치 과정의 번거로움을 확인해 보세요.
스타일 커버리지 격차 (The Style Coverage Gap)
이것이 근본적인 차이점입니다. AnimeGAN은 모델당 단일 타겟 미학을 위해 애니메이션 데이터셋으로 학습되었습니다. 반면 API는 더 넓은 스타일 도메인 세트를 지원합니다:
일본 애니메이션 (Japanese anime) : 둘 다 지원
Studio Ghibli : 둘 다 지원 (API는 전용 엔드포인트가 있고, AnimeGAN은 v3 Hayao가 있음)
Arcane / 다크 판타지 (dark fantasy) : API만 지원
Pixar / 3D 애니메이션 (3D animation) : API만 지원
만화책 (Comic book) : API만 지원
캐리커처 (Caricature) : API만 지원
스케치 / 선화 (Sketch / line drawing) : API만 지원
스타일 강도 조절 (Style intensity control) : API만 지원 (0.0에서 1.0)
AnimeGAN 로컬 실행하기
다음은 여러분의 기기에 AnimeGANv2를 설치하고 실행하는 방법입니다. Python 3.8 이상과 종속성 (dependencies)을 위한 약 2.5GB의 여유 디스크 공간이 필요합니다.
PyTorch를 사용한 AnimeGANv2
import torch
from PIL import Image
model = torch.hub.load("bryandlee/animegan2-pytorch:main", "generator", pretrained="face_paint_512_v2", trust_repo=True)
face2paint = torch.hub.load("bryandlee/animegan2-pytorch:main", "face2paint", size=512, trust_repo=True)
img = Image.open("portrait.jpg").convert("RGB")
with torch.no_grad():
output = face2paint(model, img)
output.save("result.jpg", quality=90)
첫 실행에는 PyTorch 임포트, GitHub에서의 리포지토리 클론 (repo clone), 모델 가중치 (model weight) 다운로드, 초기 추론 (initial inference)을 포함하여 약 60초가 소요됩니다. 이후 실행은 CPU에서 이미지당 2~3초가 걸립니다. 출력은 512x512로 고정됩니다.
ONNX Runtime을 사용한 AnimeGANv3
import numpy as np
import onnxruntime as ort
from PIL import Image
# 모델 다운로드: https://github.com/TachibanaYoshino/AnimeGANv3/releases
session = ort.InferenceSession("AnimeGANv3_Hayao_36.onnx")
img = Image.open("portrait.jpg").convert("RGB")
w, h = img.size
scale = 512 / max(w, h)
new_w = int((w * scale) // 8) * 8
new_h = int((h * scale) // 8) * 8
img_resized = img.resize((new_w, new_h), Image.LANCZOS)
arr = np.array(img_resized).astype(np.float32) / 127.5 - 1.0
arr = arr[np.newaxis, :, :, :]
output = session.run(None, {session.get_inputs()[0].name: arr})
result_arr = (output[0][0] + 1.0) * 127.5
result_arr = np.clip(result_arr, 0, 255).astype(np.uint8)
Image.fromarray(result_arr).save("result.jpg", quality=90)
v3는 ONNX Runtime 덕분에 CPU에서 v2보다 빠르지만(~이미지당 약 700ms), 전처리(preprocessing) 과정을 수동으로 관리해야 합니다.
Photo to Anime API 호출하기
import requests
url = "https://phototoanime1.p.rapidapi.com/cartoonize-pro"
headers = {
"x-rapidapi-host": "phototoanime1.p.rapidapi.com",
"x-rapidapi-key": "YOUR_API_KEY",
}
for style in ["arcane", "pixar", "comic", "caricature"]:
with open("portrait.jpg", "rb") as f:
response = requests.post(
url,
headers=headers,
files={"image": f},
data={"style": style, "style_degree": "0.7"},
)
result = response.json()
print(f"{style}: {result['image_url']}")
성능 벤치마크 (Performance Benchmark)
동일한 인물 사진을 사용하여 두 도구를 모두 실행했습니다.
테스트 환경: Intel Core i7-7700HQ @ 2.80GHz, 4 코어, GPU 없음.
| 도구 | 첫 호출 (First call) | 안정 상태 (Steady state) | 출력 크기 (Output size) | 비고 |
|---|---|---|---|---|
| AnimeGANv2 (face_paint) | ~60s | 2-3s | 512x512 | 첫 실행 시 PyTorch 임포트 + 리포지토리 클론 + 8MB 가중치(weight) 다운로드 필요 |
| AnimeGANv3 (Hayao ONNX) | ~3s | 700ms | 입력값과 일치 | 4MB ONNX 모델, PyTorch 불필요 |
| Photo to Anime API | 1-2s | 1-2s | 최대 1600x1344 | 로컬 설정 불필요, 네트워크 포함 |
API는 콜드 스타트(Cold start, 모델 로드 불필요), 일관성(매 호출 시 동일한 지연 시간), 그리고 출력 해상도 측면에서 승리합니다. AnimeGANv3는 애니메이션 스타일을 유지한다면, 모델이 예열된(Warm) 후의 호출당 지연 시간(Latency) 측면에서 승리합니다. AnimeGANv2는 비용을 제외한 모든 지표에서 세 가지 중 가장 느립니다.
AnimeGAN을 선택해야 할 때
- 일본 애니메이션 스타일이면 충분할 때. 애니메이션 초상화만 필요한 경우 AnimeGAN이 이를 처리합니다.
- 오프라인 처리. 네트워크 의존성이 없습니다.
- 커스텀 학습. GPU 시간을 사용하여 자신만의 데이터셋으로 AnimeGAN을 미세 조정(Fine-tune)할 수 있습니다.
- 호출당 비용이 0원입니다. 기존 GPU 하드웨어를 사용하여 대량으로 처리할 경우 셀프 호스팅(Self-hosting)이 비용 측면에서 유리합니다.
API를 선택해야 할 때
- 다양한 예술적 스타일. Arcane, Pixar, Comic, Caricature, Illustration, Ghibli 등. AnimeGAN은 이러한 스타일들을 생성할 수 없습니다.
- 더 높은 출력 해상도. AnimeGAN의 고정된 512x512 대비 최대 1600x1344까지 지원합니다.
- 스타일 강도 조절. 미세한 효과부터 강한 효과까지 조절 가능한 style_degree 파라미터(0.0-1.0)를 제공합니다.
- 의존성 관리 불필요. PyTorch (~2GB), onnxruntime, 모델 가중치 다운로드가 필요 없습니다.
- 얼굴 인식 처리(Face-aware processing). 얼굴을 감지하고 부드러운 블렌딩(Blending)과 함께 스타일화를 적용합니다.
출처 (Sources)
- AnimeGANv2 PyTorch (bryandlee) - PyTorch 포트, 3개의 사전 학습된 가중치, torch.hub 통합
- AnimeGANv3 공식 리포지토리 - Hayao 및 Shinkai ONNX 모델, v1.1.0 릴리스
- AnimeGANv2 논문 및 TensorFlow 구현 - 아키텍처 상세 정보
이미지 병렬 비교, 6가지 프리미엄 스타일 데모, JavaScript 예제가 포함된 전체 가이드는 ai-engine.net에서 확인하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기