블로그

Go Hard

AI 애니메이션 변환 필터

1. 단순 필터(LUT/Edge) vs AI 맥락 인식(AnimeGAN2)• 단순 필터 방식 (Color LUT & Edge Detection)작동 원리: 전체 픽셀의 색상값을 매핑해 바꾸거나, Canny/Sobel 알고리즘으로 경계선만 검은 테두리로 추출합니다.한계점: 피사체가 사람인지 배경인지 구분하지 못하므로 이목구비가 왜곡되거나 배경 질감이 뭉개지는 현상이 발생합니다.• AI 맥락 인식 방식 (AnimeGAN2 Generator)작동 원리: 신경망이 이미지의 특징 맵(Feature Map)을 추출하여 피사체와 배경 구도를 파악합니다.장점: 단순 덮어씌우기가 아닌, 인물의 눈동자, 피부 음영, 하늘의 구름 등을 지브리 애니메이션 특유의 수채화 톤과 부드러운 선 처리로 재구성합니다.────────────────────────────────────────2. 실무적 문제 해결 및 자원 관리• VRAM 과부하 방지 (768px 다운사이징)4K 고해상도 이미지를 모델에 그대로 입력하면 비디오 메모리가 부족해져 서버가 다운될 위험이 있습니다.원본 비율을 유지하며 최대 변 길이를 768px로 제어하고, CNN 연산 규격에 맞춰 가로/세로 길이를 8의 배수로 조율하는 전처리를 적용했습니다. 체감 화질 손실 없이 메모리 점유율을 약 80% 이상 절감했습니다.• 메모리 자원 강제 해제 (try-finally)연산 종료 후 비디오 메모리가 잔여물로 남는 현상을 방지하기 위해 전체 추론 과정을 try-finally 구문으로 감싸고, 작업 직후 torch.cuda.empty_cache()와 gc.collect()를 호출해 자원을 확실히 반환하도록 설계했습니다.• Streamlit 파일 포인터 초기화 (seek(0))Streamlit 환경에서는 화면이 재실행될 때 업로드된 파일 객체의 커서가 맨 끝으로 가면서 0바이트 읽기 에러가 발생합니다. 이미지 로딩 직전 seek(0)을 호출해 파일 커서를 맨 앞으로 돌려두어 에러를 방지했습니다.• EXIF 회전 보정 (ImageOps.exif_transpose)스마트폰 세로 촬영 사진의 회전 메타데이터가 무시되어 이미지가 눕는 현상은 로드 직후 ImageOps.exif_transpose를 적용해 정방향으로 보정했습니다.────────────────────────────────────────3. 주요 프로젝트 링크본 프로젝트에 사용된 소스코드는 안전성이 검증된 로직으로 구동되며, 아래 링크에서 확인하실 수 있습니다.• 웹 실시간 체험:https://ghibliconverter-kktqsb3uvhcnl5t3keqtmp.streamlit.app/• 구글 코랩 테스트:https://colab.research.google.com/drive/1zu0l7Tebm-Dh5JlMecASi4r-MJqosaEg?hl=ko#• GitHub 저장소:https://github.com/gohard-lab/ghibli_converter• 유튜브 영상:https://youtu.be/Pd84sgTmay8• 뉴스 워드프레서:https://gohard.pe.kr/

AI 실무 활용AI화풍변환지브리화풍StreamlitVRAM이미지처리파이썬

채널톡 아이콘