Giter VIP home page Giter VIP logo

neural-fonts's Introduction

Neural-fonts - GAN을 활용한 한글 폰트 제작 프로젝트

GAN을 사용하여 한글 폰트를 자동으로 만들어 주는 프로젝트입니다.

디자이너가 399자만 만들면 딥러닝을 통해서 해당 폰트의 style 정보를 훈련하여 11,172자의 완성형 한글을 생성합니다.

중국 폰트를 생성하는 zi2zi를 한글에 맞게 수정하여 사용하였습니다.

Gallery

필기체 (나눔 붓 폰트)

Original

Generated

고딕체 (푸른전남 폰트)

Original

Generated

Overview

399자에 대해서만 training을 할 경우 완성형 한글의 글자수에 비해서 input 개수가 부족합니다.

이를 해결하기 위해서 먼저 다양한 한글 폰트에 대해서 training한 model을 생성합니다.

생성된 model에 transfer learning을 통해서 399자를 training하고 이를 사용하여 폰트를 생성합니다.

사용법

Requirement

  • Python 2.7
  • CUDA
  • cudnn
  • Tensorflow >= 1.0.1
  • Pillow(PIL)
  • numpy >= 1.12.1
  • scipy >= 0.18.1
  • imageio

Create of download pre-trained model

먼저 한글 폰트에 대해서 training 된 model을 생성합니다.

32개의 copyleft font에 대하여 pre-train된 model을 다운받아서 사용하거나 원하는 폰트를 사용하여 직접 training을 할 수 있습니다.

Pre-trained Model

새로 training을 할 경우 zi2zi의 readme를 참조하여 training을 수행하면 됩니다.

Training Data 생성

먼저 font template을 다운받아서 인쇄후 칸에 맞춰서 글자를 작성합니다.

작성한 template을 scan한 다음 그림판 등을 사용하여 여백 부분을 잘라냅니다.

잘라낸 image를 페이지 순서대로 1-uniform.png, 2-uniform.png, 3-uniform.png로 이름을 변경합니다.

아래 명령어를 사용하여 폰트 image들을 생성합니다.

python crop.py --src_dir=src_dir
               --dst_dir=dst_dir

dst_dir에 각 글자의 unicode를 파일명으로 하는 폰트 image들이 생성됩니다.

Preprocessing

IO bottleneck을 막기 위해서 preprocessing을 거쳐 binary를 생성한 다음 사용합니다.

아래 명령어를 실행하여 source font와 handwritten font가 합쳐진 training을 위한 font image를 생성합니다.

python font2img.py --src_font=src.ttf
                   --dst_font=src.ttf
                   --sample_count=1000
                   --sample_dir=sample_dir
                   --label=0
                   --handwriting_dir=handwriting_dir

sample_dir은 training을 위한 font image가 저장 될 폴더입니다. handwriting_dir option을 사용하여 template을 통해 생성한 폰트 image 폴더를 알려줍니다. Label option은 category embedding에서의 font index를 나타내며 기본값은 0입니다. 여러개의 폰트를 training하고 싶은 경우 각각의 폰트에 다른 label을 할당하면 됩니다.

Image들의 생성이 완료되었으면 package.py를 실행하여 image를 묶어서 binary format으로 만듭니다.

python package.py --fixed_sample=1
                  --dir=image_directory
                  --save_dir=binary_save_directory

명령어를 실행하면 train.obj가 save_dir에 생성됩니다. 해당 파일이 training을 위해 사용되는 data입니다.

Experiment Layout

experiment/
└── data
    └── train.obj

Root 폴더 밑에 폰트를 위한 폴더를 생성한 다음 앞에서 생성 한 binary 파일을 data 폴더 밑으로 옮깁니다.

Train

Training은 두 단계로 첫 번째 training과 fine-tuning으로 나뉩니다.

아래의 명령어를 실행하여 training을 수행합니다.

Step 1

python train.py --experiment_dir=experiment 
                --experiment_id=0
                --batch_size=16 
                --lr=0.001
                --epoch=30 
                --sample_steps=100 
                --schedule=10 
                --L1_penalty=100 
                --Lconst_penalty=15

Step 2

python train.py --experiment_dir=experiment 
                --experiment_id=0
                --batch_size=16 
                --lr=0.001
                --epoch=120 
                --sample_steps=100 
                --schedule=40 
                --L1_penalty=500 
                --Lconst_penalty=1000

Inference

Training이 끝난 후 아래 명령어를 통해 inference를 수행합니다.

python infer.py --model_dir=checkpoint_dir/ 
                --batch_size=16 
                --source_obj=binary_obj_path 
                --embedding_ids=label[s] of the font, separate by comma
                --save_dir=save_dir/

Acknowledgements

Code derived and rehashed from:

License

MIT License

neural-fonts's People

Contributors

chongzhe avatar jinevening avatar kaonashi-tyc avatar periannath avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

neural-fonts's Issues

pre-trained model 다운로드 링크 만료

안녕하세요?
스크린샷 2021-10-13 오전 9 33 46

read me에 있는 링크에 접속하니 만료라고 뜹니다.
pre-trained 모델을 받을 수 있도록 링크 올려주시면 감사하겠습니다!

감사합니다.

infer.py 이후에 검은색 사진들만 나옵니다

안녕하세요 프로젝트 참고하여 진행하다가 질문이 있습니다
우선 웹 페이지로 결과가 나오지 않아 아래와 같이 직접 실행하였습니다 (zi2zi 프로젝트를 참고하였습니다)
(font2img.py & package로 train.obj / val.obj는 제대로 나왔고 경로도 올바른 곳에 넣어 진행하였습니다)

이후 과정은 아래 두가지 옵션으로 진행합니다

CUDA_VISIBLE_DEVICES=1 python train.py --experiment_dir=experiment
--experiment_id=0
--batch_size=32
--lr=0.001
--epoch=30
--sample_steps=100
--schedule=10
--L1_penalty=100
--Lconst_penalty=15

=> train이 끝나고 나면 sample 사진을 통해 제 모델의 학습이 잘 되었음을 확인 후 아래 작업을 진행하였습니다.

image
(50폰트 30 epoch)

CUDA_VISIBLE_DEVICES=1 python infer.py --model_dir=/home/zi2zi/experiment/checkpoint/experiment_0_batch_32
--batch_size=32
--source_obj=/home/zi2zi/experiment/data/val.obj
--embedding_ids=1
--save_dir=save_dir/

=> 다만 infer.py를 진행하고 나면 --save_dir에 준 경로에 검은색으로 된 사진들만 가득합니다

image

neural-font-webapp의 결과물을 보면 아래와 같이 result 폴더 가득차도록 11172자에 가까운양의 폰트 샘플들이 생성됩니다
(다만 학습 모델이 기한 만료로 받을 수 없어 나눔고딕으로만 학습하기에 폰트는 전부 나눔고딕입니다)
image

혹시 검은색 사진만 나오는 이유나 조언을 들을 수 있을까요?
또한 제가 학습시켜둔 checkpoint들을 해당 프로젝트에 적용한다면 어느 경로에 넣어두면 될지도 여쭙고 싶습니다 🙏🙏

['cannot import name 'DatasetFromObj'] 에러 메시지가 뜹니다 ㅠㅠ

안녕하세요. GAN 한글 폰트를 만드는데 관심이 있어 작성자님의 README를 읽으며 그대로 따라해보고 있습니다.

근데 1번째 train.py를 실행시키는 과정에서 'cannot import name 'DatasetFromObj' 오류가 뜨면서 더 이상 진행할 수 없습니다.

train.py의 1번째 줄 from data import DatasetFromObj에서 오류가 나는데 도와주실 수 있을까요 ??

깃헙 질문 1

제 폴더 상황은 이렇습니다. package.py까지는 실행했고 이후 experiment/data/train.obj 생성까지 완료했습니다.

깃헙 질문 1-1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.